9

我正在使用 Porter Stemmer 来阻止单词,这是我遇到的一个问题:

单词“mortgage”正确地词根为“mortgag” 词“mortgagee”(可以说是错误地)词根为“mortgage”

大约有 100 个文档带有“mortgage”一词 有 1 个文档带有“mortgagee”一词

当我在没有将“mortgagee”放入任何文档的情况下构建索引时,一切正常:搜索“mortgage”或“mortgages”或“mortgag”会返回所有 100 个文档。

当我建立一个索引并且其中一个文档包含“mortgagee”时,在索引中搜索“mortgagee”只会返回一个带有“mortgagee”的文档(它被归结为“mortgagee”)。但是,搜索“mortgag”或“mortgages”会返回所有 100 个文档。

我可以从这个问题中得出的唯一合乎逻辑的结论是 lucene 首先搜索词干词,如果没有找到任何结果,它会继续搜索词干词。因此,在搜索“mortgage”时,它首先找到源自“mortgagee”的“mortgage”并停止搜索。这是正确的行为,还是错误?

4

1 回答 1

1

这对我来说听起来像是一个错误。Lucene 搜索的指导原则说:“使用与索引相同的分析器进行搜索,除非你有充分的理由不这样做”。在分析和词干提取之后,Lucene 应该返回它所拥有的搜索词的匹配项。

在您的情况下,“抵押”在索引期间被转换为“抵押”。检索过程应该反映这一点,并将“mortgage”转换为“mortgag”,然后找到“mortgag”(代表“mortgage”)的匹配项。

似乎在检索期间您没有阻止查询,这会导致错误的结果。如果这个答案不清楚,请编辑您的问题并添加几行代码来描述您如何创建索引以及如何搜索它。

于 2009-12-22T09:26:08.067 回答