Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹性搜索处理缺失索引_Java_Database_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Java,Database,elasticsearch" /> elasticsearch,Java,Database,elasticsearch" />

Java 弹性搜索处理缺失索引

Java 弹性搜索处理缺失索引,java,database,elasticsearch,Java,Database,elasticsearch,我想知道是否有一种方法可以指定弹性搜索,我不介意搜索查询中的索引丢失或错误。换句话说,我有一个查询,它试图查询7个不同的索引,但根据具体情况,其中一个可能会丢失。我想知道的是,如果有什么办法可以说的话,那就忘掉那个坏掉的,给我其他6个指数的结果吧 SearchRequestBuilder builder = elasticsearchClient.getClient().prepareSearch(indices) .setQuery(Query.buildQue

我想知道是否有一种方法可以指定弹性搜索,我不介意搜索查询中的索引丢失或错误。换句话说,我有一个查询,它试图查询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));
作为一个示例查询,您可以找到上面的一个。

您是否尝试过使用

您可以指定单个索引值,而不是引用单个别名。在这后面可以有几个索引

在这里,我将向别名添加两个索引,并删除丢失/损坏的索引:

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" } }
   ]
}'

查看忽略不可用的选项,它是。这至少从1.3版开始提供,允许您在执行搜索(以及其他多索引操作)时忽略缺失或关闭的索引

它通过
指示选项
在Java API中公开。浏览源代码时,我发现示例中使用的SearchRequestBuilder上有一个
setIndicateSoptions()
方法。您需要将
指示选项的实例传递给它

IndicateSoptions类上有各种静态工厂方法,用于使用特定的所需选项构建实例。您可能会受益于使用更方便的
lenientExpandOpen()
factory方法(或不推荐使用的版本,
lenient()
,具体取决于您的版本),该方法设置ignore\u unavailable=true、allow\u no\u index=true和expand\u 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());

对不起,奥利,我不能完全理解你的意思。我可能会使用一个别名来组合对7个不同索引的查询,但我已经能够做到这一点。我想做的是,如果其中一个索引失败,就可以忽略它。索引不会无缘无故失败,你必须做些什么来破坏它(例如,它包含旧数据)。在这种情况下,您将识别并从别名中删除失败的索引。基本上没有任何错误/崩溃/不当行为,我的索引可能无法创建。那么,您是要我创建一个别名,并检查别名中各个索引的状态以删除它们还是不删除它们?如果未创建索引,您将从ES返回一条错误消息。如果收到错误消息,则不要将索引添加到别名。我正在努力找出问题所在。如果你的索引随机消失,你会有更大的问题。这是一个可能的解决方案,但并不完全是我想要的。我想在JavaAPI中寻找更多的内部方法来直接丢弃失败的索引。