当前位置: 首页 > 知识库问答 >
问题:

使用django-haystack/solr过滤搜索结果会产生solr语法错误

章丰茂
2023-03-14

我想我可能在haystack/solr中发现了一个bug,但我不确定,我想先看看我是否做了一些完全错误的事情。我正在使用:

django 1.8 haystack 2.4.1 solr 4.10.4

当我尝试筛选SearchQuerySet时,SOLR抱怨从haystack生成的筛选查询语法无效。奇怪的是,在pdb中单步执行代码是可行的,但在正常情况下都会失败。守则的有关部分如下:

    # this is built from a query string but essentially resolves to something like
    applicable_filters = {'job_type__in':['PE', 'TE'], 'sector__in':['12','13']}

    # Do the query.
    sqs = SearchQuerySet().models(self._meta.queryset.model).filter(**applicable_filters).order_by(order).load_all().auto_query(request.GET.get('q', ''))
    if not sqs:
        sqs = EmptySearchQuerySet()

执行此查询时,SOLR抛出以下内容:

[vagrant@127.0.0.1:2222] out: Failed to query Solr using '(job_type:("PE" OR "TE") AND sector:("12" OR "13") AND )': [Reason: org.apache.solr.search.SyntaxError: Cannot parse '(job_type:("PE" OR "TE") AND sector:("12" OR "13") AND )': Encountered " ")" ") "" at line 1, column 55.

正如你所看到的,似乎干草堆(或者可能是烟火?)向SOLR查询添加了一个额外的AND子句,这似乎是完全错误的。真正奇怪的是,如果我在pdb中遍历相同的函数,它会工作。

我不知所措。。。。

共有1个答案

盛琪
2023-03-14

固定。

问题是我向最后一个auto_query()子句传递了一个空字符串。我从一个whoosh后端迁移过来,这似乎比SOLR更能容忍空搜索字符串。

 类似资料:
  • 我已经阅读了这两篇构建搜索应用程序的教程。 使用OpenJDK在Ubuntu上安装Solr和django-haystack,在这里 Django-干草堆-Solr-安装指南,这里 但是当我来到: 配置django-haystack,根据文档设置搜索索引类 http://docs.haystacksearch.org/dev/tutorial.html#configuration 将所需的solr字

  • 我正在遵循django文档将solr与Django-Oscar集成。我在尝试重建索引时遇到以下错误。我如何解决这个问题?

  • 当我尝试构建solr架构时,出现以下错误: 也许这些信息会很有用: MySite/settings.py文件: 博客/search_indexes.py文件: blog/templates/search/index/blog/post_text.txt文件: 我正在使用Apache Solr 4.10.4、Python 3.4.5和Django 1.11.5。当我试图导入干草堆在Python控制台

  • 所以我安装了pip-install-django-haystack或者我的项目virtualenv文件夹中的任何命令,我也安装了solr,但是现在我对该怎么做有些困惑。 我一直收到一个错误,说solr后端需要安装pysolr?我不知道我在哪里运行这个命令?“/manage.py build\u solr\u schema” 我一直试图参考《草垛指南》,但它有点模糊。请帮帮我!!谢谢

  • 本文向大家介绍solr范围搜索,包括了solr范围搜索的使用技巧和注意事项,需要的朋友参考一下 示例 age:[50 TO 60] 匹配年龄在50和60之间(包括50和60)的文档 age:{50 TO 60} 匹配年龄在50到60之间(不包括50到60)的文档 age:[* TO 60] 匹配年龄小于或等于60的文档 age:[50 TO *] 匹配年龄大于或等于50的文档 age:{50 to

  • 本文向大家介绍solr 布尔搜索,包括了solr 布尔搜索的使用技巧和注意事项,需要的朋友参考一下 示例 +firstname:john +surname:doe 匹配名字为john且姓氏为doe的文档。+前缀表示搜索词必须出现(AND)。 +firstname:john -surname:doe 匹配名字为john而名字不是doe的文档。-前缀表示不得出现搜索词(否)。 +firstname:j