Я согласен с пользователем @Lue E с некоторыми дополнительными модификациями и попробовал использовать простой подход с использованием ключевых слов, но у меня возникли некоторые проблемы, поэтому я изменил свой подход к использованию токенизатора keyword
в своем собственном настраиваемом анализаторе который должен решить большинство ваших сценариев использования.
Определение индекса с помощью пользовательского анализатора
{
"settings": {
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"type": "custom",
"tokenizer": "keyword", --> to make it searchable
"filter": [
"lowercase", --> case insensitive search
"trim" --> remove extra spaces
]
}
}
}
},
"mappings": {
"properties": {
"mathformula": {
"type": "text",
"analyzer": "my_custom_analyzer"
}
}
}
}
Примеры документов индекса
{
"mathformula" : "(a+b)^2 = a^2 + b^2 + 2ab"
}
{
"mathformula" : "a2+b2 = c2"
}
Поисковый запрос (соответствует запросу, использует тот же анализатор индекса времени)
{
"query": {
"match" : {
"mathformula" : {
"query" : "a2+b2 = c2"
}
}
}
}
Результат поиска содержит только первый индексированный do c
"hits": [
{
"_index": "so_math",
"_type": "_doc",
"_id": "1",
"_score": 0.6931471,
"_source": {
"mathformula": "a2+b2 = c2"
}
}
]