Solr不接受带点的查询

时间:2016-10-20 15:11:49

标签: solr lucene plone

我目前一次又一次地遇到一个问题。我在Plone 4.2.6系统上使用Collective Solr 4.1.0搜索。目前,省略搜索时,只要搜索框中没有通配符,它​​就可以正常工作。所以举个例子 Prof Dr Mathew Rogers 工作得很好,并返回良好的结果,如一个人的教授。 Mathew Rogers博士'。

当我省略搜索时 Prof. Dr. Mathew Rogers Solr不会回复任何结果。

我检查了这个平台上有关此问题或接近问题的所有其他问题,但没有一个问题得到妥善解答。当我搜索包含例如点的内容时,你们是否知道为什么Solr查询过程会中断?非常感谢帮助!

1 个答案:

答案 0 :(得分:2)

collective.solr有一个很棒的功能,您可以使用plone搜索中的lucene查询语法查询solr。

查询解析器语法:   - > https://lucene.apache.org/core/2_9_4/queryparsersyntax.html

集体solr有一个简单的测试,如果它应该使用collective.solr中的设置破坏你的搜索查询,或者如果它将它作为简单的lucene查询传递给solr。

The test is really simple, but the mangle code is hart to understand (at least for me):

simpleTerm = compile(r'^[\w\d]+$', UNICODE)

...

simpleCharacters = compile(r'^[\w\d\?\*\s]+$', UNICODE)

如果您的术语不匹配,则collective.solr假设您尝试使用简单的lucene语法进行查询,因此在您的情况下不会显示任何结果。

几个星期前我遇到了同样的问题,你有以下几个选择:

  1. 只需添加一个点 - 所以collective.solr识别带点的搜索词而不是lucene查询。
  2. 在将搜索字词传递给collective.solr之前准备好搜索字词。
  3. 第一个选项只是一个快速获胜,因为会有人,他会用逗号,分号,引号等搜索一个术语。

    在将搜索字词传递给搜索之前,我亲自定制了搜索字词。

    Afaik solr tokenizer也删除了几个不是字母数字的字符

    This SO answer explains how the default tokenizer works

      

    在标点字符处拆分单词,删除标点符号。但是,没有空格的点被视为令牌的一部分。除非在令牌中有数字,否则用连字符拆分单词。在这种情况下,整个令牌被解释为产品编号,不会被拆分。将电子邮件地址和Internet主机名识别为一个令牌。

    因此,您需要如何处理非字母数字术语: - )

    如果您不想使用lucene查询语法,那么最好的解决方案就是准备类似于tokenizer的术语。