Solr搜索查询:在邻域中给出带有数字的单词

时间:2015-02-05 14:06:10

标签: regex solr lucene

我刚刚发现,solr服务器可以找到与另一个单词给定距离的单词,如下所示:

text_original : "word1 word2"~10

所以solr正在搜索word1,其中word2的最大距离为10个字左右。

很好,YAY

但是现在我只想用一些不加思索的数字来做同样的事情。我只想查看某些关键字在给定范围内出现的数字。作为正则表达式,我会写出类似的东西:

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

但是,是的,这两个术语现在都与OR相关联,所以我找到了数字或我给出的单词。但我不能使用引用,因为正则表达式将不起作用。

任何人都可以给我一个暗示,这个搜索条件必须是哪个星座,它的描述是否有效?

1 个答案:

答案 0 :(得分:1)

您可以通过ComplexPhraseQueryParser执行此操作,并执行以下查询:

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

请记住,lucene中的正则表达式查询必须与整个术语匹配,因此这与#34; word1 word2"不匹配,但它会匹配" 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);