Для точных совпадений вам нужно сделать две вещи:
Текст Тип данных проходит через Анализ фаза.
Например, если ваши данные This is a beautiful day
, во время приема, тип данных text
будет разбивать слова на токены, вставлять их в нижний регистр [this, is, a, beautiful, day]
и затем добавлять их в инвертированный индекс. Этот процесс происходит с помощью Standard Analyzer , который является анализатором по умолчанию, применяемым к текстовому полю.
Так что теперь, когда вы делаете запрос, он снова применяет анализатор в время запроса и будет искать, если слова присутствуют в соответствующих документах. В результате вы видите документы даже без точного соответствия .
Чтобы выполнить точное совпадение, вам необходимо использовать поля keyword
, так как не проходит фазу анализа.
Я бы предложил создать одноуровневое поле для ключевого слова для текстового поля, которое у вас есть ниже, и затем повторно ввести все данные:
Отображение:
PUT my_sample_index
{
"mappings": {
"properties": {
"kubernetes":{
"type": "object",
"properties": {
"container_name": {
"type": "text",
"fields":{ <--- Note this
"keyword":{ <--- This is container_name.keyword field
"type": "keyword"
}
}
}
}
}
}
}
}
Обратите внимание, что я предполагаю, что вы используете тип object
.
Запрос запроса:
POST my_sample_index
{
"query":{
"bool": {
"must": [
{
"term": {
"kubernetes.container_name.keyword": {
"value": "xyz"
}
}
}
]
}
}
}
Надеюсь, это поможет!