Перевернутый индекс, который сказал Денисс, это то, что вы ищете. Вам нужно будет очень хорошо определить свой документ, если вы хотите мощный двигатель.
Для совпадений фраз ваш документ должен иметь положение слова (ключ карты) в этом документе. После того, как вы получили все слова, которые искали, вы можете узнать, были ли эти слова вместе в оригинальном документе.
Например:
doc1: "Hello World"
doc2: "Hello Beautiful World"
inverted index {
"Beautifull": [(doc2, 2)],
"Hello": [(doc1, 1)(doc2, 1)],
"World": [(doc1, 2)(doc2, 3)],
}
query: "Hello World"
В обоих документах есть слова "Hello" и "World", но в doc1 они есть вместе (позиции 1 и 2), а в doc2 нет (позиции 1 и 3).
Если вы хотите найти похожих слов , вам понадобится новая структура. Во-первых, вам нужно определить, на что похоже. Расстояние Левенштейна - это то, что вам нужно для этого.
Для его реализации вам понадобится целое новое строение, подобное автомату: Автомат Левенштейна .
Полнотекстовый поиск - огромная область. Внедрить поисковую систему сложно, и многие библиотеки и приложения уже делают это.
(я работаю на Indextank.com - систему полнотекстового поиска в режиме реального времени. Если вам нужна поисковая система, работающая через пару минут, попробуйте нас)