0

こんにちは、Lucene ライブラリを使用して 170K を超えるレコードを検索するオートコンプリート システムを作成しようとしています。

しかし、少し問題があります。

たとえば、Candice Gra(...) を検索すると、次のようなレコードが表示されます

Candice Jackson
Candice Hamilton
Candice Hayes

Candice Grahamしかし、Luceneに正確Candice Grahamに入力する必要があることを見つけさせない ようにしCandice Grahamます。

ここに私がクエリを構築しているコードがあります。

Directory directory = FSDirectory.Open(new DirectoryInfo(context.Server.MapPath("
ISet<string> stopWordSet = new HashSet<string>(stopWords);
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30, stopWordSet);

IndexReader indexReader = IndexReader.Open(directory, true);
Searcher indexSearch = new IndexSearcher(indexReader);

//Singe Field Search
var queryParser = new QueryParser(Version.LUCENE_30,
                        "Title",
                        analyzer);
string strQuery = string.Format("{0}", q);
var query = queryParser.Parse(strQuery);

このようにstrQueryを構築すると(*クエリに追加されます)

string strQuery = string.Format("{0}*", q);

しかし、この方法を使用すると、無関係なレコードももたらされます。たとえば、Candice Gra(...) をもう一度検索すると、次のようなレコードが返されます

Grass
Gravity
Gray (etc.)

ところで、私は KeywordAnalyzer と SimpleAnalyzer を使用しましたが、これらも機能しません。何か案は?

4

2 に答える 2

2

検索に含める場合は、スペースをエスケープする必要があります。

var query = queryParser.Parse(QueryParser.Escape(strQuery));
于 2013-09-17T12:18:04.383 に答える
1

この 2 つの単語の間に AND キーワードを挿入する必要があると思います。

「キャンディス」と「グラ」

http://lucene.apache.org/core/2_9_4/queryparsersyntax.html#AND

于 2013-09-16T11:56:46.767 に答える