[英]Elastic search handling missing indices
我想知道是否有一种方法可以指定我不介意的弹性搜索或我的搜索查询中的错误索引。 换句话说,我有一个查询,它试图查询7个不同的索引,但其中一个可能会丢失,具体取决于具体情况。 我想知道的是,如果有办法说,忘记破碎的那个并得到其他6个指数的结果?
SearchRequestBuilder builder = elasticsearchClient.getClient().prepareSearch(indices)
.setQuery(Query.buildQueryFrom(term1, term2))
.addAggregation(AggregationBuilders.terms('term')
.field('field')
.shardSize(shardSize)
.size(size)
.minDocCount(minCount));
作为示例查询,您可以找到上面的查询。
看一下ignore_unavailable选项,它是多索引语法的一部分 。 至少从版本1.3开始就可以使用它,并允许您在执行搜索时忽略丢失或关闭的索引(以及其他多索引操作)。
它由IndicesOptions
在Java API中IndicesOptions
。 浏览源代码,我发现在示例中使用的SearchRequestBuilder上有一个setIndicesOptions()
方法。 您需要传递一个IndicesOptions
实例。
IndicesOptions类上有各种静态工厂方法,用于使用您特定的所需选项构建实例。 你可能会使用更方便受益lenientExpandOpen()
工厂方法(或已经过时的版本, lenient()
这取决于您的版本),其中规定ignore_unavailable = TRUE,allow_no_indices = true,并且expand_wildcards =开放 。
以下是示例查询的修改版本,它应该提供您要查找的行为:
SearchRequestBuilder builder = elasticsearchClient.getClient().prepareSearch(indices)
.setQuery(Query.buildQueryFrom(term1, term2))
.addAggregation(AggregationBuilders.terms('term')
.field('field')
.shardSize(shardSize)
.size(size)
.minDocCount(minCount))
.setIndicesOptions(IndicesOptions.lenientExpandOpen());
您是否尝试过使用索引别名 ?
您可以指定单个索引值,而不是引用单个别名。 在这背后可以是几个索引。
在这里,我将向别名添加两个索引并删除丢失/损坏的索引:
curl -XPOST 'http://localhost:9200/_aliases' -d '
{
"actions" : [
{ "remove" : { "index" : "bad-index", "alias" : "alias-index" } },
{ "add" : { "index" : "good-index1", "alias" : "alias-index" } },
{ "add" : { "index" : "good-index2", "alias" : "alias-index" } }
]
}'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.