0

ハードコードされたクエリと API によって生成されたクエリの違いを知りたいですか? エラスティック検索 API を使用してクエリを作成しています。私が期待している結果のクエリは、以下の形式です。

{
  "query": {
    "bool": {
      "must": [
    {"match": {
      "model": "IBC"
      }
    },{"match": {
      "company.name": "Samsung"
      }
    }
      ]
    }
  }
}

しかし、ElasticSearch クエリ ビルダー API を使用して取得した出力は、次の形式です。これらの両方のクエリで得られた結果は、小さなデータセットではまったく同じであることがわかりました。大規模なデータセットでどのように動作するかはわかりません。

{
  "size": 100,
  "query": {
    "bool": {
      "must": [
    {
      "match": {
        "company.name": {
          "query": "Samsung",
          "operator": "OR",
          "prefix_length": 0,
          "max_expansions": 50,
          "fuzzy_transpositions": true,
          "lenient": false,
          "zero_terms_query": "NONE",
          "auto_generate_synonyms_phrase_query": true,
          "boost": 1.0
        }
      }
    },
    {
      "match": {
        "model": {
          "query": "IBC",
          "operator": "OR",
          "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,
      "boost": 1.0
    }
  }
}

クエリを生成するために私が書いたコード:

Map<String,String> parametersMap = new HashMap<String,String>();
parametersMap.put("model","IBC");
parametersMap.put("company.name","Samsung");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

for(String key: parametersMap){
    MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(key,parametersMap.get(key);
        boolQueryBuilder = boolQueryBuilder.must(matchQueryBuilder);                    
}        
    searchSourceBuilder.size(100).query(boolQueryBuilder);
    String result = searchSourceBuilder.toString();
4

1 に答える 1