我正在使用 Lucene,并且对一些查询有一些疑问,这些查询给了我不同的结果。
这三个查询是:
Q1 =“Java 8 已验证兼容”
Q2 =“Java 8 未验证为兼容”
Q3 =“Java 8 未验证为兼容”
我试图理解为什么 Q1 和 Q2 的结果如此相似,但与 Q3 不同。
谁也能告诉我这是什么类型的信息检索问题吗?我知道这与自然语言、IR 索引和查询语言有关。
谢谢。
最佳答案
我猜您正在使用带有默认(英语)停止设置的 StandardAnalyzer
或 EnglishAnalyzer
。
无论哪种方式,停用词都是这里要重点关注的事情。 “is”、“not”、“to”、“be”、“as”和“a”都是停用词,因此会被有效地从索引中消除。
虽然它们不再可搜索,但删除的停用词确实会留下位置增量,因此分析后的表示实际上会类似于
Q1 =“Java 8 _ 已验证 _ _ 兼容”
Q2 =“Java 8 _ 已验证 _ _ 兼容”
Q3 =“Java 8 _ 已验证 _ 兼容”
其中 _ 代表一些被删除的、不可搜索的停用词。因此,根据该表示,经过分析,Q1 和 Q2 实际上是相同的查询。不过,Q3 的位置增量少了一个,这意味着它期望在“verified”和“兼容”之间出现的单词(或标记)少一个。
关于java - 关于卢塞恩的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29988520/