用django-haystack/solr过滤搜索结果产生solr语法错误
Filtering search results with django-haystack / solr produces solr syntax error
我想我可能已经确定了 haystack / solr 中的错误,但我不确定并且想先看看我是否做错了什么。我正在使用:
django 1.8
干草堆 2.4.1
解决方案 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.
如您所见,haystack(或者可能是 pysolr?)似乎正在向 SOLR 查询添加一个额外的 AND 子句,这似乎是完全错误的。真正奇怪的是,如果我在 pdb 中单步执行相同的函数,它就可以工作。
我很茫然....
已修复。
问题是我将一个空字符串传递给最后的 auto_query() 子句。我已经从 whoosh 后端迁移过来,它似乎比 SOLR 更能容忍空搜索字符串。
我想我可能已经确定了 haystack / solr 中的错误,但我不确定并且想先看看我是否做错了什么。我正在使用:
django 1.8 干草堆 2.4.1 解决方案 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.
如您所见,haystack(或者可能是 pysolr?)似乎正在向 SOLR 查询添加一个额外的 AND 子句,这似乎是完全错误的。真正奇怪的是,如果我在 pdb 中单步执行相同的函数,它就可以工作。
我很茫然....
已修复。
问题是我将一个空字符串传递给最后的 auto_query() 子句。我已经从 whoosh 后端迁移过来,它似乎比 SOLR 更能容忍空搜索字符串。