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

标签 java elasticsearch

我正在使用 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/

相关文章:

java - 通过拦截键盘来编写Android键盘记录器?

java - 在liferay processAction方法中转发到JSp文件

elasticsearch - elasticsearch ID 必须对类型或索引是唯一的吗?

Python Elasticsearch,RequestError : TransportError(400, u'search_phase_execution_exception') 间歇性发生。为什么?

elasticsearch - 将MatchQuery的模糊性设置为“自动”

java - JPQL 中带有 IN 运算符的枚举列表

java - Java父类(super class)构造函数的编译错误

java - 如何使用 Java 在 CKFinder 2.2 中更改文件上传 URL

elasticsearch - 在 Elasticsearch 中将带有数字和字符的字符串插入整数类型

python - Elasticsearch中极限的奇怪行为