使用空格的Solr通配符查询

tba*_*baz 20 solr wildcard

我有一个通配符查询,看起来像:

q=location:los a*
Run Code Online (Sandbox Code Playgroud)

我想要它匹配"洛杉矶"和"洛杉矶alt".像这样的查询:

q=los*
Run Code Online (Sandbox Code Playgroud)

工作得很好,但只要我添加空格我就没有结果.我如何在通配符查询中使用空格?

小智 33

我自己最近遇到过这个问题,似乎你需要做的只是逃避查询中的空间.您的原始查询将由Solr解释为如下所示:

location:los id:a*
Run Code Online (Sandbox Code Playgroud)

(假设"id"是您的默认搜索字段)

但是,如果您将查询编写为:

location:los\ a*
Run Code Online (Sandbox Code Playgroud)

然后它最终会被解析为:

location:los a*
Run Code Online (Sandbox Code Playgroud)

以上应该产生您想要的结果(假设您的数据被正确编入索引).

提示:弄清楚这一切很简单.只需添加&debugQuery=on到提交查询时使用的URL的末尾,以查看Solr如何解析它.

  • 我已经确认这适用于字符串字段(但不是文本,请参阅http://stackoverflow.com/questions/2630879/solr-exact-word-search以获取更多信息).希望我能早点发现这个......还有,debugQuery = on本身应该得到一个upvote - 非常有帮助! (2认同)

Jai*_*mar 5

使用复杂查询解析器解决您的问题:

q={!complexphrase inOrder=true}location:"los a*"
Run Code Online (Sandbox Code Playgroud)

要了解有关复杂短语查询解析器的更多信息,请查看此链接! https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-ComplexPhraseQueryParser


Okk*_*ein 1

如果没有看到您的配置,我会说使用 KeywordTokenizerFactory 因为您现在可能会在空白上进行标记。