Привет всем!
В наличии есть БД на Postgres, бэк на Nodejs. До меня пытались прикрутить поиск на Solr, но оказался сложноватым в настройке и с релевантностью было не очень. Я прикрутил elastic и вроде бы стало получше, но все равно неудовлетворительно, а именно:
- поиск по части слова не работает. то есть введя "греч" - сейчас не находит ничего, так как организован полнотекстовый поиск, а хотелось бы чтобы выдавались результаты с учётом следующих пунктов.
- необходим поиск вместе с синонимами, то есть введя "гречка", искало бы и "гречневый", "греча" итд с учётом словоформ. Есть, например, "хлебцы с гречей".
- проблема с ранжированием: хотелось, чтобы если искомое слово(или словоформа) ближе к началу строки(название продукта), то такой результат выше в поиске. Сейчас выходит как-то вперемешку: например, поиск по слову "гречневая"
Индекс настроил следующим образом(синонимы это тестовый вариант) и query делаю следующим образом:
esClient.indices.create({
index: 'products',
body: {
"settings": {
"analysis": {
"filter": {
"ru_stop": {
"type": "stop",
"stopwords": "_russian_"
},
"ru_stemmer": {
"type": "hunspell",
"locale": "ru_RU"
},
"synonym": {
"type": "synonym",
"lenient": true,
"synonyms": [ "гречка, гречневая", "греча => гречка"]
}
},
"analyzer": {
"default": {
"tokenizer": "standard",
"filter": [
"lowercase",
"ru_stop",
"synonym",
"ru_stemmer",
]
}
}
}
}
}
})
//QUERY
esClient.search({
index: "products",
body: {
size: 100,
query: {
match: {"name": searchText.trim()}
}
}
})
Можете подсказать как можно улучшить поиск? Может, другая технология?