【发布时间】:2016-06-03 08:17:22
【问题描述】:
在构建 solr 文本查询时,我试图在后端完成两件事:添加误报和删除误报。
在词干提取的上下文中,补偿假否定意味着将字符串“children”添加到正在查找单词“child”的查询中,因为不规则复数的词干与单数形式的词干不匹配。
误报很难找到英文例子,但假设的例子是“recreation”这个词与“create”同一个词干。在这种情况下,我们仍然希望使用词干分析器,以便给出“娱乐”作为结果,但我们仍然希望阻止任何“创建”实例。
我最初尝试的解决方案是创建两个文本字段,一个带有词干分析器,另一个没有词干分析器。否则,这些字段将共享相同的标记器、规范器和其他属性。原因是因为如果我使用以下查询
text_en:(recreation -"create")
然后,如果“recreation”和“create”都被称为“creat”,那么 solr 似乎将其解释为“返回所有具有“creat”词干的文档,并且没有“creat”词干”,这将显然没有返回任何文件。
所以我尝试使用没有词干分析器的字段,并像这样结合词干提取字段
(text_en:recreation AND
text_en_norm:(-"create"))
其中 text_en_norm 是未提取的字段。两个字段的原始文本是相同的。但是,这似乎没有按预期工作。仍然返回单词“create”的实例。我的查询有问题还是我误解了更基本的东西?
【问题讨论】:
-
您是否尝试过使用不同的词干过滤器(也有一些基于字典的过滤器),或者将误报标记为关键字(不进行词干提取)。在一些案例中,我们不得不修改底层的 Snowball 词干分析器才能获得我们想要的结果。
-
我没有使用不同的词干过滤器,因为我正在寻找的解决方案必须应用于只有一个词干分析器选项工作相当糟糕的语言。我举了英文例子来表达这个问题。您将误报标记为关键字是什么意思?我相信这就是我在这里所做的。
-
@MatsLindh 我刚刚重读了这个问题(以及通知您的@评论约定)并且不得不问,当您说“修改底层雪球词干分析器”时,您是指修改 solr 源代码还是只是在配置中需要更改词干分析器?
-
嗯,不完全是 Solr 源 - 而是包含在 Lucene 源中的雪球词干分析器(所以是的,您必须获取源,进行修改并重新编译)。使用其他词干分析器会得到不同的结果,因此也值得探索。