我目前一次又一次地遇到一个问题。我在Plone 4.2.6系统上使用Collective Solr 4.1.0搜索。目前,省略搜索时,只要搜索框中没有通配符,它就可以正常工作。所以举个例子
Prof Dr Mathew Rogers
工作得很好,并返回良好的结果,如一个人的教授。 Mathew Rogers博士'。
当我省略搜索时
Prof. Dr. Mathew Rogers
Solr不会回复任何结果。
我检查了这个平台上有关此问题或接近问题的所有其他问题,但没有一个问题得到妥善解答。当我搜索包含例如点的内容时,你们是否知道为什么Solr查询过程会中断?非常感谢帮助!
答案 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语法进行查询,因此在您的情况下不会显示任何结果。
几个星期前我遇到了同样的问题,你有以下几个选择:
第一个选项只是一个快速获胜,因为会有人,他会用逗号,分号,引号等搜索一个术语。
在将搜索字词传递给搜索之前,我亲自定制了搜索字词。
Afaik solr tokenizer也删除了几个不是字母数字的字符
This SO answer explains how the default tokenizer works
在标点字符处拆分单词,删除标点符号。但是,没有空格的点被视为令牌的一部分。除非在令牌中有数字,否则用连字符拆分单词。在这种情况下,整个令牌被解释为产品编号,不会被拆分。将电子邮件地址和Internet主机名识别为一个令牌。
因此,您需要如何处理非字母数字术语: - )
如果您不想使用lucene查询语法,那么最好的解决方案就是准备类似于tokenizer的术语。