【问题标题】:Really huge query or optimizing an elasticsearch update真正巨大的查询或优化弹性搜索更新
【发布时间】:2019-08-07 14:07:13
【问题描述】:

我正在为大量文档(大约 150 000 个)进行二进制分类的文档可视化工作。挑战在于如何向最终用户呈现一般视觉信息,以便他们对每个类别(正面/负面)的主要“概念”有所了解。由于每个文档都有一组相关的主题,我考虑通过聚合来询问 Elasticsearch 对正面分类文档的前 20 个主题,然后对负面文档进行同样的处理。

我创建了一个 python 脚本,从 Elastic 下载数据并对文档进行分类,但问题是数据集上的预测没有在 Elasticsearch 上注册,所以我不能要求某个类别的前 20 个主题.首先,我考虑在弹性中创建一个查询来请求聚合并传递一个匹配项

由于我有正面/负面文档的 id,我可以编写一个查询来检索主题的聚合,但是在查询中我应该提供大量的文档 IDS 来指示,例如,只有正面文档.这是不可能的,因为端点有限制,我不能传递 50 000 个 ID,例如:

"query": {
    "bool": {
      "should": [
           {"match": {"id_str": "939490553510748161"}},
           {"match": {"id_str": "939496983510742348"}}
           ...
        ],
      "minimum_should_match" : 1
    }
},
"aggs" : { ... }

所以我尝试在Elastic索引中注册分类的预测类别,但是由于文档量非常庞大,大约需要半小时(相比之下运行分类不到一分钟)......仅用于存储预测就需要很多时间……然后我还需要查询索引以获取用于可视化的正确数据。要更新文档,我使用的是:

for id in docs_ids:
    es.update(
        index=kwargs["index"],
        doc_type=kwargs["doc_type"],
        id=id,
        body={"doc": {
            "prediction": kwargs["category"]
        }}
    )

您知道更快更新预测的替代方法吗?

【问题讨论】:

标签: elasticsearch elasticsearch-py


【解决方案1】:

您可以使用bulk query,它允许您序列化您的请求并仅针对执行大量搜索的elasticsearch 查询一次。 试试:

from elasticsearch import helpers

query_list = []
list_ids = ["1","2","3"]
es = ElasticSearch("myurl")
for id in list_ids:
    query_dict ={
    '_op_type': 'update',
    '_index': kwargs["index"],
    '_type': kwargs["doc_type"],
    '_id': id,
    'doc': {"prediction": kwargs["category"]}
    }
    query_list.append(query_dict)

helpers.bulk(client=es,actions=query_list)

请阅读here 关于查询列表 id,为了获得更快的响应,您不应该像在问题中所做的那样带上 match_string 值,而是带上 _id 字段。这允许您使用multiget query,这是一个用于获取操作的批量查询。 Here 在 python 库中。试试:

my_ids_list = [<some_ids_here>]
es.mget(index = kwargs["index"],
                doc_type = kwargs["index"],
                body = {'ids': my_ids_list})

【讨论】:

  • 非常感谢,py 库的代码真的很有帮助:)
  • 很高兴为您提供帮助 :-) 您能接受答案吗?
  • 很奇怪,我在回复之前就做了。我现在又做了一次
猜你喜欢
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 2014-11-09
相关资源
最近更新 更多