Запрос ElasticSearch с диакритическими знаками / акцентами в переполнении стека

У меня есть следующее выражение: «noapte bună», и я пытаюсь получить тот же результат, когда я ищу «bună» или «buna».

Я пошел к учебнику здесь: https://www.elastic.co/guide/en/elasticsearch/guide/current/asciifolding-token-filter.html но безрезультатно.

Это мой код:

$params = ['index' => 'asciiv3', 'body' => [
"settings" => [
"analysis" => [
"analyzer" => [
"folding" => [
"tokenizer" => "standard",
"filter" =>  [ "lowercase", "asciifolding" ]
]
]
]
],
"mappings" => [
"asciiv3" => [
"properties" => [
"saying" => [
"type" =>           "string",
"analyzer" =>       "standard",
"fields" => [
"folded" => [
"type" =>       "string",
"analyzer" =>   "folding"]
]
]
]
]
]
]];
self::$instance->indices()->create($params);

и это массив запросов:

'multi_match' =>
array(
"type" =>     "most_fields",
"query" =>    "bună",
"fields" => [ "saying", "saying.folded" ]
)

Кто-нибудь знает, что я делаю не так?

0

Решение

Меня устраивает. Это моя установка:

PUT asciiv3
{
"settings": {
"analysis": {
"analyzer": {
"folding": {
"tokenizer": "standard",
"filter": [
"lowercase",
"asciifolding"]
}
}
}
},
"mappings": {
"asciiv3": {
"properties": {
"saying": {
"type": "string",
"analyzer": "standard",
"fields": {
"folded": {
"type": "string",
"analyzer": "folding"}
}
}
}
}
}
}
POST /asciiv3/asciiv3/1
{
"saying":"bună ziua"}
POST /asciiv3/asciiv3/2
{
"saying":"buna ziua"}

GET /asciiv3/_search
{
"query": {
"multi_match": {
"type": "most_fields",
"query": "bună",
"fields": [
"saying",
"saying.folded"]
}
}
}

С этими результатами:

   "hits": {
"total": 2,
"max_score": 0.2712221,
"hits": [
{
"_index": "asciiv3",
"_type": "asciiv3",
"_id": "1",
"_score": 0.2712221,
"_source": {
"saying": "bună ziua"}
},
{
"_index": "asciiv3",
"_type": "asciiv3",
"_id": "2",
"_score": 0.028130025,
"_source": {
"saying": "buna ziua"}
}
]
}
0

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

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

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