在多个索引上构建自动提示/自动完成搜索时,有没有人有任何建议?
更新:我发现这可能是我需要处理解决方案的link。
答案 0 :(得分:1)
您可以使用MultiReader
来阅读多个读者。这是一个在名为“data”的字段中迭代所有索引术语的示例。您可以在调用.Terms(...)
时指定要在哪里开始枚举。您可以指定另一个起点来匹配用户目前输入的内容,以便在术语级别上提供自动完成功能。
using System;
using Lucene.Net.Analysis;
using Lucene.Net.Documents;
using Lucene.Net.Index;
using Lucene.Net.Store;
public static class ConsoleApp {
private static readonly String FieldName = "data";
public static void Main() {
var ram1 = Create(prefix: "b");
var ram2 = Create(prefix: "a");
var multiReader = new MultiReader(new[] {
IndexReader.Open(ram1, readOnly: true),
IndexReader.Open(ram2, readOnly: true)
});
var termsEnum = multiReader.Terms(new Term(FieldName));
do {
var term = termsEnum.Term();
if (term.Field() != FieldName)
break;
Console.WriteLine(term.Text());
} while (termsEnum.Next());
}
public static Directory Create(String prefix) {
var dir = new RAMDirectory();
var writer = new IndexWriter(dir, a: new KeywordAnalyzer(), create: true, mfl: IndexWriter.MaxFieldLength.UNLIMITED);
for (var i = 0; i < 5; ++i) {
var doc = new Document();
doc.Add(new Field(FieldName, prefix + i, Field.Store.NO, Field.Index.NOT_ANALYZED));
writer.AddDocument(doc);
}
writer.Close();
return dir;
}
}