美文网首页程序猿阵线联盟-汇总各类技术干货
spring data es 通过原生dsl 语句查询

spring data es 通过原生dsl 语句查询

作者: 良人与我 | 来源:发表于2019-05-09 10:00 被阅读104次

    想要在代码里使用es 的 query dsl 语句。
    因为写好了 query dsl 语句,再用程序翻译 挺麻烦的。

    在官网找到了 wrapper query 刚好可以满足,将 json 串作为 query 的参数。
    https://www.elastic.co/guide/en/elasticsearch/reference/current/specialized-queries.html

    wrapper query

    A query that accepts other queries as json or yaml string.

    用代码测试下

    @Test
    public void testtest() {
      SearchRequestBuilder searchRequestBuilder;
      String query = " { \"query\":{\"match_all\" : {\"boost\" : 1.0}}}";
      WrapperQueryBuilder wrapperQueryBuilder = QueryBuilders.wrapperQuery(query);
      searchRequestBuilder = elasticsearchTemplate.getClient().prepareSearch("test_customer");
      searchRequestBuilder.setQuery(QueryBuilders.wrapperQuery(query));
      SearchResponse response = searchRequestBuilder.execute().actionGet();
    }
    

    报了异常

    ParsingException[no [query] registered for [query]

    在官网找到了答案
    https://discuss.elastic.co/t/parsingexception-in-elastic-5-0-0/64626
    有人也遇到了同样的问题。

    image.png
    image.png

    原来需要这样写

    String query = "{"match_all":{}}";

    因为QueryBuilders 本身就会包装上 query。

    参考地址
    https://discuss.elastic.co/t/parsingexception-in-elastic-5-0-0/64626

    https://stackoverflow.com/questions/20167976/elasticsearch-no-query-registered-for-query/56051064#56051064

    相关文章

      网友评论

        本文标题:spring data es 通过原生dsl 语句查询

        本文链接:https://www.haomeiwen.com/subject/dvsioqtx.html