Для текста переменной длины вы можете использовать DBmemo.
Большинство людей это делают сканированием "на лету" (когда оператор
постит запрос), но для реального ускорения процесса можно
попробовать способ пре-сканирования, который делают "большие
мальчики" (операторы больших баз данных):
- при внесении в базу данных новой записи она сканируется на
предмет определения ключевых слов (это может быть как
предопределенный список ключевых слов, так и всех слов, не
встречающиеся в стоп-листе [пример: "the", "of", "and"])
- ключевые слова вносятся в список ключевых слов со ссылкой на
номер записи, например, "hang",46 или "PC",22.
- когда пользователь делает запрос, мы извлекаем все записи, где
встречается каждое из ключевых слов, например, "hang" может
возвратить номера записей 11, 46 и 22, тогда как "PC" - записи с
номерами 91, 22 и 15.
- затем мы объединяем числа из всех списков c помощью
какого-либо логического оператора, например, результатом
приведенного выше примера может быть запись под номером 22 (в
случае логического оператора AND), или записи 11, 15, 22, 46 и 91
(в случае оператора OR). Затем извлекайте и выводите эти записи.
- для синонимов определите таблицу синонимов (например,
"hang","kaput"), и также производите поиск синонимов, добавляя их
к тому же списку как и оригинальное слово.
- слова, имеющие общие окончания (например, "hang" и "hanged"),
можно также сделать синонимами, или, как это делает большинство
систем, производить анализ окончаний слов, вычисляя корень по их
перекрытию (например, слову "hang" соответствует любое слово, чьи
первые 4 буквы равны "hang").
Конечно, есть множестно технических деталей, которые необходимо
учесть, например, организация списков, их эффективное управление и
объединение. Оптимизация этой характеристики может вам дать очень
быстрое время поиска (примером удачный реализаций могут служить
двигатели поиска Nexus, Lycos или WebCrawler, обрабатывающие сотни
тысяч записей в течение секунды).
|