[英]Lucene.NET 4.8 search not returning results
从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','Tafel','tafel','afel','afe'等。最后一个术语应该部分击中所有3个领域,而第一个是完全匹配多个领域。
我也尝试将parser.Parse(searchTerm)位改为包含通配符(“ ”+ searchTerm +“ ”),但没有任何改变。
我在这里显然遗漏了一些东西,为什么搜索被破坏了?
您需要适当地配置字段,选择正确的分析器进行索引和搜索,并使用正确的查询语法。
文档StringField
实例是一些关键字,它们不被分析,它们按原样索引(在它的原始情况下)。 但是StandardAnalyzer
将小写过滤器应用于查询。 您可以通过将KeywordAnalyzer
与查询解析器一起使用来解决此问题。 如果需要分析字段(例如产品说明),您可以使用TextField
。 最后,为了匹配部分术语,您需要使用通配符( *
或?
)。
有关更多信息,请检查
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.