2015-02-05 74 views
0

我才发现,那Solr的服务器可以找到的话,其在给定距离,以另一个词是这样的:Solr的搜索查询:鉴于词与数字在附近

text_original : "word1 word2"~10 

所以Solr的正在搜索字词1这在10个字左右的最大距离中有一个单词2。

很大,YAY

,但现在我只想做同样的只是一些undifined数字。我只想看看某些关键字在给定范围内出现的数字。作为一个正则表达式,我会写这样的东西:

myWord(\s)+(([A-Za-z]+)\s){0,10}([0-9]{3,12}(\.|\,)[0-9]{1,4}) 

或类似的东西。

所以我认为这将是很容易Solr中做到这一点类似于一个范围的话:

text_original: Word1 /[0-9]{3,12}/~10 

但是,是的,在这两个术语现在或链接,所以我觉得数字或我定单词。但是我不能使用引号,因为正则表达式不起作用。

任何人都可以给我留下一个暗示,这个搜索条件必须是星座吗?

回答

1

您可以通过ComplexPhraseQueryParser做到这一点,有喜欢的查询:

text_original:"Word1 /[0-9]{3,12}/"~10 

请记住,在Lucene的正则表达式查询必须整个学期匹配,因此这将不符合“字词1字词2 “,但它会匹配”word1额外的东西20“。在我的测试中,Slop似乎也有点奇怪。

你可以做到这一点,如果你愿意依傍写原始Lucene的查询,也可以使用SpanQuery API完成它,比如:

SpanQuery wordQuery = new SpanTermQuery(new Term("text_original", "Word1")); 
SpanQuery numQuery = new SpanMultiTermQueryWrapper(new RegexpQuery("text_original", "[0-9]{3,12}")); 
Query proxQuery = new SpanNearQuery(new SpanQuery[] {wordQuery, numQuery}, 10, false); 
searcher.search(proxQuery, numHits); 
+0

我有一个做的:{!复合词inOrder = true} text_original:“Word1/MYREGEX /”〜10 ---你知道一个让我模糊搜索第一个单词的技巧吗?像'bla bla bla 208349'字样,还会找到'bla bla bla 2012012'字样? addrition中的 – Smoki 2015-02-24 11:20:03

+0

:我使用solrj来访问solr-server,因此不允许或不可能使用多重查询:(((( – Smoki 2015-02-24 12:29:13