Для этого не нужно использовать два поля, одного будет достаточно. Поле имеет два «значения», одно сохраненное, которое можно получить с помощью Document.Get(...)
, и одно индексированное, которое используется для поиска. Технически также не требуется хранить значения, обычное решение - хранить идентификатор, который используется для поиска исходного содержимого в базе данных. Это также позволит вам найти дополнительную информацию, такую как информация об авторе и местонахождение документа.
Lucene.Net поможет в этом случае, но он требует, чтобы вы сами написали инфраструктуру. Вам необходимо позаботиться о настройке анализаторов (обычно ничего не настраивать) и проиндексировать содержимое. Как упомянуто в комментарии, вы можете использовать функцию полнотекстового поиска SQL Server, но сама она имеет некоторые ограничения (которые могут вас не затронуть).
Одна большая проблема, с которой я столкнулся при использовании FTS в SQL Server, но работает в Lucene.Net (это не совсем справедливо, поскольку вы можете делать почти все в Lucene.Net, поскольку вы пишете код, который это делает), это чувствительность к акценту , Я не смог настроить его, используя правила шведского языка, где åäö
следует рассматривать как реальные символы. Включение чувствительности к акценту сделало бы это, но это также означало бы, что диакритические знаки анализируются как реальные символы, что означает, что ñ
отличается от n
. (Представьте, что вы ищете «халапеньо» и не получаете совпадений с «халапеньо»). Отключение чувствительности к акценту в основном удаляет все диакритические знаки, превращая åäö
в aao
, и слова оказываются совершенно разными.
Запись вещей в Lucene.Net (по сравнению с SQL Server FTS) позволяет вам выделить результаты (представить, какие фразы в документе соответствуют запросу), выполнить поиск похожих документов, проверку орфографии, повышение пользовательских результатов, фасеты, и другие вещи, которые улучшат возможности поиска ваших пользователей.