2015-03-12 4 views
0

Я пытаюсь попытаться сопоставить термин со списком продуктов в моей базе данных. Давайте начнем Lucene с некоторыми простыми данными:Соответствующие данные с Lucene.net

//Table Products 
Glue 
Glue Sticks 
Crayons 
Markers 

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

Если я ищу Glue Sticks are the best type of Grapefruit, я хотел бы, чтобы он соответствовал Glue Sticks. Прямо сейчас, это соответствует Glue моим лучшим результатом. Вот мой код:

Индексация:

using (
    IndexWriter writer = new IndexWriter(FSDirectory.Open("index"), new CaseInsensitiveKeywordAnalyzer(), 
              true, IndexWriter.MaxFieldLength.LIMITED)) 
{ 
    foreach (var product in DB.Products.OrderBy(c => c.Id).AsEnumerable()) 
    { 
     var doc = new Document(); 
     doc.Add(new Field("Id", product.Id, Field.Store.YES, Field.Index.NOT_ANALYZED)); 
     doc.Add(new Field("Name", product.Name, Field.Store.YES, Field.Index.ANALYZED, 
           Field.TermVector.WITH_POSITIONS_OFFSETS)); 
     writer.AddDocument(doc); 
    } 
    writer.Optimize(); 
    writer.Commit(); 
} 

Поиски:

var qp = new QueryParser(Version.LUCENE_30, "Name", new SimpleAnalyzer()); 
var q = qp.Parse(productName); 
var hits = searcher.Search(q, 10); 

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

ответ

0

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

using (
    IndexWriter writer = new IndexWriter(FSDirectory.Open("index"), new SimpleAnalyzer(), 
             true, IndexWriter.MaxFieldLength.LIMITED)) 

С анализатором ключевых слов, у вас один термин в поле: glue sticks. Тогда ваш simpleAnalyzed запрос имеет следующие термины:

glue, sticks, are, the, best, type, of и grapefruit.

Ни один из них на самом деле не соответствует одному сроку: glue sticks.

Смежные вопросы