2010-10-29 4 views
3

Я пробовал это сам в течение значительного периода времени и смотрел повсюду вокруг сети, но не смог найти ЛЮБЫЕ примеры поиска нечетких фраз с помощью Lucene.NET 2.9.2. (C#)Lucene.net Fuzzy Phrase Search

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

+0

http://stackoverflow.com/questions/2631206/lucene-query-bla-match-words-that-start-with-something-fuzzy-how –

+0

да понравится какой-то код или что-то еще, связанное с нечеткой фразой, поиск в Lucene 2.9.2 – Tom

ответ

2

Я предполагаю, что у вас работает 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 сделать нечеткий поиск всех слов в строку запроса:

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