我一直在努力使用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命令运行它时,也不会找到该文档。
谁能看到我在这里做错了什么?
答案 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"
}
}
]
}
}