Вы можете использовать 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;
}
}