elasticsearch将javaAPI的搜索串打印成可以直接搜索的DSL

       我的es是先学会javaApi,再学会通过head或者kibana的开发者工具进行查询的。虽说java API很强大,但是DSL查询更直观,非常便捷,现在分享一个在Java写查询的时候打印DSL的方法(当你会用java实现一些稍微复杂的查询,但是DSL不会写 的时候比较实用)

1.构建随意的一个QueryBuilder,在institution_name 和institution_research中进行或的查询,搜索采用ik分词,机构的研究方向用ik_max_word,小粒度,机构的名用大粒度,ik_smart,分值加权分别是1.5和1.0(仅用于演示,搜索设计不细思)

String query="人工智能";
QueryBuilder queryBuilder = QueryBuilders.boolQuery()
        .should(QueryBuilders.matchQuery("institution_research", query).analyzer("ik_max_word").boost(1.5f))
        .should(QueryBuilders.matchQuery("institution_name", query).analyzer("ik_smart").boost(1.0f));

2.使用SearchSourceBuilder 这个类进行显示

//            输出查询字符串
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(queryBuilder);
System.out.println("拼接的查询请求======");
System.out.println(searchSourceBuilder.toString());

3.打印出来是这样:

{
  "query" : {
    "bool" : {
      "should" : [
        {
          "match" : {
            "institution_research" : {
              "query" : "人工智能",
              "operator" : "OR",
              "analyzer" : "ik_max_word",
              "prefix_length" : 0,
              "max_expansions" : 50,
              "fuzzy_transpositions" : true,
              "lenient" : false,
              "zero_terms_query" : "NONE",
              "boost" : 1.5
            }
          }
        },
        {
          "match" : {
            "institution_name" : {
              "query" : "人工智能",
              "operator" : "OR",
              "analyzer" : "ik_smart",
              "prefix_length" : 0,
              "max_expansions" : 50,
              "fuzzy_transpositions" : true,
              "lenient" : false,
              "zero_terms_query" : "NONE",
              "boost" : 1.0
            }
          }
        }
      ],
      "adjust_pure_negative" : true,
      "boost" : 1.0
    }
  }
}

 

你可能感兴趣的:(elasticsearch,ik)