C# 将数据与Lucene.net进行匹配

C# 将数据与Lucene.net进行匹配,c#,lucene,lucene.net,C#,Lucene,Lucene.net,我正在尝试将一个术语与数据库中的产品列表相匹配。让我们从一些简单的数据开始lucene: //Table Products Glue Glue Sticks Crayons Markers 这里有一个棘手的部分:我试图匹配最佳结果,但可能涉及垃圾数据(后面的字符串)。让我举个例子: 如果我搜索胶棒是最好的葡萄柚类型,我希望它与胶棒匹配。现在,它正在匹配Glue作为我的最高结果。这是我的密码: 索引: using ( IndexWriter writer = new IndexWrite

我正在尝试将一个术语与数据库中的产品列表相匹配。让我们从一些简单的数据开始lucene:

//Table Products
Glue
Glue Sticks
Crayons
Markers
这里有一个棘手的部分:我试图匹配最佳结果,但可能涉及垃圾数据(后面的字符串)。让我举个例子:

如果我搜索
胶棒是最好的葡萄柚类型
,我希望它与
胶棒
匹配。现在,它正在匹配
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);

是否有人推荐我可以使用的其他分析器,或者更好的方法来处理此搜索?理想情况下,我希望它能让术语更接近开始,因为垃圾将始终跟随我正在寻找的产品(以前从未出现过)。

尝试在索引文档和搜索时使用
SimpleAnalyzer
。通常,在索引和查询时保持分析不变是一个好主意,直到您有充分的理由这样做

using (
    IndexWriter writer = new IndexWriter(FSDirectory.Open("index"), new SimpleAnalyzer(),
                                        true, IndexWriter.MaxFieldLength.LIMITED))
使用关键字分析器,字段中只有一个术语:
glue sticks
。然后,simpleAnalyzed查询具有以下术语:

胶水
最好的
类型
,以及
葡萄柚

没有一个是与单个术语相匹配的:
glue sticks