ral*_*aul 7 java database elasticsearch
我想知道是否有一种方法可以指定我不介意的弹性搜索或我的搜索查询中的错误索引.换句话说,我有一个查询,它试图查询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));
Run Code Online (Sandbox Code Playgroud)
作为示例查询,您可以找到上面的查询.
看一下ignore_unavailable选项,它是多索引语法的一部分.至少从版本1.3开始就可以使用它,并允许您在执行搜索时忽略丢失或关闭的索引(以及其他多索引操作).
它在Java API中公开IndicesOptions.浏览源代码,我发现setIndicesOptions()示例中使用的SearchRequestBuilder 有一个方法.你需要传递一个实例IndicesOptions.
IndicesOptions类上有各种静态工厂方法,用于使用您特定的所需选项构建实例.您可能会受益于使用更方便的lenientExpandOpen()工厂方法(或不推荐的版本,lenient()具体取决于您的版本)设置ignore_unavailable = true,allow_no_indices = true和expand_wildcards = open.
以下是示例查询的修改版本,它应该提供您要查找的行为:
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());
Run Code Online (Sandbox Code Playgroud)
您是否尝试过使用索引别名?
您可以指定单个索引值,而不是引用各个别名。这背后可以有几个索引。
在这里,我向别名添加两个索引并删除丢失/损坏的索引:
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" } }
]
}'
Run Code Online (Sandbox Code Playgroud)