Jak mogę napisać agregację warunków Elasticsearch, która dzieli segmenty przez cały termin, a nie pojedyncze tokeny? Na przykład chciałbym agregowanie przez państwo, ale następujące powraca nowy, York, Jersey i Kalifornii jako indywidualne wiader, nie z Nowego Jorku i New Jersey i Kalifornii jak wiader zgodnie z oczekiwaniami:Elasticsearch terminy agregacja według ciągów w tablicy
curl -XPOST "http://localhost:9200/my_index/_search" -d'
{
"aggs" : {
"states" : {
"terms" : {
"field" : "states",
"size": 10
}
}
}
}'
Mój przypadek użycia jest podobny do opisanego tutaj https://www.elastic.co/guide/en/elasticsearch/guide/current/aggregations-and-analysis.html z jedną różnicą: Pole miasta jest tablicą w moim przypadku.
Przykład Obiekt
{
"states": ["New York", "New Jersey", "California"]
}
Wydaje się, że zaproponowane rozwiązanie (mapowanie boiska not_analyzed) nie działa w tablicach.
Moje mapowania:
{
"properties": {
"states": {
"type":"object",
"fields": {
"raw": {
"type":"object",
"index":"not_analyzed"
}
}
}
}
}
Próbowałem zastąpić "obiekt" przez "string", ale to nie działa albo.
Dziękuję bardzo za odpowiedź, masz rację, moje pytanie jest rzeczywiście brakuje '.raw'. To dlatego, że wypróbowałem tak wiele różnych kombinacji mapowań i wyszukiwań, a ostatecznie opublikowałem tę. Twoja odpowiedź doprowadziła mnie do wykrycia, że moim prawdziwym problemem jest to, że używam wtyczki elasticsearch-transport-couchbase do importowania moich dokumentów do Elasticsearch, a wtyczka zmienia strukturę mojego dokumentu, otaczając go atrybutem "doc". Dzięki Twojej odpowiedzi dodałem dokument ręcznie i zadziałało, i tak odkryłem otaczający atrybut "doc" w innych dokumentach. – Marieke