【问题标题】:plus sign in solr query is not correctly treatedsolr 查询中的加号未正确处理
【发布时间】:2015-01-08 04:11:51
【问题描述】:

全部:

我是 Solr 的新手,当我使用 solr 示例导入一些随机文档时,我在 q 中使用搜索查询,例如:

fund+report

fund和+之间没有空格,我以为它会在文档中搜索一个单词“fund+report”,这在文档中很少发生,但是返回很多结果,查询url是:

http://localhost:8983/solr/collection1/select?q=fund%2Breport&fl=id+filename+%5Bexplain%5D&wt=xml&indent=true

我认为 Solr 对待我的查询就像:

fund report

fund OR report

谁能告诉我为什么 solr 会这样对待我的查询?以及如何让 solr 将fund+report 视为一个词?

谢谢

【问题讨论】:

  • 您使用的是 ColdFusion,对吗?
  • @David Faber 不,只是带有 solr 示例的管理页面
  • 好的。仅供参考,您可以更改 Solr 集合配置中的默认布尔运算符,以便 Solr 将fund report 视为fund AND report 而不是fund OR report。您还可以配置术语彼此之间的接近程度等。

标签: solr


【解决方案1】:

HTTP 调用将简单地将+ 转换为空格。如果您需要一个实际的+ 符号,那么您需要使用+ 的URL 编码值(我认为是%2B)。如果您正在寻找短语 基金报告,那么您需要在短语周围加上双引号,例如"fund report"。这些也应该是 URL 编码的(我认为它的值是%22)。

请记住,如果您使用词干提取,则搜索 "fund report" 会找到 "funds reports""funding reports" 等的结果。但也许这就是您想要的。

说到底,你的 URL 可能如下所示:

http://localhost:8983/solr/collection1/select?q=%22fund%20report%22&fl=id,filename,%5Bexplain%5D&wt=xml&indent=true

请注意,fl 参数列出的字段应以逗号分隔。我不确定您为什么在 explain 字段周围有方括号。

【讨论】:

  • 感谢您的回复。其实我想知道的是[1]为什么fund+report的输入不能被当作一个单词“fund+report”,(是solr admin demo bug吗?)[2]如何让solr对待它作为基金+报告,没有双引号?
  • 双引号是 Solr 搜索短语的方式。我不知道有任何 Solr 类型会在没有双引号包围的情况下查找短语 - 我不确定你是否也想要一个!
  • 您实际上是在搜索fund+report,即在文档本身中使用文字+ 登录吗?
  • 是的,输入是准确的fund+report,有+号,fund和+号之间没有空格,没有双引号。我想知道为什么 solr 无法理解我的输入?
  • 我认为在这种情况下您需要的是一种不会在 + 符号上标记的字段类型,在这种情况下 fund+report 将被视为一个单词。但是,您仍然会遇到如何在查询中传递 + 符号的问题,因为该字符对 Solr 具有特定含义(以及 HTTP,这就是为什么它必须进行 URL 编码的原因)。根据此页面,您可以使用反斜杠对其进行转义:cwiki.apache.org/confluence/display/solr/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
  • 2018-09-16
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多