java中的弹性搜索查询

时间:2016-06-03 14:13:19

标签: java elasticsearch

我无法在Java中使用此URL查询,但它不会返回任何结果。但是从浏览器返回所有结果,这里是返回结果的URL:

_search?pretty&q=*357*+AND+account_id:574fe92c9179a809fd76f0b8+AND+invalid:false

这是我的代码(不会返回任何结果):

    FilterBuilder[] filtersArray = new FilterBuilder[2];
    filtersArray[0] = FilterBuilders.termFilter("account_id", "574fe92c9179a809fd76f0b8");
    filtersArray[1] = FilterBuilders.termFilter("invalid", false);
    QueryBuilder query = QueryBuilders.filteredQuery(QueryBuilders.simpleQueryStringQuery("*357*"), FilterBuilders.andFilter(filtersArray));
    SearchResponse response = esClient.prepareSearch(SecurityManager.getNamespace())
            .addSort("created_time", SortOrder.DESC)
            .setTypes(dataType)
            .setQuery(query)
            .addFields("_id")
            .setFrom(page * size)
            .setSize(size)
            .setExplain(false)
            .execute()
            .actionGet();

有人能告诉我将URL查询翻译成java查询的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

首先,您应该使用的URL查询是

?q=*357*+AND+account_id:574fe92c9179a809fd76f0b8+AND+invalid:false

否则您对account_idinvalid

没有任何限制

然后,这个新的URL查询在Java中的确切翻译是

QueryBuilder query = QueryBuilders.queryStringQuery("*357* AND account_id:574fe92c9179a809fd76f0b8 AND invalid:false");
SearchResponse response = esClient.prepareSearch(SecurityManager.getNamespace())
        .addSort("created_time", SortOrder.DESC)
        .setTypes(dataType)
        .setQuery(query)
        .addFields("_id")
        .setFrom(page * size)
        .setSize(size)
        .setExplain(false)
        .execute()
        .actionGet();

注意:

  • queryStringQuery而非simpleQueryStringQuery
  • 没有过滤器,因为它们已经在查询字符串中