2017-03-17 119 views
0

我有一个字符串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); 

即使这并不给出任何结果。我打算获得完全匹配

回答

0

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

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

TextField是标准的现场索引文本时,它将该文本标记(使用一个标记)和索引的话分开,在你的榜样,456SOMESTREET都可以用来查找文件。 阅读更多关于here(有点旧,但相关)。

+0

我需要为字符串“456一些街头”,所以我应该使用TemQuery和StringField一个精确匹配?虽然我也没有得到结果。 – Ramandeep

+0

是的。如果它不起作用,请发布您的代码。 –

+0

我编辑了这个问题,并包含代码,我无法找到我所缺少的。 – Ramandeep