elasticsearch,lucene,Java,elasticsearch,Lucene" /> elasticsearch,lucene,Java,elasticsearch,Lucene" />

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()
,分析器应该处理它,而不是您。