Solr不接受带点的查询

我现在一遍又一遍地遇到一个问题.我在Plone 4.2.6系统上使用Collective Solr 4.1.0搜索.目前,省略搜索时,只要搜索框中没有通配符,它​​就可以正常工作.所以举个例子

Mathew Rogers教授

工作得很好,并返回良好的结果,如一个人的教授. Mathew Rogers博士.

当我省略搜索时

Mathew Rogers教授

Solr不会返回任何结果.

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

最佳答案 collective.solr有一个很棒的功能,你可以使用plone搜索中的lucene查询语法查询solr.

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

如果它应该使用collective.solr中的设置来破坏你的搜索查询,或者如果它将它作为简单的lucene查询传递给solr,那么集体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语法进行查询,因此它将在你的情况下没有显示结果.

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

>只需添加一个点 – 所以collective.solr识别带有点的搜索项而不是lucene查询.
>在将搜索词传递给collective.solr之前准备它.

第一个选项只是一个快速获胜,因为会有人,他会用逗号,分号,引号等搜索一个术语.

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

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

This SO answer explains how the default tokenizer works

Splits words at punctuation characters, removing punctuations. However, a dot that’s not followed by whitespace is considered part of a token. Splits words at hyphens, unless there’s a number in the token. In that case, the whole token is interpreted as a product number and is not split. Recognizes email addresses and Internet hostnames as one token.

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

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

点赞