如何查询elasticsearch条目的TTL?

时间:2014-01-29 01:11:33

标签: elasticsearch

我有以下内容:

final settings = (ImmutableSettings.settingsBuilder()
        .put('index._ttl.enabled', true)
        .put('index.gateway.type', 'none')
        .put('index.number_of_shards', 1)
        .put('index.number_of_replicas', 0)
        .put('index.store.type', 'memory')
        .put('node.http.enabled', false)
        .build())
node = (org.elasticsearch.node.NodeBuilder.nodeBuilder()
        .clusterName(clusterName)
        .local(true)
        .settings(settings)
        .node())
final Client client = node.client()

client.prepareIndex('index', 'type')
        .setSource(jsonBuilder()
                .startObject()
                .field('_ttl', '111111')
                .field('field', 'value')
                .endObject())
        .setRefresh(true)
        .execute()
        .actionGet()

以下内容:

SearchResponse searchResponse = client.prepareSearch('builds')
        .setQuery(boolQuery()
                .must(termQuery('_type', 'test')))
        .execute()
        .actionGet()

searchResponse.internalResponse.hits.hits[0].source返回为:

[0] = {java.util.HashMap$Entry@7024}"_ttl" -> "111111"
[1] = {java.util.HashMap$Entry@7027}"field" -> "value"

但以下内容会返回0L

client.prepareCount('index')
        .setQuery(boolQuery()
                .must(fieldQuery('_ttl', '111111'))
                .must(termQuery('_type', 'type'))
                .must(fieldQuery('field', 'value')))
        .execute()
        .actionGet()
        .count

如何确保设置TTL?

1 个答案:

答案 0 :(得分:0)

尚未对其进行测试,但未记录,但请尝试将其添加到设置构建器中:

.put('index._ttl.index', 'not_analyzed')

您可能还需要考虑将index._ttl.store设置为true,具体取决于您的查询方式。

但是,明确地对该字段进行索引似乎有点多余。即使您没有直接访问它,它也可能已在某处编入索引。