Я пытаюсь разработать сложную текстовую поисковую систему.
У меня есть тысячи текстовых страниц из многих книг.
Мне нужно искать страницы, которые содержат указанные сложные логические критерии.
Эти критерии могут содержать практически любую комбинацию из следующих:
A: Полные слова.
B: Корни слов (полулезные по отношению к основам; то есть все слова с определенными ключевыми буквами).
C: Словарные шаблоны (в некоторых языках корни заполняются в определенных шаблонах, образуя различные части речи, такие как прилагательные, глаголы прошлого / настоящего ...).
D: Логические связки: AND / OR / XOR / NOT / IF / IFF и скобки для указания приоритетов.
Теперь, будет ли быстрее иметь полный текст страниц в базе данных (не проиндексированный) и выполнять поиск по всем из них с помощью SQL и регулярных выражений?
Или лучше построить индексы кортежей word / root / template-page-location.
Следовательно, мы можем ускорить поиск отдельных слов / корней / шаблонов.
Однако, это становится сложным, когда мы вводим логические связки в наши запросы.
В таких случаях я думал о следующих шагах:
1: поиск по каждому отдельному слову / корню / шаблону в указанном запросе.
2: На основе приоритетов мы объединяем два списка результатов (начиная с шага 1), одновременно углубляясь в логическое связующее
Например, если мы ищем «он И (ИЛИ был)»:
1: Мы будем искать слова «он», «есть» и «был» отдельно и получать списки результатов для каждого слова.
2: объединить списки результатов "is" и "was" с помощью функции объединения OR-MERGE.
3: объединить объединенный список результатов из функции OR-MERGE с "он", используя функцию объединения AND-MERGE.
Результат шага 3 затем возвращается как результат указанного запроса.
Как вы думаете, гуру? Что быстрее? Есть идеи получше?
Спасибо всем заранее.