Мне нужно игнорировать апостроф с индексированными результатами, чтобы поиск «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"}
}
]
}
}
}
}
Вероятно, что вы действительно хотите, это использовать 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
}
]
}
Других решений пока нет …