Я использую 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();
любая помощь очень ценится.
setQuery(builder)
? - person Val   schedule 29.06.2016term
запросы/фильтры точно совпадают. Как отображаетсяspineId
? - person pickypg   schedule 29.06.2016