Elasticsearch:过滤查询不起作用

时间:2016-03-17 11:24:38

标签: java elasticsearch

我一直在努力使用java api将查询更改为Elasticsearch中的过滤器。我确保我正在运行的字段搜索设置为“not_analzed”。

以下是过滤器的java代码:

FilterBuilder andFilter = FilterBuilders.andFilter(FilterBuilders.termFilter("thread_name", keyword), FilterBuilders.termFilter("site_name", "test_site"));

    QueryBuilder filteredQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), andFilter);

    SearchResponse threadResponse = client.prepareSearch("thread_and_messages").setQuery(filteredQuery).setSize(20).setFrom(firstRowOffset).execute().actionGet();

然后在JSON中将其转换为此内容:

"filtered" : {
"query" : {
  "match_all" : { }
},
"filter" : {
  "and" : {
    "filters" : [ {
      "term" : {
        "thread_name" : "apple"
      }
    }, {
      "term" : {
        "site_name" : "test_site"
      }
    } ]
  }
}
}

当我尝试进行任何搜索时,它不会返回我正在寻找的文件,即thread_name:Apple和site_name:test_site。

当我使用curl命令运行它时,也不会找到该文档。

谁能看到我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

您可以使用must clause。这将执行and操作

 "query": {
    "bool": {
        "must": [
           {
               "query_string": {
                  "default_field": "thread_name",
                  "query": "apple"
               }
           },
           {
               "query_string": {
                  "default_field": "site_name",
                  "query": "test_site"
               }

           }
        ]
    }
  }