0

クラウドでホストされているクラスターの 1 つにある ES インデックスをクエリする Java 高レベル REST クライアントを使用して、elasticsearch 検索機能を実装しています。私の意図したクエリ JSON DSL は次のようになります。

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

これに対応して、上記の DSL と同じ機能を実行する Java 高レベル REST クライアントを使用して実行するコードを作成しました。

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 コードを実装したと思うので、これは奇妙だと思います。

生成された JSON を Java 側から出力しようとすると、その出力は次のようになります。

{
    "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 コードに何か不足がありますか? または、これら 2 つのメソッドで返されるレコードの不一致の理由は何でしょうか?

前もって感謝します!

4

0 に答える 0