1

我想弄清楚 lucene 的分析器是如何工作的?我的问题是 lucene 如何处理同义词?情况如下:我们有单个词和多个词

单:foo = bar 多词:foo bar = foobar

对于单个单词:

  • lucene 是否扩展索引记录?我猜如果一个查询有一个像“foo”这样的词,它也会在查询中添加“bar”。我不知道它是否发生在索引上?

对于多字:

  • lucene 是否同时扩展查询和索引?例如,如果我们有“foo bar”,它是否将 foobar 添加到索引/查询中?

我的第二个问题是:Lucene 使用令牌流并将它们提供给小写过滤器等过滤器。我的问题是 lucene 如何找到多个单词?就像它是如何发现“foo bar”是一个多词在一起的?

谢谢

4

1 回答 1

3

SynonymFilter可以选择保留原始单词,并将同义词也添加到令牌流中,方法是设置keepOrig=true(请参阅SynonymMap.Builder.add())。此行为可能会导致 PhraseQueries 等出现问题,请参阅文档上的第一个注释。SynonymFilter

如果您使用相同Analyzer的查询和索引,那么写入索引的查询和文档当然会以相同的方式处理。 SynonymFilterwith keepOrigset to true 是少数Analyzers在查询和索引之间经常不协调地应用的少数几个之一,但这完全取决于您的实现。

至于它是如何实现的,源代码可供您使用。

于 2013-06-24T19:28:29.740 回答