@hebrian_vasyl
Веб-разработчик

Умный поиск по большой базе. Что выбрать?

Здравствуйте!

Ищу готовое сервис для работы с постоянно пополняющейся базой данных.

Необходимо создать базу данных, куда ежедневно будет добавлятся ~15k (дальше еще больше)

Планируется два сценария работы с базой:
1. Добавление новых записей: если строка в базе не существует, то добавить её в базу.

2. Поиск по базе данных:
- поиск по текстовым полям по заданым ключевым словам/фразам на разных языках (с учетом морфологии)
- поиск по числовым полям
- сортировка по дате добавления

Вот примерная структура сущности:
- заголовок (текстовое поле)
- описание (текстовое поле)
- кол-во на складе (число)
- кол-во в магазине (число)
- категории (масив числовых значний, id категорий)

Если описать запрос словами, получится примерно так:
Получить все записи, для которых выполняется условия:
1. В заголовке или описании содержатся слова apple, orange
2. В заголовке или описании НЕ содерится banana
3. Если есть на складе и кол-во > 10 или кол-во в магазине > 1
5. В категориях ID:10, ID: 20, ID:30

Что бы ускорить поиск, записи можно фильтров по дате добавление, и не учитывать те, которые были добавлены больше 72 часов назад.

Думал разрабатывать, например на MySQL + Sphinx, или Elasticsearch, но это долго и дорого, к тому же нужно постоянно поддерживать.

Смотрел в сторону готовых решений и SaaS сервисов. Пробовал Elastic App Search, все было хорошо, но столкнулся с ограниченим 2 проблемами:
1. если ключевые фразы на разных языках, морфология не работает.
2. есть ограничение в 128 символов в поисковом запросе. На форуме подсказали, что таких долгих поисковых запросов впринцыпе не должно быть, и я не для того использую сервис.

Неужели нет готовых решений, что бы создать сущность, задать поля и по API добавлять записи и делать по ним поиск?
  • Вопрос задан
  • 204 просмотра
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Указатель (подобный книжному) диапазонов id/строк записей по каждому из языков и по каждому уникальному термину из всех строк для каждого из языков.
При изменении базы - всегда обновляете указатель.

Порядок условий при поиске из вашего примера (из 5 пунктов) - правильный. Это корректный "водопадный" фильтр выборки.

Неужели нет готовых решений, что бы создать сущность, задать поля и по API добавлять записи и делать по ним поиск?
конечно же есть, но не в открытом доступе и не бесплатно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы