我为 Lucene.Net 4.8 编写了一个自定义
Analyzer
。我发现显式设置的查询失败,但解析的查询成功,因为 - 看起来 - 解析的查询也受到索引文档的同一分析器的影响。
考虑一个索引,其中一个文档在字段名称
awesome
中包含单词 text
。
我使用自定义分析器添加此内容,并且令牌过滤器(Porter Stemmer)实际上将其索引为
awesom
因此,这无法返回任何内容。
var query = new TermQuery(new Term("text", "awesome"));
但是,这会返回文档:
var parser = new QueryParser(MY_VERSION, "text", new MyCustomAnalzyer());
var query = parser.Parse("awesome");
由于解析是使用我的分析器创建的,我假设我的分析器also词干
awesome
到awesom
。
我也尝试过使用术语
cat
。在这种情况下,两个版本都会成功,因为 cat
根本没有词干,因此查询与索引匹配。
解析后的版本似乎通过与文档所经过的同一分析器发送文本。但是,当我显式执行查询时,它不使用分析器。
我在v3中似乎没有这个问题。我究竟做错了什么?如何使我的显式查询遵循与索引器使用的相同分析器?设置查询时是否需要通过分析器手动发送它们?
为什么 Lucene.NET 在查询时不使用分析器?
当您使用查询解析器或查询构建器
时会发生这种情况我在v3中似乎没有这个问题。我做错了什么?
这可能不是真的。它在 v3 中的工作方式与 v4.8 相同。
如何使我的显式查询尊重与 索引器用途?
你必须使用QueryBuilder
设置时是否需要通过分析仪手动发送它们 查询?
显然,是的。否则你会像你描述的那样一团糟。