【问题标题】:Is it possible to return all results from Solr if the user query contains only stopwords?如果用户查询仅包含停用词,是否可以从 Solr 返回所有结果?
【发布时间】:2012-11-02 10:31:30
【问题描述】:

如果用户查询仅包含停用词,我希望 Solr 返回所有结果,例如q=the,(默认情况下 Solr 返回 0 个结果)。 Solr 配置中是否有我可以打开的标志, 或任何我可以用来实现此目的的 Solr 查询语法构造?

我真的不喜欢在客户端复制停用词逻辑并在所有术语都是停用词时触发 q=*:* 的想法。

【问题讨论】:

  • 您是否使用任何停止过滤器或分析器来停止过滤器?如果您使用任何停用词,如果您能提供一些有关您的配置的详细信息会更好
  • 请多解释一下你的动机。用户希望在没有明确要求的情况下从搜索中返回所有文档的情况可能并不常见。

标签: solr stop-words solr-query-syntax


【解决方案1】:

查看Edismax Query parser,如果查询包含所有停用词,它会处理不同的查询。

包括高级停用词处理:在 查询的强制性部分,但仍在附近使用 助推部分。如果查询包含所有停用词,例如“to be or not to be”,那么所有单词都是必需的

即使它不能作为所有 (*:*) 结果查询,但肯定会匹配大多数结果。

【讨论】:

  • 如果短语中只有停用词,你能写一个 edismax 的查询来解释停用词搜索吗?
【解决方案2】:

解决这个问题的一个hacky方法是设置q=*:* AND _query_:"{! var=$userq}",并将用户查询发送到userq URL参数而不是q。

这明确地将结果设置为所有文档和用户查询的交集(如果您不熟悉_query_:"{!...}" 语法,请参阅http://wiki.apache.org/solr/LocalParams)。

注意,与单独的用户查询相比,这将返回不同的分数,但顺序相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多