6

私はlucene.netに非常に慣れていません。lucene.net を使用して、複数のフィールドのデータにインデックスを付けます。このようにして、インデックスデータを作成しました

                    Document doc = new Document();
                    doc.Add(new Field("ID", oData.ID.ToString() + "_" + oData.Type, Field.Store.YES, Field.Index.UN_TOKENIZED));
                    doc.Add(new Field("Title", oData.Title, Field.Store.YES, Field.Index.TOKENIZED));
                    doc.Add(new Field("Description", oData.Description, Field.Store.YES, Field.Index.TOKENIZED));
                    doc.Add(new Field("Url", oData.Url, Field.Store.YES, Field.Index.TOKENIZED));
                    writer.AddDocument(doc);

ユーザーが検索すると、ユーザーは Audi BMW ECUのようなデータを入力できるようになりました

1) 最初に、 [Audi] [BMW] [ECU]のような各単語を、 title,description,url のようなインデックス フィールドに対して検索する必要があります。各単語は、 title,description,url という3 つのフィールドに対して検索する必要があります。だから私は何をする必要があります。私が書く必要があるコード。

2) 2 回目は、" Audi BMW ECU "というフレーズをタイトル、説明、URLフィールドに対して検索する必要があります。

3) ユーザーは、Audi BMW ECU * またはAudi BMW ECU?のように検索するときに入力ワイルド カードを使用できます。 4) あいまい検索と複数単語検索を追加したいので、ユーザーのスペルミスがあった場合にも結果が表示されます。

あらゆる種類のユーザー入力の結果を得た結果として、コードとルーチンのすべてのロジックと機能をどのようにクラブアップできるか教えてください。

可能であれば、この問題について詳しく話し合ってください。

4

1 に答える 1

13

このクラスを使用して、QueryParserユーザー提供のクエリをLuceneQueryオブジェクトツリーに解析できます。MultiFieldQueryParser複数のフィールドを検索するクエリを生成するもあります。これはあなたが求めているものと一致します。

var fields = new[] { "Title", "Description", "Url" };
var analyzer = new StandardAnalyzer(Version.LUCENE_30);
var queryParser = new MultiFieldQueryParser(Version.LUCENE_30, fields, analyzer);
var query = queryParser.Parse("Audi BMW ECU");

生成されたクエリはのようになり(Title:audi Description:audi Url:audi) (Title:bmw Description:bmw Url:bmw) (Title:ecu Description:ecu Url:ecu)ます。

フレーズを引用符で囲むことにより、ユーザーがフレーズクエリを作成できるようにすることができます。これは、Luceneの標準のクエリ形式です。

var fields = new[] { "Title", "Description", "Url" };
var analyzer = new StandardAnalyzer(Version.LUCENE_30);
var queryParser = new MultiFieldQueryParser(Version.LUCENE_30, fields, analyzer);
var query = queryParser.Parse("\"Audi BMW ECU\"");

この生成されたクエリはのようになりTitle:"audi bmw ecu" Description:"audi bmw ecu" Url:"audi bmw ecu"ます。

QueryParserは、必要に応じて*、およびを使用したワイルドカードクエリもサポート?します。あいまい検索もサポートされています。「アウディ〜0.5」。近接検索や用語ブーストなど、他にもいくつかのクエリタイプを利用できます。すべては、クエリパーサー構文のドキュメントで利用できます。

スペルミスのあるユーザーを支援する機能を追加することは、より大きな仕事です。クエリをあいまい検索に書き直すこともできますが、それでは、有効になっているアナライザー(したがって、使用しているステミング)が無効になります。また、クエリをより多くの一致を持つ同様のクエリに書き直すことで、さまざまな意味のあるソリューションを試すこともできます。ここで実験することはたくさんあります。

于 2012-08-22T18:13:38.447 に答える