Lucene FieldCache的使用

来源:互联网 发布:陈强 数据集 编辑:程序博客网 时间:2024/05/10 01:10

版本:Lucene.Net-2.3.2
Lucene文档内容:
Index   ID
0       9
1       2
2       4
3       7
C#代码:
Lucene.Net.Search。IndexSearcher searcher = new Lucene.Net.Search。IndexSearcher("E://Lucene//Index");
Lucene.Net.Index.IndexReader reader = searcher.Reader;
var index1 = FieldCache_Fields.DEFAULT.GetStringIndex(reader, "ID");
var index2 = FieldCache_Fields.DEFAULT.GetStrings(reader, "ID");
string[] lookups = index1.Lookup;
int[] orders = index1.Order;
以下是对结果的分析说明:
lookups:
0      null
1      2
2      4
3      7
4      9
orders:
0      4
1      1
2      2
3      3
对比数据,找出它们之间的关系后就能明白Lucene的FieldCache是如何使用的。
Index   ID    Lookup Order
0       9     4
1       2     1
2       4     2
3       7     3
很明显,它们具有以上的关系,通过上面的关系可以从FieldCache中得到我们想要的内容,下面是简单的使用例子:
index2[hits.Id(i)]  拿出第i个搜索结果在FieldCache中相对应的内容
QueryParser myquery = new QueryParser("", analyzer);
Query query = myquery.Parse("ID:/"4/");
Hits hits = searcher.Search(query);
hits.Id(0) 的值为2
index2[hits.Id(0)] 的值为4
如果要拿出从小到大排序后的ID中的第3位的值,则按下面的方法拿:
lookups[3]
思考:拿出从小到大排序后的ID中的第3位的Index值该如何拿?
方案1:利用HashTable建立Index和Lookup Order的关系,用得到的值去HashTable中搜索。
希望大家能想到更好的方案。

原创粉丝点击