Автозаполнение / автозаполнение с несколькими индексами и Lucene.Net?

Есть ли у кого-нибудь предложения, когда дело доходит до построения поиска с автоподсказкой / автозаполнением по нескольким индексам?

Обновление: я нашел эту ссылку, которая может быть как мне подойти к моему решению.


person DDiVita    schedule 17.05.2011    source источник


Ответы (1)


Вы можете использовать MultiReader, чтобы читать от нескольких читателей. Вот пример перебора всех проиндексированных терминов в поле с именем «данные». Вы указываете, где вы хотите начать перечисление при вызове .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;
    }
}
person sisve    schedule 22.05.2011
comment
Есть ли способ добиться того же с помощью LinqToLucene? - person DDiVita; 23.05.2011
comment
Linq to Lucene выполняет запросы, а не перечисляет термины. - person sisve; 24.05.2011