【问题标题】:Solr Query not parsing forward slashSolr Query 不解析正斜杠
【发布时间】:2011-11-05 19:21:34
【问题描述】:

正斜杠“/”是 solr 字段名称中的保留字符吗?

我在编写将解析包含正斜杠“/”的字段的 solr 排序查询时遇到问题

对我的 solr 服务器进行 http 查询时:

q=*&sort=normal+desc

会工作,但是

q=*&sort=with/slash+desc
q=*&sort=with%2Fslash+desc

两者都失败说“不能在多值字段上使用 FieldCache:with”

每个 solr 文档包含两个 int 字段“normal”和“with/slash”。使用我的 solr 架构索引字段

...
<field name="normal" type="int"   indexed="true" stored="true" required="false" />
<field name="with/slash" type="int"   indexed="true" stored="true" required="false" />
...

我需要用什么特殊的方式在 solr 中编码正斜杠吗?或者我可以使用任何其他分隔符吗?我已经在使用“-”和“。”用于其他目的。

【问题讨论】:

  • 转义字符请查看stackoverflow.com/questions/1133573/solr-sanitizing-query 转义Solr 字符并滚动到wiki.apache.org/solr/SolrQuerySyntax 底部了解如何编写URL。希望这会有所帮助
  • 感谢您的链接,但是“/”字符不在可疑的 solr 字符列表中,而且我的 URL 编码没有问题。仅供参考,我决定通过在我的字段名称中将 / 替换为 _ 来解决此问题。
  • 噢!我刚刚遇到了同样的问题。 / 也不在我检查特殊字符的列表中。我已经尝试过编码、引号等。我也没有运气 =(
  • 你是否使用了一个标记器,它将索引拆分为 / 尝试使用 schema.xml 中的 solr.StrField
  • 问题似乎是当找到正斜杠时,Solr 将您的字符串视为正则表达式:stackoverflow.com/questions/17798300/…;正如@tw123 建议的那样,用斜线转义应该可以解决您的问题。

标签: lucene solr


【解决方案1】:

在我的情况下,我需要使用通配符 * 搜索正斜杠 /,例如:

+(*/*)
+(*2016/17*)

我试图像这样逃避它:

+(*2016\/*)
+(*2016\/17*)

但这也没有用。

解决方案是用双引号 " 将文本括起来,就像这样做:

+("*\/*")
+("*/*")

+("*2016\/17*")
+("*2016/17*")

无论是否转义正斜杠,都返回相同的结果

【讨论】:

    【解决方案2】:

    来自https://wiki.apache.org/solr/SolrQuerySyntax 的 solr 维基:

    Solr 4.0 增加了正则表达式支持,这意味着 '/' 现在是 一个特殊字符,在搜索文字时必须转义 正斜杠。

    【讨论】:

    • 很好,感谢您提供的信息。在 4.0 之前,需要转义的字符是 + - &amp;&amp; || ! ( ) { } [ ] ^ " ~ * ? : \。正斜杠不是其中之一。不过现在是。
    【解决方案3】:

    我刚遇到同样的问题,经过一些实验发现如果字段名称中有正斜杠,则必须在 Solr 查询中使用反斜杠转义它(但请注意您不必在字段列表参数中执行此操作,因此在“q”字段中输入查找包含 my_value 的 /my/field/name 的搜索:

    \/my\/field\/name:my_value

    我还没有尝试过排序字段,但试试这个并告诉我们:)

    这是 Solr 4.0.0 alpha 版。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 2016-05-08
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多