【问题标题】:Lucene query does not search for word "an"Lucene 查询不搜索单词“an”
【发布时间】:2020-01-07 09:45:52
【问题描述】:

我编写了一个 lucene 搜索,用于搜索用户在实体的每个字段中输入的所有术语。这行得通,但现在我对“an”这个词有疑问。

具体来说,我想以任何顺序搜索单词"receptions de nouvel an",我的查询如下所示:

+description:*receptions* +description:*de* +description:*nouvel* +description:*an*

这没有给我任何结果,但我知道应该有 3 个结果。

  1. Réceptions de Nouvel An MDDI/PCH
  2. 2011 年新人招待会
  3. 2010 年新作招待会

当我在做这样的查询时

+description:*receptions* +description:*de* +description:*nouvel*

我得到了预期的结果。所以看来工作有问题"an".

有没有人告诉我这里出了什么问题以及为什么我的第一个查询不起作用? 提前致谢

【问题讨论】:

  • 感谢您的链接,但我认为这与我的问题无关。我的查询是正确的(在我看来),第二个查询有效(使用“an”)。如果我错了,请随时纠正我...
  • 字段description的字段类型定义如何?如果被标记,你应该尝试+description: receptions de nouvel an
  • 是的,当搜索整个短语时,您会得到预期的结果。但这是我的程序的搜索功能,因此也应该找到这些单词以任何其他顺序(或介于两者之间)的“描述”,这就是我必须以这种方式搜索它的原因。

标签: search lucene


【解决方案1】:

Standart Analyzer 默认使用 EnglishStopWords CharArraySet,其中还包括 "a,an,the" ex。如果您希望这些词被索引,那么您可以使用一些自定义 CharArraySet 或像在停止词中一样使用一些自定义的字符

analyzer = new StandardAnalyzer(CharArraySet.EMPTY_SET); 

【讨论】:

  • 谢谢!问题确实是“an”这个词被英语停用词转义了。似乎从版本 8.0.0 开始(我还没有使用)默认构造函数已切换,因此它不再使用英语停用词:issues.apache.org/jira/browse/LUCENE-7444
  • 是的。他们不是。但是如果你继续使用以前版本的 Lucene 只要创建你自己的 chararrayset 就可以了。但推荐总是核心 API 的最后一个版本。
猜你喜欢
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多