Lucene同义词过滤器行为

Lucene同义词过滤器行为,lucene,synonym,Lucene,Synonym,我想弄清楚lucene的分析仪是怎么工作的? 我的问题是lucene如何处理同义词?情况如下: 我们有单字和多字 单曲:foo=bar 多词:foobar=foobar 对于单个单词: lucene是否扩展索引记录?我猜如果一个查询有一个像“foo”这样的词,它也会在查询中添加“bar”。我不知道它是否发生在索引中 对于多个单词: lucene是否同时扩展了查询和索引?例如,如果我们有“foobar”,它是否会将foobar添加到索引/查询中 我的第二个问题是:Lucene使用令牌流,并

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

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

对于单个单词:

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

  • lucene是否同时扩展了查询和索引?例如,如果我们有“foobar”,它是否会将foobar添加到索引/查询中
我的第二个问题是:Lucene使用令牌流,并将它们提供给类似小写筛选器的筛选器。我的问题是lucene是如何找到这些单词的?比如,它是如何发现“foobar”是一个多词组合在一起的呢

Thank

通过设置
keepOrig
=true,您可以选择保留原始单词,并将同义词添加到令牌流中(请参阅)。此行为可能会导致短语查询等问题,请参见
同义词过滤器
文档中的第一个注释

如果您使用相同的
Analyzer
进行查询和索引,那么查询和写入索引的文档当然会以相同的方式处理<将
keepOrig
设置为true的code>SynonymFilter是为数不多的
分析器之一,通常在查询和索引之间不协调地应用,但这完全取决于您的实现


至于如何实现,您可以使用。

它如何处理多同义词?比如“纽约”=“纽约”沃尔玛=沃尔玛=沃尔玛,因为它会一个令牌一个令牌地进行过滤。我不知道它是如何发现多词同义词的,您对它的行为感到困惑,还是想知道实现如何处理令牌流?如果是后者,那就是我提供源代码链接的原因。如果前者,它贪婪地从给定位置搜索它能找到的最长匹配项(也就是说,如果你有规则
foo
->
bar
foobar
foobar
,那么
foobar
将变成
foobar
,而不是
bar
)。我认为它不支持类似于
wal-mart=wal-mart=walmart
(同义词规则有一个输入和一个输出)。如果你有什么特别的问题想问,那就说吧。我的问题是它是如何处理代币流的?因为我猜同义词过滤器会一个接一个地获取标记,并且它是无状态的。例如,如果当前令牌是“New”,它如何检查下一个令牌以查看它是否是“York”?很好,如果您想知道它如何实现的实现细节,我阅读了代码。我不知道它到底做什么。(我不熟悉lucene及其结构。)例如,我不知道lucene是否像其他过滤器一样使用同义词过滤器?就在我们说StopFilter之后?