2015-03-11 4 views
0

Я пытаюсь запросить документы, которые имеют значение [1,2] в своем поле array.ElasticSearch: Как запросить массив (длинный)?

GET a/g/_search 
{"query":{"match":{"array":[1,2]}}} 

возвращает ошибку:

{"error": "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed... "status": 400 }

индексация была succefull, используя команду:

PUT a/g/2 
{"array": [1,2]} 

и отображение является следующее:

{ 
    "a": { 
     "mappings": { 
     "g": {"properties": {"array": {"type": "long"}}} 
     } 
    } 
} 

ответ

0

Вы можете искать элементы только в этом массиве, а не в массиве в целом.

Так что это будет работать:

{ 
    "query": { 
     "match": { 
      "array": 1 
     } 
    } 
} 

Однако поиски полного массива можно сделать с помощью метода обхода путем индексации дополнительного поля, которое отслеживает количество элементов в массиве. Объединив поиск всех элементов в массиве и количество их, это будет в некоторой степени достижимо. http://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_multiple_exact_values.html#_equals_exactly

Предполагая, что вы указали дополнительное поле count, документ становится {"array": [1,2], "count": 2}. Запрос в этом случае будет:

{ 
    "query": { 
     "bool": { 
      "must": [ 
       {"match": {"array": 1}}, 
       {"match": {"array": 2}}, 
       {"match": {"count": 2}} 
      ] 
     } 
    } 
} 
Смежные вопросы