2015-11-11 3 views
0

Привет, У меня возникли проблемы с решением вопроса о правильности следующего запроса для нескольких OR в Elasticsearch. Я хочу, чтобы выбрать все уникальные данные (не считать, но выбрать все строки)Несколько фильтров OR в Elasticsearch

Моя лучшая попытка для этого в упругом запросе

GET mystash/_search 
{ 
    "aggs": { 
     "uniques":{ 
      "filter": 
      { 
       "or": 
         [ 
          { "term": { "url.raw" : "/a.json" } }, 
          { "term": { "url.raw" : "/b.json" } }, 
          { "term": { "url.raw" : "/c.json"} }, 
          { "term": { "url.raw" : "/d.json"} } 
         ] 
      }, 
      "aggs": { 
       "unique" :{ 
        "terms" :{ 
         "field" : "id.raw", 
         "size" : 0 
        } 
       } 
      } 
     } 
    } 
} 

Эквивалент SQL будет

SELECT DISTINCT id 
FROM json_record 
WHERE 
    json_record.url = 'a.json' OR 
    json_record.url = 'b.json' OR 
    json_record.url = 'c.json' OR 
    json_record.url = 'd.json' 

I задается вопросом, правилен ли указанный выше запрос, поскольку данные будут необходимы для поколений отчетов.

ответ

1

Некоторые замечания:

  • Вы должны использовать фильтр запроса вместо агрегации фильтра. Ваш запрос загружается все документов.
  • Вы можете заменить или + термин фильтр одного терминов фильтр
  • Вы можете использовать размер = 0 в корне запроса получить только AGG результат, а не результаты
  • поиска

Пример кода:

{"size":0, 
    "query" :{"filtered":{"filter":{"terms":{"url":["a", "b", "c"]}}}}, 
    "aggs" :{"unique":{"term":{"field":"id", "size" :0}}} 
} 
+0

Спасибо за советы. Но на самом деле я хочу, чтобы все данные вместо только числа! – Xyten

+0

В вашем SQL-запросе вы выбираете отдельный идентификатор ..., это еще не все данные? Я не понимаю, что вы имеете в виду. –

Смежные вопросы