SQL с регулярными выражениями против индексов с логическими функциями объединения

StackOverflow https://stackoverflow.com/questions/2839385

Вопрос

Я пытаюсь разработать сложную текстовую поисковую систему. У меня тысячи текстовых страниц из многих книг. Мне нужно найти страницы, которые содержат указанные сложные логические критерии. Эти критерии могут содержать практически любой созваний следующего:

A: Полные слова.

B: Word Roots (полукарты для стеблей; то есть все слова с определенными ключевыми буквами).

C: Шаблоны слов (на некоторых языках корней заполнены в определенных шаблонах для формирования различной части речи, такие как адъюбители, прошлые / настоящие глаголы ...).

D: Логические соединения: и / или / XOR / NOT / IF / IFF и скобки для предварительных приоритетов.

Сейчас было бы быстрее иметь полный текст страниц в базе данных (не индексирован) и искать через них все использовать SQL и регулярные выражения?

Или это будет лучше построить индексы Word / Root / Teamplate-Page-Page-location Tebles. Следовательно, мы можем повысить поиск отдельных слов / корней / шаблонов. Тем не менее, он становится сложно, когда мы вводим логические соединения в наши вопросы. Я думал, что в таких случаях выполнял следующие шаги:

1: отдельно ищите каждое отдельные слова / корни / шаблоны в указанном запросе.

2: На основе приоритетных базах мы объединяем два списка результатов (с шага 1) за раз, посреднику, на логическом соединении.

Например, если мы ищем «он и (есть или был)»:

1: Мы будем искать «он», «IS», и «был« отдельно и получить списки результатов для каждого слова ».

2: Слияние списков результатов «IS» и «было», используя функцию объединения или слияния.

3: объединить объединенный список результатов из функции или Merge с одним из «он», используя функцию объединения и слияния.

Результат этапа 3 затем возвращается в результате указанного запроса.

Как вы думаете, побуждают? Что быстрее? Любые лучшие идеи?

Спасибо всем заранее.

Это было полезно?

Решение

Есть много неполных решений для этой проблемы. Я бы настоятельно рекомендую вам использовать один из тех, которые вместо того, чтобы развивать свои собственные.

Вы не говорите, какое решение базы данных вы используете. Если это Microsoft SQL Server, вы можете использовать его Полный текстовый поиск Особенности. Если это mysql, взгляните на его Функции полнотекстового поиска. Отказ Я уверен, что Oracle, DB2 и любые другие основные СУБД будут иметь аналогичную функциональность.

В качестве альтернативы, посмотрите на Apache's Луси для Ява или Луче для .NET.. Отказ Это позволит вам индексировать документы без необходимости использовать СУБД.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top