こんにちは、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 を使用しましたが、これらも機能しません。何か案は?