Нет результатов после внедрения анализатора в Elasticsearch

Мне нужно игнорировать апостроф с индексированными результатами, чтобы поиск «Johns potato» показал результаты для «John’s potato»

Мне удалось принять анализатор, но теперь я не возвращаю результаты поиска. Кто-нибудь видит что-то очевидное, что мне не хватает?

$params = [
'index' => $index,
'body' => [
'settings' => [
'number_of_shards' => 5,
'number_of_replicas' => 2,
'analysis' => [
"analyzer" => [
"my_analyzer" => [
"tokenizer" => "keyword",
"char_filter" => [
"my_char_filter"]
]
],
"char_filter" => [
"my_char_filter" => [
"type" => "mapping",
"mappings" => [
"' => "]
]
]
]
],
'mappings' => [
$type => [
'_source' => [
'enabled' => true
],
'properties' => [
'title' => [
'type' => 'text',
'analyzer' => 'my_analyzer'
],
'content' => [
'type' => 'text',
'analyzer' => 'my_analyzer'
]
]
]
]
]
];

Я обнаружил, что удаление анализатора из моих полевых отображений позволило вновь появиться результатам, но я не получаю результатов, как только добавляю анализатор.

Вот пример запроса, который я делаю.

{
"body": {
"query": {
"bool": {
"must": {
"multi_match": {
"query": "apples",
"fields": [
"title",
"content"]
}
},
"filter": {
"terms": {
"site_id": [
"1351",
"1349"]
}
},
"must_not": [
{
"match": {
"visible": "false"}
},
{
"match": {
"locked": "true"}
}
]
}
}
}
}

0

Решение

Вероятно, что вы действительно хотите, это использовать english анализатор, который предоставляется. стандартный анализатор это значение по умолчанию, которое будет разбито на пробелы и некоторые знаки препинания, но оставит апострофы в покое. анализатор английского языка может остановить и удалить стоп-слова, так как язык известен.

Вот стандартный вывод анализатора, где вы можете увидеть «Джон»:

POST _analyze
{
"analyzer": "standard",
"text": "John's potato"}

{
"tokens": [
{
"token": "john's",
"start_offset": 0,
"end_offset": 6,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "potato",
"start_offset": 7,
"end_offset": 13,
"type": "<ALPHANUM>",
"position": 1
}
]
}

А вот английский анализатор, где вы можете увидеть «s устранен. Стеблирование позволит «Джону», «Джонсу» и «Джону» соответствовать документу.

POST _analyze
{
"analyzer": "english",
"text": "John's potato"}

{
"tokens": [
{
"token": "john",
"start_offset": 0,
"end_offset": 6,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "potato",
"start_offset": 7,
"end_offset": 13,
"type": "<ALPHANUM>",
"position": 1
}
]
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector