Elastic Search — отображать все отдельные значения массива

Для поля, отображаемого как строка, я сохранил список строк в индексе ES, например:

  subject: ["Scientific Research", "Numerical Analysis", "History of Art"]

Я хотел бы запросить это поле и получить полные названия категорий с их частотой. Что я пробовал до сих пор с гранями:

  "query":{
       "match_all": {}
   }, 
   "facets":{
       "tag":{
           "terms":{
               "field":"subject"}
             }
   }  

не работает должным образом, потому что он разбивает мои тематические поля на токены и возвращает мне самые частые стоп-слова. Как я могу получить полные записи, упорядоченные по количеству для анализируемого поля, а не только первые 10, если это возможно? Спасибо!


person Crista23    schedule 13.04.2014    source источник


Ответы (1)


Я бы использовал multi-field определить ваше сопоставление так:

{
   .....
        ....
            .....
            "subject": {
                "type": "multi_field",
                "store": "yes",
                "fields": {
                    "analyzed": {
                        "type": "string",
                        "analyzer": "standard"
                    },
                    "notanalyzed": {
                        "type": "string",
                        "index": "not_analyzed"
                    }
                }
            }

Тогда я бы провел вашу огранку на поле notanalyzed вот так -

"query":{
      "match_all": {}
  }, 
  "facets":{
      "tag":{
          "terms":{
              "field":"subject.notanalyzed",
              "size": 50
            }
        }
  }  
person Nathan Smith    schedule 14.04.2014
comment
Это сработало для вас, @Christa23? Я столкнулся с той же проблемой, и предоставленное решение не сработало для меня. - person axel freudiger; 22.05.2014
comment
Это абсолютно правильный ответ. Вы получаете такие результаты, как этот Научный 1 Исследовательский 1 Числовой 1 Анализ 1... Причина в том, что это токены, потому что анализатор по умолчанию (стандартный) разбивается на пробелы. Поскольку вам нужно полное значение поля, вам вообще не нужно его разбивать. Это просто делается, вообще не анализируя данные. - person Eulalie367; 08.04.2015