0

フレーズ クエリを使用して 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 だけが必要です。私は絶望的になりそうです ありがとう

4

1 に答える 1

0

問題に Stringfield を使用するだけです。このソリューションは完全に正常に機能します。

FieldType ft = new FieldType(StringField.TYPE_STORED);
ft.setTokenized(true);
StringField field = new StringField(key, value,Field.Store.YES);
于 2015-07-23T06:46:53.377 に答える