Здравствуйте.
Мне необходимо получить записи из одного индекса, которые содержать записи из другого, по вхождению слова без учёта регистра, приведу простой пример как это можно сделать в MySQL (и в других SQL СУБД), данная операция очень затратная по времени для MySQL, т.к. LIKE %% не оптимизируется и не использует индекс, вот пример:
SELECT *
FROM index_1
INNER JOIN index_2 ON index_2.compare_text_2 LIKE CONCAT("%", t1.compare_text_1, “%”)
Можно ли такое выполнить с использованием Manticore Search?
В ином случае, для решения задачи в лоб, получается нужно направить в Manticore Search столько запросов, сколько есть в первом источнике, то есть, получаем все записи, а затем в цикле перебираем их и направляем в поисковый индекс текст, например, у меня в таблице 100 000 записей, получится 100 000 обращений к поисковому индексу, насколько это правильное и единственное решение? Может есть вариант более гуманный и быстрый, чем доссить индекс в таком алгоритме?
в самом manticore нет встроенной функциональности для similarity comparison но вы можете генерить MVA \ String \ Doc-storage аттрибут с помощью ssdeep
, MinHash
, SimHash
для всего документа, на клиенте и сохранять его в индексе.
Потом же извлекать этот аттрибут из обоих индексов и сравнивать его на клиенте с помощью compare функции из соответсвующей либы.
Таким образом на клиенте у вас будет оценка насколько документы совпадают.
Если вам нужно оценить похожесть ВСЕГО индекса - то вы можете сохранять ssdeep
для всех документов в индексе, извлекать его из разных индексов и так же сравнивать.