У меня есть следующее выражение: «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" ]
)
Кто-нибудь знает, что я делаю не так?
Меня устраивает. Это моя установка:
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"}
}
]
}
Других решений пока нет …