2

私は基本的にビューモデル(保存され、インデックス化されていないドキュメントフィールド)、ID(ドキュメントの検索と更新を可能にするために保存され、インデックス化されたフィールド)、およびGoogleがカバーする用語のリストを含む顧客を保存するLuceneインデックスを持っていますのような検索 (Term という名前の複数のフィールド インスタンス)。用語は、ビュー モデルのフィールドであってもなくてもかまいません。

これは、用語によるドキュメントの実際の検索には問題なく機能します。問題は、自動提案を実装する方法です。基本的に、入力された値の続きである可能性のある用語 (Lucene 用語ではなくフィールド) 値のリストを取得します (つまり、「Co」は「コロラド」、「塗り絵」になる可能性があります)。 "など、これらは少なくとも 1 つのドキュメントの用語フィールドの実際の値であるためです。

4

1 に答える 1

2

これを行う方法はたくさんありますが、すばやく簡単な方法が必要な場合は、TermEnum.

この小さなコード サンプルを新しい C# コンソール アプリケーションに貼り付けて、最初から機能するかどうかを確認してください。

RAMDirectory dir = new RAMDirectory();
IndexWriter iw = new IndexWriter(dir, new KeywordAnalyzer(), IndexWriter.MaxFieldLength.UNLIMITED);

Document d = new Document();
Field f = new Field("text", "", Field.Store.YES, Field.Index.ANALYZED);
d.Add(f);

f.SetValue("abc");
iw.AddDocument(d);

f.SetValue("colorado");
iw.AddDocument(d);

f.SetValue("coloring book");
iw.AddDocument(d);

iw.Commit();
IndexReader reader = iw.GetReader();

TermEnum terms = reader.Terms(new Term("text", "co"));
int maxSuggestsCpt = 0;
// will print:
// colorado
// coloring book
do
{
    Console.WriteLine(terms.Term.Text);
    maxSuggestsCpt++;
    if (maxSuggestsCpt >= 5)
        break;
}
while (terms.Next() && terms.Term.Text.StartsWith("co"));

reader.Dispose();
iw.Dispose();
于 2013-04-12T20:35:06.303 に答える