2015-04-27 4 views
5

Первый Создайте несколько примеров данных (e1, e2, e3 типы и тест имя индекса):Как удалить дублированный результат поиска в elasticsearch?

PUT test/e1/1 
{ 
    "id":1 
    "subject": "subject 1" 
} 
PUT test/e2/1 
{ 
    "id":1 
    "subject": "subject 2" 
} 
PUT test/e3/2 
{ 
    "id":2 
    "subject": "subject 3" 
} 

Теперь мой вопрос: как я могу получить только эти две данные? удалите повторяющиеся данные с тем же идентификатором в результатах curl -XGET _search.

test/e1/1 
{ 
    "id":1 
    "subject": "subject 1" 
} 
test/e3/2 
{ 
    "id":2 
    "subject": "subject 3" 
} 

ответ

9

Сначала вам нужно будет найти по нескольким индексам.
Затем на результат удалите дубликат ID.

POST http://myElastic.com/test/e1,e2,e3/_search 
{ 
    "aggs":{ 
    "dedup" : { 
     "terms":{ 
     "field": "id" 
     }, 
     "aggs":{ 
     "dedup_docs":{ 
      "top_hits":{ 
      "size":1 
      } 
     } 
     }  
    } 
    } 
} 

Это может помочь вам:

+0

Ведет ли агрегация наивысший результат балл? И есть ли метод, чтобы вернуть результат 'aggs' в' hits' в json result. – navins

+0

@navins Да, результат по умолчанию - это результат по результату. Такой запрос будет содержать только первый результат, который также является наивысшим результатом. Я не знаю второй части вашего вопроса (возможно, задайте второй вопрос на SO) –

+0

спасибо, просто отправьте еще один вопрос здесь: http://stackoverflow.com/questions/29887583/how-to-paging-aggregation-result -в-elasticsearch – navins