Solr 搜索查询:给定的单词在附近有数字

Solr search query : Given word with numbers in neighborhood

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

text_original : "word1 word2"~10

所以 solr 正在搜索 word1,它在最大距离为 10 个单词的范围内有一个 word2。

太棒了,赞

但现在我只想对一些未定义的数字做同样的事情。我只想查看在给定范围 os 某些关键字中出现的数字。作为正则表达式,我会写这样的东西:

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 相关联,所以我找到数字 OR 我给定的词。但是我不能使用引号,因为那时正则表达式将不起作用。

任何人都可以给我一个提示,这个搜索词必须是哪个星座,它是否像描述的那样工作?

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

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

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