我正在使用elasticsearch-1.7.1并且 java 依赖项是
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>1.7.1</version>
问题:我在 ES 中的子句中使用,但是当我使用过滤查询查询 ES 时,它给了我一个空响应。
contentQuery = boolQuery().must(QueryBuilders.matchQuery(PROPERTY_BOOK_ID, bookId).operator(Operator.AND))
.must(QueryBuilders.matchQuery("contentType", "enrichments").operator(Operator.AND))
.must(contentQuery);
FilteredQueryBuilder builder =
QueryBuilders.filteredQuery(contentQuery, FilterBuilders.termFilter("spineId","chapter04.html"));
searchResponse = searchClientService.getClient()
.prepareSearch(INDEX_NAME).setTypes(INDEX_TYPE)
.setQuery(builder)
.execute().actionGet();
没有过滤器,它工作正常。任何人都可以建议如何对查询应用过滤器,或者让我知道在提出请求时是否出错。
查询详情:
{
"filtered" : {
"query" : {
"bool" : {
"must" : [ {
"match" : {
"bookId" : {
"query" : "d563739c-8b46-449b-b695-d662cb32087d",
"type" : "boolean",
"operator" : "AND"
}
}
}, {
"match" : {
"contentType" : {
"query" : "enrichments",
"type" : "boolean",
"operator" : "AND"
}
}
}, {
"bool" : {
"must" : {
"match" : {
"content" : {
"query" : "resources*",
"type" : "phrase_prefix"
}
}
}
}
} ]
}
},
"filter" : {
"term" : {
"spineId" : "chapter04.html"
}
}
}
}
我还在我的索引上尝试了其他过滤器查询,但它们都不起作用。下面的查询必须返回一些结果,但它返回的是空结果。
{
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"bool" : {
"must" : {
"term" : {
"spineId" : "chapter03.html"
}
}
}
}
}
}
映射:
private XContentBuilder buildMapping() throws Exception {
return jsonBuilder().prettyPrint()
.startObject()
.startObject(indexType)
.startObject("properties")
.startObject(PROPERTY_SPINE_ID).field("type", "string").field("index", "not_analyzed").endObject()
.endObject()
.endObject()
.endObject();
}
XContentBuilder source = jsonBuilder().startObject();
source.field(PROPERTY_BOOK_ID, bookId)
.field(PROPERTY_WIDGET_ID, widgetId)
.field(PROPERTY_CONTENT, widgetDescription)
.field(PROPERTY_CONTENT_TYPE, contentType.getValue())
.field(PROPERTY_META_DATA, widgetJsonString)
.field(PROPERTY_SPINE_ID, spineId)
.endObject();
非常感谢任何帮助。