2014-10-06 2 views
0

Моего текущего запроса скоплений:Получить полный срок содержания с скоплениями в elasticsearch

{ 
    "size": 0, 
    "query": { 
     "match_all": {} 
    }, 
    "aggregations": { 
     "publication_type": { 
     "terms": { 
      "field": "publication_type.name" 
     } 
     } 
    } 
} 

Это вернет три отдельных терминов: «ежегодный», «еженедельно» и «отчет».

На самом деле это всего лишь 2 условия: «еженедельный отчет» и «годовой отчет».

Как я могу получить ElasticSearch (используя 1.1), чтобы возвращать полные слова вместо отдельных терминов?

ответ

5

По умолчанию все поля анализируются, если явное сопоставление не предоставляется. Вам придется переопределять все данные с новым сопоставлением. Поле «имя» должно быть not_analyzed или вы можете добавить токенизатор «keyword».

пример:

"name" : {"type" : "string", "index" : "not_analyzed"} 

В случае, если вы хотите сохранить имя поля, проанализированные, вы можете пойти на отображение многопрофильной, как показано ниже.

"name":{ 
    "type":"string", 
    "fields":{ 
     "name_raw":{ 
      "type":"string", 
      "index" : "not_analyzed" 
     } 
    } 
} 

Теперь вы можете использовать «publication_type.name_raw» в своем запросе на агрегацию.

+0

спасибо за ваш четкий ответ, я попробую его и дам вам знать :) – Paul

+0

Он отлично работает! Вы случайно не знаете, как фильтровать эти несколько слов? :) Просто регулярный запрос фильтра ожидает единственного термина – Paul

+0

Nevermind the filtering :) Еще раз спасибо. – Paul

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