Зависит от того, что вы храните в индексе, и какой результат в итоге хотите получить.
Какие могут быть кейсы:
1. В индексе хранится много чего: кошки, собаки, попугаи и т.д.
Решение: заводите новое поле, например 'pet_type'. Устанавливайте в него значение, например: 'собака'. Далее, создаёте статический фильтр синонимов в индексе, называете его, например 'pet_analyzer' и прописываете список необходимых синонимов. В результате должно получиться, что-то типа такого:
PUT /pets_index
{
"settings": {
"analysis": {
"filter": {
"pet_synonyms": {
"type": "synonym",
"synonyms": [
"собака, щенок, кобель => dog",
"кошка, кот, котёнок => cat",
"попугай, попугайчик => parrot"
]
}
},
"analyzer": {
"pet_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "pet_synonyms"]
}
}
}
},
"mappings": {
"properties": {
"pet_type": {
"type": "text",
"analyzer": "pet_analyzer"
}
}
}
}
2. В индексе хранятся только собаки, либо вам нужно распределение (щенки/взрослые собаки/распределение по полу)
В таком случае, добавляете эту характеристику прямо в name. То есть документ у вас будет называться: 'Щенок лабрадора'. Далее, смотрите на типы формирования входящих запросов. Вам могут подойти: