Lucene短语查询和标记化索引

时间:2015-07-03 10:41:44

标签: search indexing lucene tokenize phrase

我在使用短语查询搜索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检验1,T检验2,T检验3,T检验

我按以下方式创建查询。

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而不是“T-Test 1,T-Test 2和T-Test 3” 有人可以帮我吗。 我接近变得绝望 感谢

1 个答案:

答案 0 :(得分:0)

我只是使用Stringfield来解决问题。这个解决方案完美无缺。

FieldType ft = new FieldType(StringField.TYPE_STORED);
ft.setTokenized(true);
StringField field = new StringField(key, value,Field.Store.YES);