Поиск с пунктуацией
Я хочу найти слово с пунктуацией в эластичном поиске, например, я хочу найти слово "Пилигрим". Если я наберу "Пилигримы", слово "Пилигрим" должно быть возвращено. Пожалуйста, помогите мне.
Я пробовал разные комбинации анализатора и запроса, но это не работает.
Вот мое отображение
{
"pbp": {
"mappings": {
"_doc": {
"properties": {
"business_name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
},
"numerictext": {
"type": "text",
"analyzer": "standard"
},
"spot": {
"type": "text",
"analyzer": "starstwith_search"
}
},
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search"
},
"business_setup": {
"type": "keyword"
},
"id": {
"type": "integer"
},
"pbn": {
"type": "keyword"
},
"status": {
"type": "keyword"
}
}
}
}
}
}
Вот параметры запроса в php.
'index' => 'pbp',
'type' => '_doc',
'body' => [
'highlight' => [
'pre_tags' => ['<span class="highlight">'],
'post_tags' => ['</span>'],
'fields' => [
'business_name.numerictext' => [
'type' => 'plain'
]
]
],
'sort' => [
'business_name.keyword' => 'asc'
],
'from' => $startPage,
'size' => $ePageSize,
'query' => [
'bool' => [
'must' => [
'match' => [
'business_name' => [
'query' => $keyword,
'operator' => 'or',
'boost' => 1
]
]
],
'must' => [
'match_phrase_prefix' => [
'business_name.spot' => [
'query' => $keyword,
'max_expansions' => 5,
'boost' => 2.0
]
]
],
'should' => [
'match' => [
'business_name.numerictext' => [
'query' => $keyword,
'operator' => 'or',
'boost' => 1
]
]
],
'must' => [
'query_string' => [
'default_field' => 'business_name.numerictext',
'query' => '*'.$keyword.'*',
'boost' => 2.0
]
],
'should' => [
'term' => [
'status' => 'registered'
]
]
]
]
]