我有一个字符串address = "456 SOME STREET";
我必须在Lucene中搜索,我已经为此创建了索引
StringField address = new StringField(Constants.ORGANIZATION_ADDRESS, address,Field.Store.YES);
我正在使用短语查询使用以下代码
搜索此字符串String[] tokens = address.split("\\s+");
PhraseQuery addressQuery = new PhraseQuery(Constants.ORGANIZATION_ADDRESS, tokens);
finalQuery.add(addressQuery, BooleanClause.Occur.MUST);
但是它没有给我任何结果,我也尝试过TermQuery,但这也没有用。真的很感激任何帮助,因为我现在尝试了很多选项,我无法弄清楚什么是错的
我也在下面尝试过 索引:
doc.add(new StringField(Constants.ORGANIZATION_ADDRESS, address,Field.Store.YES));
使用术语查询进行搜索:
fullAddressExact= fullAddressExact.toLowerCase();
TermQuery tq = new TermQuery(new Term(Constants.ORGANIZATION_ADDRESS,fullAddressExact));
finalQuery.add(tq, BooleanClause.Occur.MUST);
即使这样也没有任何结果。我打算得到完全匹配
答案 0 :(得分:0)
在索引文档时,您应该使用TextField
,而不是StringField
。
StringField
按原样存储字符串,而不会将其分解为标记,因此在您的示例中,索引将包含"456 SOME STREET"
。只有具有此字词的TermQuery
才会检索它(或PrefixQuery
)。
TextField
是索引文本时的标准字段,它将文本拆分为标记(使用Tokenizer)并单独索引单词,在您的示例中为456
,SOME
,{ {1}}都可以用来查找文档。
阅读更多相关信息flux(有点旧,但相关)。