Java Elasticsearch - 具有存在条件的 Boolquery

标签 java api elasticsearch post

我有以下代码,我需要在某些字段中获得非空结果,并检查其他字段中的值。 (我正在使用“RestHighLevelClient”)

但是我收到了这个错误:

Caused by: ElasticsearchStatusException[Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed]]

....

Suppressed: org.elasticsearch.client.ResponseException: method [POST], host [http://192.168.8.101:9200], URI [/_search?typed_keys=true&ignore_unavailable=false&expand_wildcards=open&allow_no_indices=true&scroll=1m&sear .....

{"error":{"root_cause":[{"type":"query_parsing_exception","reason":"[exists] query does not support [boost]

代码:

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQuery = new BoolQueryBuilder();
boolQuery.must(QueryBuilders.existsQuery("usuarioIntegracao"));
boolQuery.must(QueryBuilders.termsQuery("tabela", "Arquivo", "Mensagem"));
boolQuery.must(QueryBuilders.termQuery("statusTexto", "Erro"));
boolQuery.must(QueryBuilders.rangeQuery("dataEntrada")
                            .from("now-1d/d")
                            .timeZone("-03:00"));

searchSourceBuilder.query(boolQuery);
searchSourceBuilder.size(9999);
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

searchRequest.source(searchSourceBuilder);

SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);

我在 Postman 上成功搜索到相同的内容:

{
    "size" : 1000,

    "sort" : [
        {"dataEntrada" : {"order" : "desc"}}
    ],

    "query" : {
        "bool":{
          "must":[
            {"terms":{ "tabela" : ["Arquivo", "Mensagem"] }},

            {"term":{ "statusTexto" : "Erro" }},

            {"exists" : { "field" : "usuarioIntegracao" }},

            {"range" : {
                "dataEntrada" : {
                    "gte" : "now-1d/d",
                    "lt" :  "now/d",
                    "timeZone" : "-03:00"
                }
            }}
          ],
          "should":{},
          "must_not":{

          }
       }
    }
}

最佳答案

我认为你的问题是语法。 试试这个:

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
    .must(QueryBuilders.existsQuery("usuarioIntegracao"))
    .must(QueryBuilders.termsQuery("tabela", "Arquivo", "Mensagem"))
    .must(QueryBuilders.termQuery("statusTexto", "Erro"))
    .must(QueryBuilders.rangeQuery("dataEntrada").from("now-1d/d").timeZone("-03:00"));

searchSourceBuilder.query(boolQuery);

关于Java Elasticsearch - 具有存在条件的 Boolquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54785261/

相关文章:

java - Hibernate中高效更新实体

json - Scala:Option[Boolean] 有意义吗?

objective-c - Facebook SDK API IOS 发布到用户墙上时出错

node.js - 当对象中字段未定义或丢失时从elasticsearch获取数据

java - 关于分配 List.element 的错误

java - 如何使用 Eclipse Lyo 获取 IBM RTC 中的工作项?

mysql - 如何在我的 elasticsearch 查询中附加时间戳范围?

elasticsearch - 使用ElasticSearch将在字段中共享相同ID的多个文档分组

java - java中的静态方法

php - 我们如何使 PHP 中的多个 file_get_contents 运行得更快?