与在kibana上执行查询dsl相比,来自javarest高级客户机的elasticsearch查询返回不同的/不需要的结果

gywdnpxw  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(0)|浏览(253)

我正在使用java高级rest客户机实现elasticsearch特性,它查询驻留在云中的一个集群上的es索引。我想要的查询json dsl如下所示,

{
  "query" :{
      "bool": {
        "should" :[
          {
            "query_string":{
              "query":"cla-180",
              "default_field": "product_title",
              "boost" : 3
            }
          },
          {
            "match" : {
              "product_title" : {
                "query" : "cla-180",
                 "fuzziness" : "AUTO"
              }
            }
          }
        ]
    }
  }
}

与此对应,我编写了使用java高级rest客户机执行的代码,它执行与上述dsl相同的功能。

BoolQueryBuilder boolQueryBuilder = buildBoolQuery();
boolQueryBuilder.should(QueryBuilders.queryStringQuery("cla-180").defaultField("product_title")).boost(3);
boolQueryBuilder.should(QueryBuilders.matchQuery("product_title", "cla-180").fuzziness(Fuzziness.AUTO));

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(boolQueryBuilder);

我注意到java方法的搜索结果与我直接在kibana上执行dsl时的结果不同。当从java执行时,我发现与上面给出的搜索内容没有关系的记录。我认为这很奇怪,因为我想我已经实现了与上面给出的json查询dsl相匹配的java代码。
当我试图从java端打印生成的json时,其输出如下所示,

{
    "query": {
    "bool" : {
    "should" : [
      {
        "query_string" : {
          "query" : "cla-180",
          "default_field" : "product_title",
          "fields" : [ ],
          "type" : "best_fields",
          "default_operator" : "or",
          "max_determinized_states" : 10000,
          "enable_position_increments" : true,
          "fuzziness" : "AUTO",
          "fuzzy_prefix_length" : 0,
          "fuzzy_max_expansions" : 50,
          "phrase_slop" : 0,
          "escape" : false,
          "auto_generate_synonyms_phrase_query" : true,
          "fuzzy_transpositions" : true,
          "boost" : 1.0
        }
      },
      {
        "match" : {
          "product_title" : {
            "query" : "cla-180",
            "operator" : "OR",
            "fuzziness" : "AUTO",
            "prefix_length" : 0,
            "max_expansions" : 50,
            "fuzzy_transpositions" : true,
            "lenient" : false,
            "zero_terms_query" : "NONE",
            "auto_generate_synonyms_phrase_query" : true,
            "boost" : 1.0
          }
        }
      }
    ],
    "adjust_pure_negative" : true,
    "minimum_should_match" : "1",
    "boost" : 3.0
  }
    }
}

我的java代码中是否遗漏了一些东西,导致搜索结果以不希望的方式返回?或者这两个方法中返回的记录不匹配的原因是什么?
提前谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题