Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
ElasticSearch如何为QueryBuilder(Java API)设置特定索引_Java_Kotlin_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Curl_Query Builder - Fatal编程技术网 elasticsearch,curl,query-builder,Java,Kotlin,elasticsearch,Curl,Query Builder" /> elasticsearch,curl,query-builder,Java,Kotlin,elasticsearch,Curl,Query Builder" />

ElasticSearch如何为QueryBuilder(Java API)设置特定索引

ElasticSearch如何为QueryBuilder(Java API)设置特定索引,java,kotlin,elasticsearch,curl,query-builder,Java,Kotlin,elasticsearch,Curl,Query Builder,我正在尝试将elasticsearch的这个multipleGET操作转换为Java/Kotlin代码等价物 curl "localhost:9200/index1, index2/_search?pretty=true" -d '{ "query" : { "bool" : { "must" : [ {

我正在尝试将elasticsearch的这个multipleGET操作转换为Java/Kotlin代码等价物

curl "localhost:9200/index1, index2/_search?pretty=true" -d '{
    "query" : {
        "bool" : {
            "must" : [
                {
                    "indices" : {
                        "indices" : ["index1"],
                        "query" : {
                            SOMETHING1
                        }
                    }
                },
                {
                    "indices" : {
                        "indices" : ["index2"],
                        "query" : {
                            SOMETHING2
                        }
                    }
                }
            ]
        }
    }
}'
我的解决办法是

val searchRequest = SearchRequest("index1", "index2")
val searchSourceBuilder = SearchSourceBuilder()
val qb: BoolQueryBuilder = QueryBuilders.boolQuery()

val qbFirst: BoolQueryBuilder = QueryBuilders.boolQuery()
qbFirst.must().add(SOMETHING1)

val qbSecond: BoolQueryBuilder = QueryBuilders.boolQuery()
qbSecond.must().add(SOMETHING2)

qb.must().add(qbFirst)
qb.must().add(qbSecond)

searchSourceBuilder.query(qb)
searchRequest.source(searchSourceBuilder)
SOMETHING1和SOMETHING2代码块并不重要。
我的解决方案的问题是,我不能指定<代码> qbFase只考虑研究的索引1。不幸的是,它同时使用index1和index2(对于qbSecond也是如此)

有什么想法吗?

您需要做的是:

val qb: BoolQueryBuilder = QueryBuilders.boolQuery()
var q1: XXXBuilder = QueryBuilders.xxxQuery()
var q2: XXXBuilder = QueryBuilders.xxxQuery()

qb.must().add(QueryBuilders.indicesQuery(q1, "index1"))
qb.must().add(QueryBuilders.indicesQuery(q2, "index2"))
现在,由于已在ES 6中删除了
索引
查询,因此如果您升级,则需要在
\u index
字段中搜索,如下所示:

val qb: BoolQueryBuilder = QueryBuilders.boolQuery()

var q1: BoolQueryBuilder = QueryBuilders.boolQuery()
q1.must().add(QueryBuilders.termQuery("_index", "index1"))
q1.must().add(QueryBuilders.xxxQuery("SOMETHING1"))

var q2: BoolQueryBuilder = QueryBuilders.boolQuery()
q2.must().add(QueryBuilders.termQuery("_index", "index2"))
q2.must().add(QueryBuilders.xxxQuery("SOMETHING2"))

qb.must().add(q1)
qb.must().add(q2)

PS:还要注意的是,除非您有一个文档同时出现在两个索引中并且同时满足两个条件,否则您应该在顶级查询中使用
should
,而不是
must

完美答案!非常感谢,很高兴能帮上忙!(请注意,我没有Kotlin知识,因此您可能需要稍微修改一下语法)