Практическое применение:
У меня есть несколько баз данных, которые необходимо запрашивать из одного окна поиска.Некоторые из них у меня есть прямой доступ (они SQL Server / MySQL), другие я могу искать только через API.
В идеальном мире я бы внедрил все эти данные в Elasticsearch и использовал их для определения релевантности.К сожалению, у меня нет ресурсов, чтобы сделать это эффективно.Elastic занимает более 400 МБ ОЗУ только в режиме ожидания без добавления каких-либо фактических данных или выполнения запросов.Похоже, что большинство людей, использующих Elasticsearch в производстве, используют машины с 32–64 ГБ ОЗУ.Моя организация не имеет доступа ни к чему, кроме мощного, доступного для этого проекта.
Поэтому моя следующая идея - запрашивать все базы данных и подключаться к API, когда пользователь выполняет поиск.Затем мне нужно проанализировать результаты, определить релевантность и вернуть их пользователю.Я признаю, что это, вероятно, ужасный план с точки зрения производительности.Я надеюсь использовать memcached, чтобы сделать вещи более терпимыми.
В своих исследованиях по поиску алгоритмов для определения релевантности я наткнулся на tf-idf.Я хочу применить это к результатам, которые я получаю из всех баз данных.
Фактический вопрос
Насколько я понимаю, tf-idf состоит в том, что после токенизации каждого документа в корпусе вы выполняете анализ частоты термина, а затем умножаете его на обратноечастота документа для слов.Частота обратных документов рассчитывается путем деления общего количества документов на общее количество документов с термином.
Проблема в том, что, если я извлекаю документы из API, я не знаю истинного общего количества документов в корпусе.Я только когда вытягиваю подмножество, и, основываясь на способе извлечения этих документов, они естественным образом соглашаются со всеми условиями в них.Могу ли я применить tf-idf к этому, рассматривая пул документов, возвращаемых этими различными источниками, как единый корпус?Какой лучший способ пойти по этому поводу?
Бонусный вопрос
Если у вас есть предложение о том, как сделать это, не взламывая мое собственное поисковое решение или не используя Elasticsearch, я весь слух ...