Я просто запускаю агрегирование в плагине браузера (чудо), как вы видите на рисунке ниже, только один документ соответствует запросу, но агрегирован, разделенный пробелами, но это не имеет смысла. Я хочу, чтобы агрегат для разных документов .. В этом сценарии должна быть только одна группа с номером 1 и ключом: «Drow Ranger». Каков истинный способ сделать это в elasticsearch .. elasticsearch aggregations разделенные слова
ответ
Это, вероятно, потому, что ваш heroname
поле analyzed
и, таким образом, «Дроу Ranger» получает лексемы и индексируются как «дроу» и «рейнджер».
Один из способов обойти это, чтобы превратить ваш heroname
поле в нескольких местах с анализируемой части (тот, который вы поиск по с запросом подстановочные) и другой not_analyzed
части (один можно агрегировать на).
Вы должны создать свой индекс, как это и указать правильное отображение для heroname
поля
curl -XPUT localhost:9200/dota2 -d '{
"mappings": {
"agust": {
"properties": {
"heroname": {
"type": "string",
"fields": {
"raw: {
"type": "string",
"index": "not_analyzed"
}
}
},
... your other fields go here
}
}
}
}
Затем вы можете запустить агрегацию на heroname.raw
поле вместо heroname
поля.
UPDATE
Если вы просто хотите попробовать на heroname
поле, вы можете просто изменить это поле, а не воссоздать весь индекс. Если вы выполните следующую команду, она просто добавит новое поле heroname.raw
в существующее поле heroname
. Обратите внимание, что вам все равно придется индексировать данные, хотя
curl -XPUT localhost:9200/dota2/_mapping/agust -d '{
"properties": {
"heroname": {
"type": "string",
"fields": {
"raw: {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
Тогда вы можете продолжать использовать heroname
в вашем wildcard
запросе, но ваша агрегация будет выглядеть следующим образом:
{
"aggs": {
"asd": {
"terms": {
"field": "heroname.raw", <--- use the raw field here
"size": 0
}
}
}
}
Я знаю, что это из-за мой индекс поля проанализированы. но если я сделаю это на этот раз, я не смогу сделать «регистр без учета регистра». Я имею в виду, что я уже сделал это, и я запускаю запрос «... wildcard: * d *» ... он не работает, но * D * работает .. так как же заставить обе эти работы? –
Нечувствительный к регистру поиск по шаблону будет работать в поле «heroname», и агрегация будет работать против поля «heroname.raw». Все, что мы делаем, это добавить новое поле ('heroname.raw'), не меняя того, которое уже работает (' heroname'). Попробуйте. – Val
Я понял, что вы имеете в виду, а также отлично работает !, спасибо :) С уважением, –