C# 多栏索引搜索Microsoft.Isam.Esent
我面临以下问题:我在数据库index1{binaryColumn1,binaryColumn2}上有一个复合索引。我使用以下设置要使用的索引:C# 多栏索引搜索Microsoft.Isam.Esent,c#,esent,C#,Esent,我面临以下问题:我在数据库index1{binaryColumn1,binaryColumn2}上有一个复合索引。我使用以下设置要使用的索引: Api.JetSetCurrentIndex(_session, _table, index1); 要创建密钥,请执行以下操作: Api.MakeKey(_session, _table, binaryValue, MakeKeyGrbit.NewKey); 然后尝试使用以下选项执行搜索: Api.TrySeek(_session, _table,
Api.JetSetCurrentIndex(_session, _table, index1);
要创建密钥,请执行以下操作:
Api.MakeKey(_session, _table, binaryValue, MakeKeyGrbit.NewKey);
然后尝试使用以下选项执行搜索:
Api.TrySeek(_session, _table, SeekGrbit.SeekEQ);
如果index1仅用于1列,则该功能将正常工作并返回true。如果我有多个列并尝试搜索单个列的值(例如,对于binaryColumn1={0x01,0x23}),它总是返回false
如何搜索此值?(注:我不能更改索引,也不能创建新索引。)这可能吗
谢谢你你所做的只适用于
{0x01,0x00}
。您不能通过单个调用来完成,因为第二列的值将混合SeekEQ
grbit
您可以执行SeekGE
,但随后需要检索列以确保值实际上是正确的(而不是类似于{0x22,0x23}
)。您必须执行以下操作:
SetCurrentIndex()
MakeKey(…,二进制值1,MakeKeyGrbit.NewKey | makeygrbit.FullColumnStartLimit);//用0x00追加搜索缓冲区的其余部分。
Seek(通用电气);
MakeKey(…二进制值1,MakeKeyGrbit.NewKey | makeygrbit.FullColumnEndLimit);//用0xff追加搜索缓冲区的其余部分。
Api.JetSetIndexRange();
然后可以使用Api.TryMoveNext()
迭代该列等于binaryValue1
的所有行
还要看看项目中包含的测试代码--HowDoI.cs
文件有很多很好的例子
对不起,伪代码;我现在手头没有源代码
-马丁