Lucene.NET 4.8搜索未返回结果

时间:2018-02-20 18:13:25

标签: c# .net lucene.net

从Lucene 3.X升级到4.8之后,必须重新编写一些内容才能使所有内容再次运行。

我已尝试过多个完整的解决方案(根据我们的情况调整)来自不同的教程,以及许多不同的调整和测试,但我无法找到下面代码的实际问题。

从代码开始

在将字段从泛型类型更改为特定字符串类型后,将字段添加到文档的代码现在如下所示

Document document = new Document
{
    new StringField("productName", product.Name, Field.Store.YES),
    new StringField("productDescription", product.Description, Field.Store.YES),
    new StringField("productCategory", product.Category, Field.Store.YES)
};

代码的搜索部分如下所示:

Analyzer analyzer = new StandardAnalyzer(Version);
IndexReader reader = DirectoryReader.Open(indexDirectory);
IndexSearcher searcher = new IndexSearcher(reader);
MultiFieldQueryParser parser = new MultiFieldQueryParser(Version,
    new[] { "productName", "productCategory", "productDescription" },
    analyzer,
    new Dictionary<string, float> {
        { "productName", 20 },
        { "productCategory", 5 },
        { "productDescription", 1 }
    }
); 

ScoreDoc[] hits = searcher.Search(parser.Parse(searchTerm))?.ScoreDocs;

问题

当只使用通配符搜索时,搜索会正确返回所有内容,因此索引部分似乎工作正常。 但是,如果我尝试使用任何搜索词找到以下产品,则根本找不到任何内容。

示例产品信息

  • 姓名:Tafelrok
  • 描述:Tafelrok
  • 类别:Tafels&amp; Stoelen

我试过'Tafelrok','tafelrok','Tafel','tafel','afel','afe'等。最后一个术语应该部分击中所有3个领域,而第一个是完全匹配反对多个领域。

我也尝试将parser.Parse(searchTerm)位更改为包含通配符(“”+ searchTerm +“”),但没有任何更改。

我在这里显然遗漏了一些东西,为什么搜索被破坏了?

1 个答案:

答案 0 :(得分:2)

您需要正确配置字段,选择正确的分析器进行索引和搜索,并使用正确的查询语法。

文档StringField实例是一种关键字,它们不被分析,它们按原样索引(在它的原始情况下)。但StandardAnalyzer将小写过滤器应用于查询。您可以使用KeywordAnalyzer和查询解析器来解决此问题。如果需要分析字段(例如产品说明),您可以使用TextField。最后,为了匹配部分字词,您需要使用通配符(*?)。

有关详细信息,请查看: