Ответ здесь находится в : :
Чтобы объявить параметр ограниченного типа, укажите имя параметра типа, за которым следует ключевое слово
blockquote>extends
, а затем его верхняя граница [...]. Обратите внимание, что в этом контексте расширения в общем смысле означают либоextends
(как в классах), либоimplements
(как в интерфейсах).Итак, у вас есть это немного запутанно, и Oracle это знает.
FilteredQueryBuilder builder =
QueryBuilders.filteredQuery(QueryBuilders.termQuery("test",
"test"),FilterBuilders.termFilter("test","test"));
Он создаст отфильтрованный запрос ... Для фильтрованного запроса первый аргумент - это запрос, а второй - фильтр.
Обновление: Отфильтрованный запрос устарел вasticsearch 2.0 +. см.
Надеюсь, что это поможет ..!
QueryBuilders.filteredQuery
устарело в API v. 2.0.0 и более поздних версиях.
Вместо этого фильтры и запросы имеют «равные права». FilterBuilders
больше не существует, и все фильтры построены с использованием QueryBuilders
.
Чтобы реализовать запрос только с фильтром (в данном случае геофильтром), вы должны сделать:
QueryBuilder query = QueryBuilders.geoDistanceQuery("location")
.point(center.getLatitude(), center.getLongitude())
.distance(radius, DistanceUnit.METERS);
// and then...
SearchResponse resp = client.prepareSearch(index).setQuery(query);
Если вы хотите выполнить запрос по двум терминам, вам нужно будет использовать boolQuery
с must
:
QueryBuilder query = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("user", "ben"))
.must(QueryBuilders.termQuery("rank", "mega"));
// and then...
SearchResponse resp = client.prepareSearch(index).setQuery(query);
Кажется, что, оборачивая запрос (объект BoolQueryBuilder), передавая его в качестве аргумента boolQuery (). Filter (..), а затем устанавливая его в setQuery (), как вы предложили, - тогда это может быть достигнутым. Клавиша «оценка» в ответе всегда 0 (хотя документы найдены)
Будьте осторожны! Если оценка равна 0, оценка была рассчитана. Это означает, что запрос все еще находится в контексте запроса, а не в контексте фильтра. В контексте фильтра оценка устанавливается на 1,0 (без расчета) источник
Чтобы создать запрос в контексте фильтра без расчета оценки (оценка = 1,0), выполните следующие действия (возможно, имеется еще лучше?):
QueryBuilder qb = QueryBuilders.constantScoreQuery(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("name", "blub)));
Это возвращает те же результаты, как:
GET /indexName/typeName/_search
{
"filter": {
"query": {
"bool": {
"must": [
{ "match": {
"name": "blub"
}}
]
}
}
}
}