Есть задача: проиндексировать поле с русским стеммингом, а потом применить фильтр символов.
Это нужно для того, чтобы была возможность поиска в тексте на русском языке, причем в тексте некоторые символы русского языка заменены на аналогичные по начертанию английские.
Пробую так:
{
"settings": {
"index": {
"max_ngram_diff": 30
},
"analysis": {
"analyzer": {
"pstranslit": {
"tokenizer": "standard",
"filter": ["lowercase", "russian_stemmer"],
"char_filter": ["pstranslit_char_filter"]
}
},
"filter": {"russian_stemmer": {
"type": "stemmer",
"language": "russian"
}
},
"char_filter": {
"pstranslit_char_filter": {
"type": "mapping",
"mappings": [
"с => c",
"е => e",
"т => t",
"о => o",
"р => p",
"а => a",
"н => h",
"к => k",
"х => x",
"в => b",
"м => m",
"у => y",
"ё => e",
", => .",
"* => x",
"× => x",
"""\\ => /"""
]
}
}
}
}
}
Фактически, сначала применяется фильтр символов, потом русский стеммер:
{"analyzer": "pstranslit",
"text": "Держателем кабельным зажимным"
}
{
"tokens" : [
{
"token" : "дepжateлem",
"start_offset" : 0,
"end_offset" : 10,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "kaбeльhыm",
"start_offset" : 11,
"end_offset" : 20,
"type" : "<ALPHANUM>",
"position" : 1
},
{
"token" : "зaжиmhыm",
"start_offset" : 21,
"end_offset" : 29,
"type" : "<ALPHANUM>",
"position" : 2
}
]
}
Как сделать наоборот, чтобы сначала стеммер, а потом фильтр символов?
Может быть, можно сделать 2 анализатора и по очереди их применить к индексируемому значению?