在Solr通配符查询中转义冒号字符

时间:2013-08-14 20:37:41

标签: solr lucene

我正在尝试查询一个名为body的text_general字段,例如9:15,9:15 pm,9:15p等等。我通过REST API尝试了以下两个查询但没有成功:

  • q=body:9\:15*没有给我打击,缺少提及9:15
  • 的文档
  • q=body:"9:15"*向我提供了所有文档,包括没有类似9:15的文档

在Chrome中调试,我直接在浏览器中输入这些内容。我还在值上尝试了encodeURIComponent,以确保HTTP转换中的内容不会丢失。同样的结果。

我猜这里有一个简单的答案,我对Solr查询工作方式的心理模型只是破碎了。

2 个答案:

答案 0 :(得分:1)

在这种情况下,我经常做两件事:

  1. 打开Solr查询调试,所以我可以看到它真正进入查询。您将在响应结束时看到额外的节点。

    &debug=query
    
  2. 使用分析工具检查现场分析器。 (url基于Solr的示例核心)

    http://localhost:8983/solr/#/collection1/analysis?analysis.fieldvalue=9%3A30pm&analysis.query=9%3A30&analysis.fieldtype=text_general&verbose_output=0
    
  3. 这两种方法都应该准确地告诉您查询出了什么问题。在第二个中,您可以检查匹配工作的方式,而无需重新编制索引。

答案 1 :(得分:1)

您的时间字符串在Unicode standard annex UAX#29之后被标记化。 所以应该剥去结肠。 我想如果你检查一下,你会发现你的结果应该包含9或15。