java - 关于卢塞恩的问题

标签 java lucene

我正在使用 Lucene,并且对一些查询有一些疑问,这些查询给了我不同的结果。

这三个查询是:

Q1 =“Java 8 已验证兼容”

Q2 =“Java 8 未验证为兼容”

Q3 =“Java 8 未验证为兼容”

我试图理解为什么 Q1 和 Q2 的结果如此相似,但与 Q3 不同。

谁也能告诉我这是什么类型的信息检索问题吗?我知道这与自然语言、IR 索引和查询语言有关。

谢谢。

最佳答案

我猜您正在使用带有默认(英语)停止设置的 StandardAnalyzerEnglishAnalyzer

无论哪种方式,停用词都是这里要重点关注的事情。 “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/

相关文章:

java - 用 Java 实现 FSA/FSM 的最佳方法是什么

java - Java 中的 HashMap。 hash.containsKey 返回意外的值

java - 在 MMapDirectory 中找不到段* 文件

solr - 正向索引与反向索引为什么?

java - 需要帮助为返回 Flux 流作为输出的函数编写 junit 测试

java - JHipster Redis 集成元素未绑定(bind)错误

java - 是否有任何 JVM 的 JIT 编译器生成使用矢量化浮点指令的代码?

elasticsearch - Elastic Search 6.4 索引创建

lucene - 如何让Lucene匹配查询中的所有单词?

azure - Azure 搜索中的简单语法与完整 lucene 语法