【问题标题】:How can I tell when documents have been indexed?我如何知道文档何时被索引?
【发布时间】:2021-05-04 21:53:43
【问题描述】:

在我昨天问过的this question 之后,这表明 W10 中的 Elasticsearch-as-a-service 在服务启动后需要一定的有限时间来允许请求,即使在Elasticsearch 之后几秒钟也是如此对象实际上已在 Python 脚本中传递,我现在发现,如果我将文档添加到索引并立即查询索引,我不会得到任何结果(但如果我等待几秒钟,我会得到预期的结果)。

当我学习时,我正在阅读一本关于 ES 的书,其中有一些关于每秒只发生一次索引更新的内容(这本书涵盖了 ES 1.7,我正在使用 7.10)。

问题是,在添加文档之后,我可以运行一些命令(Python elasticsearch 模块或可能是 REST URL...),这些命令要么在新文档被索引之前不会返回,要么以某种方式指示如何许多文档现在都在索引中,在被索引之后?

注意我正在使用这种命令来索引:

es_obj.index( index='my_index', body=record_as_json_string )

【问题讨论】:

    标签: python elasticsearch indexing latency


    【解决方案1】:

    回答

    是的,您可以通过多种方式使用刷新 API 来实现它。

    例如,下面会立即插入并刷新。

    curl -X PUT "localhost:9200/test/_doc/1?refresh&pretty" -H 'Content-Type: application/json' -d'
    {"test": "test"}
    '
    curl -X PUT "localhost:9200/test/_doc/2?refresh=true&pretty" -H 'Content-Type: application/json' -d'
    {"test": "test"}
    '
    

    来自文档:

    操作发生后立即刷新相关的主分片和副本分片(不是整个索引),以便更新后的文档立即出现在搜索结果中。只有在仔细考虑并验证它不会导致性能下降(无论是从索引还是搜索的角度来看)之后,才能执行此操作。

    来源:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-refresh.html

    你应该这样做吗?

    默认设置保持这种方式以提供更好的性能。由于 ES 主要用于存储大型数据集,并且刷新是一项成本较高的操作,因此每次插入后刷新可能会导致您遇到无法预料的延迟和性能问题。 上面提到的source 强调了何时使用什么。请参阅this 以获得有关性能调整的更好解释。

    【讨论】:

    • 谢谢。是的,我肯定不会在每个index 操作之后都这样做。我已经发现使用该命令索引 40,000 条记录需要很长时间(与我之前在 Java 中直接使用 Lucene 索引相比),并且正在研究批量索引的事情。
    猜你喜欢
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 2015-05-11
    • 2021-04-10
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    相关资源
    最近更新 更多