Статьи и советы по внедрению формы полнотекстового поиска - PullRequest
4 голосов
/ 28 октября 2009

Мне нужно создать полнотекстовую форму поиска для базы данных электронных писем / заявок в службу поддержки (в C #), и я ищу советы и статьи о том, как подойти к этому. В частности, я хотел бы знать, как подойти к классическим задачам полнотекстового поиска, например:

  • Убедиться, что совпадения имеют смысл, например, если кто-то входит в "большую голову" и документ содержит "большую волосатую голову", убедившись, что документ возвращается в поиске.
  • Сортировка результатов по релевантности.
  • Как ставки отображают совпадения, например, выделяя совпадающие термины

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

Ранее я использовал такие вещи, как Lucene.Net - очевидно, понадобится какой-нибудь полнотекстовый индекс - сложным моментом является получение списка документов, которые возвращает Lucene, и представление его в полезной форме.

ОБНОВЛЕНИЕ: Я хочу немного уточнить, что я имею в виду - существуют сотни общих полнотекстовых форм поиска, которые все выполняют очень похожую функцию, например:

  • Кнопка поиска на каждом интернет-форуме
  • Кнопка поиска на каждой вики
  • Windows / Google Desktop поиск
  • Google

Каждый из этих поисков берет информацию из разных источников и отображает ее, используя разные средства (html, Windows-форму и т. Д.), Но каждый из них решает одни и те же проблемы различными способами и по большей части (с возможное исключение поиска на рабочем столе) входные данные имеют одинаковый формат: HTML или текст.

Я ищу советы и общие стратегии о том, как выполнять ранжирование результатов поиска способами, которые могут быть полезны для пользователя.

В качестве альтернативы одной из стратегий, которую я рассмотрел, было сделать что-то вроде использования некоторого программного обеспечения вики, экспортировать весь мой набор данных в виде текста в эту вики и просто использовать вики для поиска - вид поиска, который я ищу, для всех целей и цели функционально идентичны 99% поисковых запросов, которые уже существуют, я просто хочу дать ему другой источник входных данных и отформатировать выходные данные немного по-другому (оба из которых я уже знаю, как это сделать).

Наверняка, должен быть какой-то совет о том, как выполняются подобные поиски?

Ответы [ 5 ]

2 голосов
/ 28 октября 2009

SQL Server (включая версии Express) имеют возможность полнотекстового поиска . Это может искать текст в столбцах, но может также использовать IFilters для поиска во встроенных документах. Вы можете использовать команду FREETEXTTABLE в T-SQL для интеллектуального поиска в содержимом и возврата его в порядке ранжирования:

"Возвращает таблицу с нулем, единицей или несколькими строки для этих столбцов, содержащие символьные типы данных для значений что соответствует смыслу, но не точная формулировка текста в указанная строка freetext_string. На FREETEXTTABLE можно ссылаться только в предложении FROM оператора SELECT оператор как обычное имя таблицы.

Запросы с использованием FREETEXTTABLE указывают полнотекстовые запросы типа freetext, которые вернуть значение рейтинга релевантности (RANK) и полнотекстовый ключ (KEY) для каждый ряд. "

например.

SELECT FT_TBL.CategoryName 
    ,FT_TBL.Description
    ,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL 
    INNER JOIN FREETEXTTABLE(dbo.Categories, Description, 
        'sweetest candy bread and dry meat') AS KEY_TBL
        ON FT_TBL.CategoryID = KEY_TBL.[KEY];

Для получения дополнительной информации прочитайте Общие сведения о полнотекстовой индексации SQL Server .

2 голосов
/ 28 октября 2009

Вы можете использовать отличную библиотеку от apache Lucene.Net , а также Linq to Lucene расширения могут упростить вашу работу

0 голосов
/ 28 октября 2009

Если вы не хотите переходить к корню SQL, подумайте также о Microsoft Search Server 2008 Express - это бесплатный, мощный и простой в использовании инструмент. Он соответствует всем вашим требованиям и автоматически обрабатывает такие вещи, как ранжирование и т.д.

0 голосов
/ 28 октября 2009

Обратите также внимание на CONTAINSTABLE, так как он поддерживает символы подстановки, взвешивание и т. Д. *

http://msdn.microsoft.com/en-us/library/ms189760.aspx

0 голосов
/ 28 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...