如果用户查询仅包含停用词,我希望 Solr 返回所有结果,例如 q=the,(默认情况下 Solr 返回 0 个结果)。我可以打开 Solr 配置中的任何标志,或者我可以使用任何 Solr 查询语法构造来实现此目的吗?
我真的不喜欢在客户端复制停用词逻辑并q=*:*
在所有术语都是停用词时触发的想法。
如果用户查询仅包含停用词,我希望 Solr 返回所有结果,例如 q=the,(默认情况下 Solr 返回 0 个结果)。我可以打开 Solr 配置中的任何标志,或者我可以使用任何 Solr 查询语法构造来实现此目的吗?
我真的不喜欢在客户端复制停用词逻辑并q=*:*
在所有术语都是停用词时触发的想法。
查看Edismax 查询解析器,如果查询包含所有停用词,它会处理不同的查询。
包括高级停用词处理:查询的强制部分不需要停用词,但仍用于邻近提升部分。如果查询由所有停用词组成,例如“to be or not to be”,那么所有单词都是必需的
尽管它不能作为 all ( *:*
) 结果查询工作,但肯定会匹配大多数结果。
这个问题的一个 hacky 解决方案是设置q=*:* AND _query_:"{! var=$userq}"
,并将用户查询发送到userq
URL 参数而不是q
.
这明确地将结果设置为所有文档和用户查询的交集(如果您不熟悉_query_:"{!...}"
语法,请参阅http://wiki.apache.org/solr/LocalParams)。
请注意,与单独的用户查询相比,这将返回不同的分数,但顺序相同。