我有以下内容:
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?
答案 0 :(得分:0)
尚未对其进行测试,但未记录,但请尝试将其添加到设置构建器中:
.put('index._ttl.index', 'not_analyzed')
您可能还需要考虑将index._ttl.store
设置为true
,具体取决于您的查询方式。
但是,明确地对该字段进行索引似乎有点多余。即使您没有直接访问它,它也可能已在某处编入索引。