【问题标题】:Consider phrases with more than one word in stopwords.txt考虑 stopwords.txt 中包含多个单词的短语
【发布时间】:2015-03-04 16:06:35
【问题描述】:

我配置了一个 stopwords.txt,它工作正常。

问题是当我想搜索一个只为 stopwords.txt 中包含的单词组成的短语时。 Solr 没有返回结果。 例如,在 stopwords.txt 我有这样的话:

other
the
cat

当我搜索:cat 时,Solr 会省略结果,thecat 也是如此。没关系。

但是当我搜索:the cat 时,Solr 也在做同样的事情,省略了结果,而这正是我想要避免的。我希望所有包含的东西都被退回。

提前致谢

PS:这是我的配置行

<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 

【问题讨论】:

    标签: apache solr filter


    【解决方案1】:

    StopFilterFactory 评估每个标记,并确定该标记是否与停用词之一完全匹配。要在搜索中保留短语“the cat”,您需要确保它没有被标记为“the”和“cat”,并且有多种方法可以做到这一点。

    我建议的方法是在您的分析中使用SynonymFilterFactoryStopFilterFactory 之前修改短语:

    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
                                                ignoreCase="true" expand="false"/>
    

    synonyms.txt 中定义的规则可以作用于多个标记是序列。比如这条规则出现在synonyms.txt

    the cat => thecat
    

    那么双标记序列“the cat”将被单标记“thecat”替换。因为“thecat”不是您的停用词之一,StopFilterFactory 不会对其采取行动。

    如果您采用这种方法,那么在您的索引和查询分析中应用此过滤器(如果它们首先不同)非常重要。这样,包含“the cat”的文档将在索引中包含“thecat”,搜索“the cat”的用户将在其应用查询中包含“thecat”。

    【讨论】:

    • 我认为这并不能解决我的问题,因为我有大量停用词,我无法在 synonyms.txt 中对所有这些词进行组合,不是吗?
    • 这取决于你需要做什么。您有大量停用词列表,但您的例外列表(例如“猫”)是否也很大?您的 synonyms.txt 文件可能相当大,但在某些时候它可能会开始变得低效。如果您希望允许过滤停用词时有足够多的例外情况,您是否需要首先将它们包含在stopwords.txt 中?
    • 例如,如果您想屏蔽“the”或“cat”而不屏蔽“the cat”,是因为“the cat”这个短语在您的记录中很重要,或者因为您不屏蔽想要屏蔽连续的停用词?
    • 这是因为我一般不想屏蔽连续的停用词!
    • 我不认为你可以用StopFilterFactory 做到这一点。人们通常只在他们有理由相信这些词在搜索中永远不重要时才使用停用词。 the 是常见的停用词,但 cat 通常不是。如果您的停用词过滤的目的是让结果仅匹配查询的一部分,您可以尝试查看 Dismax 和 Extended Dismax 查询处理程序的 mm 参数。例如,查询参数mm=2&lt;80% 告诉 Solr,两个查询词或 80% 的词(以较大者为准)必须匹配才能计算记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多