Lucene.net Поиск нечетких фраз - PullRequest
       33

Lucene.net Поиск нечетких фраз

3 голосов
/ 29 октября 2010

Я пробовал это сам в течение значительного периода и искал повсюду в сети - но не смог найти ЛЮБЫХ примеров поиска нечетких фраз через Lucene.NET 2.9.2.(C #)

Может ли кто-нибудь посоветовать, как сделать это подробно, и / или предоставить пример кода - я бы серьезно всерьез оценил бы любую помощь, поскольку я полностью застрял?

1 Ответ

2 голосов
/ 19 февраля 2013

Я предполагаю, что у вас работает Lucene и создан поисковый индекс с некоторыми полями в нем. Итак, давайте предположим, что:

var fields = ... // a string[] of the field names you wish to search in
var version = Version.LUCENE_29; // your Lucene version
var queryString = "some string to search for";

Получив все это, вы можете задать поисковый запрос для нескольких полей, например:

var analyzer = LuceneIndexProvider.CreateAnalyzer();
var query = new MultiFieldQueryParser(version, fields, analyzer).Parse(queryString);

Может быть, вы уже зашли так далеко и пропустили только нечеткую часть. Я просто добавляю тильду ~ к каждому слову в queryString, чтобы сказать Lucene нечеткий поиск всех слов в queryString:

if (fuzzy && !string.IsNullOrEmpty(queryString)) {
    // first escape the queryString so that e.g. ~ will be escaped
    queryString = QueryParser.Escape(queryString);
    // now split, add ~ and join the queryString back together
    queryString = string.Join("~ ",
        queryString.Split(' ', StringSplitOptions.RemoveEmptyEntries)) + "~";
    // now queryString will be "some~ string~ to~ search~ for~"
}

Ключевым моментом здесь является то, что Lucene использует нечеткий поиск только для терминов, которые заканчиваются на ~. Это и некоторая полезная информация была найдена на http://scatteredcode.wordpress.com/2011/05/26/performing-a-fuzzy-search-with-multiple-terms-through-multiple-lucene-net-document-fields/.

...