Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr不接受带点的查询_Solr_Lucene_Plone - Fatal编程技术网

Solr不接受带点的查询

Solr不接受带点的查询,solr,lucene,plone,Solr,Lucene,Plone,我现在一次又一次地遇到一个问题。我在Plone 4.2.6系统上使用集体Solr 4.1.0搜索。目前,当省略搜索时,只要搜索框中没有通配符,它就可以正常工作。比如说 马修·罗杰斯教授 工作正常,结果良好,如“马修·罗杰斯教授” 当我省略搜索时 马修·罗杰斯教授 Solr不会返回任何结果 我检查了这个平台上关于这个或关闭问题的所有其他问题,但没有一个得到正确回答。你们有没有人知道为什么当我搜索包含点的东西时,Solr查询过程会中断?非常感谢您的帮助 collective.solr有一个很

我现在一次又一次地遇到一个问题。我在Plone 4.2.6系统上使用集体Solr 4.1.0搜索。目前,当省略搜索时,只要搜索框中没有通配符,它就可以正常工作。比如说

马修·罗杰斯教授
工作正常,结果良好,如“马修·罗杰斯教授”

当我省略搜索时

马修·罗杰斯教授
Solr不会返回任何结果


我检查了这个平台上关于这个或关闭问题的所有其他问题,但没有一个得到正确回答。你们有没有人知道为什么当我搜索包含点的东西时,Solr查询过程会中断?非常感谢您的帮助

collective.solr有一个很好的特性,您可以使用plone搜索中的lucene查询语法查询solr

查询解析器语法: -->

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

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

几周前,我面临同样的问题,您有以下选择:

  • 只需添加一个点-so collective.solr即可识别带有点的搜索词,而不是lucene查询
  • 在将搜索词传递给collective.solr之前,请准备好它
  • 第一个选项很快就会成功,因为会有人搜索带有逗号、分号、引号等的术语

    在将搜索词传递给搜索之前,我个人定制了搜索词

    Afaik solr标记器还删除了几个非字母数字字符

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

    因此,如何处理非字母数字术语取决于您:-)


    如果您永远不想使用lucene查询语法,最好的解决方案是准备类似于标记器的术语

    谢谢你的回答!我刚刚意识到,对于一个字段,我使用了错误的
    field\u type
    ,它没有标记器。我修正了这个问题,仍然没有回答。然而,在另一台所有字段都标记化的服务器上,它可以工作。这是因为索引值也必须标记化吗?我还没有在我的新服务器上重新编制索引。但是我认为只修改schema.xml是可行的,因为我只关心查询。您需要提前准备提交给solr的查询,就像在
    SearchViewlet
    中一样。由于solr不显式搜索
    ,因此可以在查询solr之前删除它。在您的情况下,正则表达式或简单的replace可以完成这项工作。
    simpleTerm = compile(r'^[\w\d]+$', UNICODE)
    
    ...
    
    simpleCharacters = compile(r'^[\w\d\?\*\s]+$', UNICODE)