为什么Lucene.NET在查询时不使用分析器?

问题描述 投票:0回答:1

我为 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 lucene.net
1个回答
0
投票

为什么 Lucene.NET 在查询时不使用分析器?

当您使用查询解析器或查询构建器

时会发生这种情况

我在v3中似乎没有这个问题。我做错了什么?

这可能不是真的。它在 v3 中的工作方式与 v4.8 相同。

如何使我的显式查询尊重与 索引器用途?

你必须使用QueryBuilder

设置时是否需要通过分析仪手动发送它们 查询?

显然,是的。否则你会像你描述的那样一团糟。

© www.soinside.com 2019 - 2024. All rights reserved.