gpt4 book ai didi

java - Elasticsearch 使用 index.refresh=-1 自动刷新索引?

转载 作者:搜寻专家 更新时间:2023-11-01 02:22:39 24 4
gpt4 key购买 nike

我正在使用 Elasticsearch 和 Java API。

我正在使用大量插入索引离线数据,所以我设置了 index.refresh=-1

我不会在任何地方“手动”刷新索引。

似乎刷新在某个时候完成的,因为查询确实会返回数据。唯一没有返回数据的情况是当我只用几个文档进行测试时,查询是在插入后立即完成的(使用相同的 Client 对象)。

我想知道索引刷新是否在某个阶段被 Elasticsearch 或 Java 库隐式调用,即使 index.refresh=-1 也是如此?

或者如何解释这种行为?

客户端生成:

Client client = TransportClient.builder().settings(settings)
.build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(address),port));

插入:

BulkRequestBuilder bulkRequest = client.prepareBulk();

for (MyObject object : list) {
bulkRequest.add(client.prepareIndex(index, type)
.setSource(XContentFactory.jsonBuilder()
.startObject()
// ... add object fields here ...
.endObject()
));
}

BulkResponse bulkResponse = bulkRequest.get();

查询:

   QueryBuilder query = ...;

SearchResponse resp = client.prepareSearch(index)
.setQuery(query)
.setSize(Integer.MAX_VALUE)
// adding fields here
.get();

SearchHit[] = resp.getHits().getHits();

最佳答案

尽管禁用了刷新间隔,但文档仍可搜索的原因可能是由于索引缓冲区填满导致创建 lucene 段,或者 translog 已满导致提交 lucene 段,这两者都使文档可搜索。

根据文档

By default, Elasticsearch uses memory heuristics in order to automatically trigger flush operations as required in order to clear memory.

索引缓冲区设置也可以按如下方式操作。

article是一本关于数据如何可搜索和持久的好书。

你也可以看看这个SO thread由一位 elasticsearch 贡献者撰写,了解 flush 与 refresh 之间的更多详细信息。

您可以使用 indices-stats验证所有这些,即验证是否有刷新或刷新

示例:

 GET <index_name>/_stats/refresh

GET <index_name>/_stats/flush

关于java - Elasticsearch 使用 index.refresh=-1 自动刷新索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35465922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com