Похоже, вы используете text
тип данных в своем поле name
, которое плюет test two
в 2 токена как test
и two
, следовательно, оно соответствует вашему поисковому запросу test
как match
запрос анализируется и применяет тот же анализатор к полученным токенам, сопоставленным с токенами документов, присутствующими в инвертированном индексе.
Решение вашего примера использования
Индекс def
{
"mappings": {
"properties": {
"name": {
"type": "keyword" --> note use of `keyword` type
}
}
}
}
Индексировать образцы документов
{
"name" : "test two"
}
{
"name" : "test"
}
Поисковый запрос такой же, как ваш
{
"query": {
"match": {
"name": "test"
}
}
}
Результаты поиска, как вы хотите
"hits": [
{
"_index": "so_key",
"_type": "_doc",
"_id": "1",
"_score": 0.6931471,
"_source": {
"name": "test"
}
}
]
Важное примечание: Вы можете использовать API анализа , чтобы увидеть, как ваши данные индексируются, например,
Использование стандартного (анализатор по умолчанию) в текстовом поле
POST _analyze
{
"text": "test two",
"analyzer" : "standard" --> Change analyzer to keyword and see diff
}
Жетоны
{
"tokens": [
{
"token": "test",
"start_offset": 0,
"end_offset": 4,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "two",
"start_offset": 5,
"end_offset": 8,
"type": "<ALPHANUM>",
"position": 1
}
]
}