Lucene Phrase Query无效

时间:2017-03-17 00:39:19

标签: 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 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);

即使这样也没有任何结果。我打算得到完全匹配

1 个答案:

答案 0 :(得分:0)

在索引文档时,您应该使用TextField,而不是StringField

StringField按原样存储字符串,而不会将其分解为标记,因此在您的示例中,索引将包含"456 SOME STREET"。只有具有此字词的TermQuery才会检索它(或PrefixQuery)。

TextField是索引文本时的标准字段,它将文本拆分为标记(使用Tokenizer)并单独索引单词,在您的示例中为456SOME,{ {1}}都可以用来查找文档。 阅读更多相关信息flux(有点旧,但相关)。