Lucene同义词过滤行为

时间:2013-06-24 19:04:53

标签: lucene synonym

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

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

单个单词:

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

对于多个单词:

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

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

感谢

1 个答案:

答案 0 :(得分:3)

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

如果您使用相同的Analyzer进行查询和索引,那么写入索引的查询和文档当然会以相同的方式处理。将SynonymFilter设置为true的keepOrig是在查询和索引之间经常应用的少数Analyzers之一,但这完全取决于您的实现。

就其实施方式而言,source code可供您使用。