Это зависит от вашего определения подобия.
Алгоритм edit-distance является стандартным алгоритмом для (латинского языка) предложений словаря и может работать с целыми текстами. Два текста похожи, если они имеют в основном одни и те же слова (например, буквы) в одном и том же порядке. Таким образом, следующие две рецензии на книги будут довольно похожи:
1) «Это великая книга»
2) "Это не великие книги"
(Количество букв, которые нужно удалить, вставить, удалить или изменить, чтобы превратить (2) в (1), называется «расстояние редактирования».)
Для реализации этого вы хотели бы посетить каждый обзор программно. Возможно, это не так дорого, как кажется, и если это слишком дорого, вы можете выполнить сравнения в качестве фоновой задачи и сохранить n-Most-similiar в самом поле базы данных.
Другой подход заключается в понимании структуры (латинских) языков. Если вы удаляете короткие (не прописные или заключенные в кавычки) слова и назначаете веса для слов (или префиксов), которые являются общими или уникальными, вы можете выполнить байесовское сравнение. Два следующих рецензии на книги могут быть сопоставлены и признаны похожими:
3) «Французская революция была бла-бла, Война и мир, бла-бла, Франция». -> Франция / Французская (2) Революция (1) Война (1) Мир (1) (обратите внимание, что для объединения Франции и Франции использовался словарь)
4) «Эта книга - бла-бла, революция во французской кухне». -> Франция (1) Революция (1)
Чтобы реализовать это, вы бы хотели определить «ключевые слова» в обзоре, когда он был создан / обновлен, и чтобы найти похожие обзоры, используйте эти ключевые слова в предложении where запроса (в идеале, «полнотекстовый» поиск, если база данных поддерживает это), возможно, с последующей обработкой набора результатов для оценки найденных кандидатов.
Книги также имеют категории - триллерные сюжеты во Франции похожи на исторические исследования Франции и так далее? Метаданные помимо заголовка и текста могут быть полезны для сохранения релевантности результатов.