Я пытаюсь попытаться сопоставить термин со списком продуктов в моей базе данных. Давайте начнем 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);
ли кто-нибудь порекомендовать другой анализатор, я могу использовать, или лучший способ справиться с этой поиск? В идеале, я хотел бы, чтобы это ускорило условия ближе к началу, поскольку хлам всегда будет следовать за продуктом, который я ищу (никогда раньше).