python - TransportError 400 Elasticsearch 包含大量术语

标签 python django elasticsearch django-haystack

使用小术语列表进行搜索可以得到我想要的内容

In [29]: small_list
Out[29]: [8096, 8105, 8114, 8116, 8128, 8130]

In [30]: sqs.filter(id__in=small_list)
Out[30]: [<SearchResult: web.listing (pk=u'8128')>, <SearchResult: web.listing (pk=u'8130')>, <SearchResult: web.listing (pk=u'8116')>, <SearchResult: web.listing (pk=u'8105')>, <SearchResult: web.listing (pk=u'8114')>, <SearchResult: web.listing (pk=u'8096')>]

但是有数千个术语给出以下错误:

In [32]: len(big_list)
Out[32]: 6305
In [33]: sqs.filter(id__in=big_list)
Traceback (most recent call last):
  File "/home/ravi/bit/wonder/env/local/lib/python2.7/site-packages/haystack/backends/elasticsearch_backend.py", line 516, in search
    _source=True)
  File "/home/ravi/bit/wonder/env/local/lib/python2.7/site-packages/elasticsearch/client/utils.py", line 69, in _wrapped
    return func(*args, params=params, **kwargs)
  File "/home/ravi/bit/wonder/env/local/lib/python2.7/site-packages/elasticsearch/client/__init__.py", line 530, in search
    doc_type, '_search'), params=params, body=body)
  File "/home/ravi/bit/wonder/env/local/lib/python2.7/site-packages/elasticsearch/transport.py", line 307, in perform_request
    status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout)
  File "/home/ravi/bit/wonder/env/local/lib/python2.7/site-packages/elasticsearch/connection/http_urllib3.py", line 93, in perform_request
    self._raise_error(response.status, raw_data)
  File "/home/ravi/bit/wonder/env/local/lib/python2.7/site-packages/elasticsearch/connection/base.py", line 105, in _raise_error
    raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info)
RequestError: TransportError(400, u'search_phase_execution_exception')

Django==1.8

django-haystack==2.4.1

elasticsearch==2.1.0

最佳答案

默认情况下,elasticsearch 的查询条件限制为 1024 个。

以下查询适合您

sqs.filter(id__in=big_list[:1024])

更多信息https://groups.google.com/forum/#!topic/elasticsearch/LqywKHKWbeI

关于python - TransportError 400 Elasticsearch 包含大量术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38060945/

相关文章:

python - multiprocessing.Manager().dict().setdefault() 坏了吗?

python - 如何自动确定用户输入的类型?

python - 自定义 django 小部件 - decompress() arg 未填充

mongodb - MongoDB + ElasticSearch数据模型

elasticsearch - Elasticsearch 2.3放置映射(尝试覆盖日期字段类型)错误

elasticsearch - Lucene:按文档 ID 过滤查询

python - 如何通过 Python 脚本对 Azure 应用服务的用户进行身份验证?

python - 使用 df1 中的值从 df2 中检索值,其中 df2 列和索引包含一系列值

python - Jinja2 转储到一个对象中?

django - 为什么 Django 将我所有模型的 pk 设置为 '90' ?