Java Lucene短语查询不工作
我有一个字符串Java Lucene短语查询不工作,java,elasticsearch,lucene,Java,elasticsearch,Lucene,我有一个字符串address=“456 SOME STREET” 我必须在Lucene中搜索,我已经为此创建了索引 StringField address = new StringField(Constants.ORGANIZATION_ADDRESS, address,Field.Store.YES); 我用下面的代码用短语查询来搜索这个字符串 String[] tokens = address.split("\\s+"); PhraseQuery addressQuery = new Ph
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);
即使这样也不会有任何结果。我的目的是获得精确匹配在索引文档时,您可能应该使用TextField
,而不是StringField
StringField
按原样存储字符串,而不将其拆分为令牌,因此在您的示例中,索引将包含“456 SOME STREET”
。只有带有此术语的术语查询
将检索它(或前缀查询
)
TextField
是索引文本时的标准字段,它将文本拆分为标记(使用标记器)并分别索引单词,在您的示例中,456
,一些
,街道
都可用于查找文档。
了解更多信息(有点旧,但相关)。我需要字符串“456 SOME STREET”的精确匹配,所以我应该使用TemQuery和StringField吗?虽然我也没有得到结果。我已经编辑了问题并包含了代码,但我找不到我缺少的内容。似乎正确。。。尝试删除toLowerCase()
,分析器应该处理它,而不是您。