Отфильтрованный запрос в Elasticsearch Java API

Ответ здесь находится в : :

Чтобы объявить параметр ограниченного типа, укажите имя параметра типа, за которым следует ключевое слово extends, а затем его верхняя граница [...]. Обратите внимание, что в этом контексте расширения в общем смысле означают либо extends (как в классах), либо implements (как в интерфейсах).

blockquote>

Итак, у вас есть это немного запутанно, и Oracle это знает.

23
задан Vinay Vemula 27 October 2014 в 03:01
поделиться

3 ответа

 FilteredQueryBuilder builder = 
 QueryBuilders.filteredQuery(QueryBuilders.termQuery("test", 
 "test"),FilterBuilders.termFilter("test","test"));

Он создаст отфильтрованный запрос ... Для фильтрованного запроса первый аргумент - это запрос, а второй - фильтр.

Обновление: Отфильтрованный запрос устарел вasticsearch 2.0 +. см.

Надеюсь, что это поможет ..!

30
ответ дан BlackPOP 27 October 2014 в 03:01
поделиться

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);
8
ответ дан daphshez 27 October 2014 в 03:01
поделиться

Кажется, что, оборачивая запрос (объект 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"
              }}
            ]
          }
        }
      }
    }
1
ответ дан ynotu. 27 October 2014 в 03:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: