Lucene (3.6) ドキュメントに「タイトル」フィールドと「キーワード」フィールドがあります。のオブジェクトtitle=Testfair 2012-09
と のキーワードがあるsomeTest
場合、ドキュメントは次のように記述します。
Document doc = new Document();
doc.add(new Field("title", title, Field.Store.NO, Field.Index.ANALYZED));
doc.add(new Field("keyword", keyword, Field.Store.NO, Field.Index.ANALYZED));
私が使用する検索のために
QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_36, new String[] { "title", "keyword" }, new StandardAnalyzer(Version.LUCENE_36));
queryParser.setDefaultOperator(QueryParser.AND_OPERATOR);
queryParser.setAllowLeadingWildcard(true);
Query query = queryParser.parse(queryString);
IndexSearcher searcher = createSearcher();
TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true);
searcher.search(query, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
インデックスでは、( Lukeを介して) インデックス内のフィールドにとtitle
の値があることがわかります。"Testfair", "2012"
"09"
今、検索時に次の動作が必要です。
Testfair 2012-09 -> match (1)
estfair -> match (2)
Testfair baz -> no match (3)
ケース(2)の暗黙のワイルドカード検索が必要なため、これを処理する方法がわかりません。*
検索語を空白で分割し、すべての単語の前後に追加すると、 が検索される+(title:*testmesse*) +(title:*2012-09*)
ため、2012-09
は分割されず、結果は見つかりません。私が正しく理解している場合、問題はの使用法にありますがMultiFieldQueryParser
、検索を正しく設定する方法や、インデックス作成プロセスを何らかの方法で変更する必要があるかどうかはわかりません。
どんな助けでも大歓迎です!ありがとう!