使用多个索引和Lucene.Net进行自动提示/自动完成?

时间:2011-05-17 19:23:44

标签: autocomplete lucene.net autosuggest

在多个索引上构建自动提示/自动完成搜索时,有没有人有任何建议?

更新:我发现这可能是我需要处理解决方案的link

1 个答案:

答案 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;
    }
}