Мне нужно создать полнотекстовую форму поиска для базы данных электронных писем / заявок в службу поддержки (в C #), и я ищу советы и статьи о том, как подойти к этому. В частности, я хотел бы знать, как подойти к классическим задачам полнотекстового поиска, например:
- Убедиться, что совпадения имеют смысл, например, если кто-то входит в "большую голову" и документ содержит "большую волосатую голову", убедившись, что документ возвращается в поиске.
- Сортировка результатов по релевантности.
- Как ставки отображают совпадения, например, выделяя совпадающие термины
Я знаю, что полнотекстовый поиск сам по себе является довольно гигантской предметной областью, я просто ищу простые статьи и советы о том, как создать что-то, что хотя бы немного полезно и пригодно для использования.
Ранее я использовал такие вещи, как Lucene.Net - очевидно, понадобится какой-нибудь полнотекстовый индекс - сложным моментом является получение списка документов, которые возвращает Lucene, и представление его в полезной форме.
ОБНОВЛЕНИЕ: Я хочу немного уточнить, что я имею в виду - существуют сотни общих полнотекстовых форм поиска, которые все выполняют очень похожую функцию, например:
- Кнопка поиска на каждом интернет-форуме
- Кнопка поиска на каждой вики
- Windows / Google Desktop поиск
- Google
Каждый из этих поисков берет информацию из разных источников и отображает ее, используя разные средства (html, Windows-форму и т. Д.), Но каждый из них решает одни и те же проблемы различными способами и по большей части (с возможное исключение поиска на рабочем столе) входные данные имеют одинаковый формат: HTML или текст.
Я ищу советы и общие стратегии о том, как выполнять ранжирование результатов поиска способами, которые могут быть полезны для пользователя.
В качестве альтернативы одной из стратегий, которую я рассмотрел, было сделать что-то вроде использования некоторого программного обеспечения вики, экспортировать весь мой набор данных в виде текста в эту вики и просто использовать вики для поиска - вид поиска, который я ищу, для всех целей и цели функционально идентичны 99% поисковых запросов, которые уже существуют, я просто хочу дать ему другой источник входных данных и отформатировать выходные данные немного по-другому (оба из которых я уже знаю, как это сделать).
Наверняка, должен быть какой-то совет о том, как выполняются подобные поиски?