フレーズ クエリを使用して lucene のトークン化されたインデックスを検索すると、奇妙な問題が発生します。
次の方法でインデックスを作成します
Document doc = new Document();
FieldType ft = new FieldType(StringField.TYPE_STORED);
ft.setTokenized(true);
Field field1 = new Field("key", "T-Test 1", ft);
doc.add(field1)
Field field2 = new Field("key", "T-Test 2", ft);
doc.add(field2)
Field field3 = new Field("key", "T-Test 3", ft);
doc.add(field3)
Field field4 = new Field("key", "T-Test", ft);
doc.add(field4)
WhitespaceAnalyzer を使用して値をトークン化します。文字列「T-Test」を検索したい場合は、結果として値T-Test 1、T-Test 2、T-Test 3、T-Testを取得します
次の方法でクエリを作成します。
PhraseQuery query = new PhraseQuery();
query.add(new Term("key","T-Test"));
query.setSlop(0);
BooleanQuery mainQuery = new BooleanQuery();
mainQuery.add(query, Occur.MUST);
同じ効果で ComplexPhraseQueryParser も使用してみました。すべての T-Test 値を取得するだけです。しかし、「T-Test 1、T-Test 2、および T-Test 3」ではなく、T-Test だけが必要です。私は絶望的になりそうです ありがとう