2015-08-19 3 views
0

У меня есть массив:Elasticsearch скопления на массиве

people: ["Darrell","Karen","Gary"] 

проиндексирован как таковой:

indexes :people, type: 'string', include_in_all: false 

Я хочу, чтобы иметь возможность поиска скоплений на отдельных элементов в этом массиве, но с этой структурой , поиск «Даррела» также вернет «Карен» и «Гэри» в результаты теста. И поиск «Карен» не возвращает ни одного из элементов массива в результатах.

Есть несколько предложений здесь http://coderify.com/aggregates-array-field-and-autocomplete-funcionality-in-elasticsearch/, но я не могу изменить свою структуру таким образом. Любые другие предложения?

+0

Поиск по Карен также возвращает все элементы в массиве. Что именно вы ищете. –

+0

В этом случае я хочу получить только результат, чтобы вернуть Карен. Точно так же Даррелл должен вернуть Даррена. –

ответ

0

Для достижения этой цели вам необходимо использовать вложенную агрегацию и агрегацию фильтров.

Но до этого, возможно, потребуется реконструировать данные следующим образом

{ 
    "people": [ 
    { 
     "name": "Darrell" 
    }, 
    { 
     "name": "Karen" 
    }, 
    { 
     "name": "Gary" 
    } 
    ] 
} 

Следующая сделать поле людей, как вложенные в отображении. Теперь каждый внутренний объект каждого человека будет рассматриваться как внутренний документ.

Теперь с помощью следующей агрегации, чтобы получить то, что вам нужно -

{ 
    "aggs": { 
    "innerDOcuments": { 
     "nested": { 
     "path": "people" 
     }, 
     "aggs": { 
     "filterPeople": { 
      "filter": { 
      "name": "karen" 
      }, 
      "aggs": { 
      "peoples": { 
       "terms": { 
       "field": "name" 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

Я изменил структуру данных в соответствии с вашим предложением, но если я попробую переиндексировать, сохраняя «тип» как «вложенный», я вижу ошибки, подобные следующим: «MapperParsingException [сопоставление объектов [people] пытается сериализовать значение без привязки поля с ним, текущее значение [Karen]] "}}' –

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