【发布时间】:2013-02-21 03:43:21
【问题描述】:
我正在尝试在 SOLR 3.5.0 中设置提升处理程序,并且我需要以下等效于 dismax 格式的查询,它根据匹配类型在同一字段上定义不同的提升值(精确匹配得到 200,而通配符匹配得到 100)。
q=name:(foo*^100.0 OR foo^200.0)
【问题讨论】:
我正在尝试在 SOLR 3.5.0 中设置提升处理程序,并且我需要以下等效于 dismax 格式的查询,它根据匹配类型在同一字段上定义不同的提升值(精确匹配得到 200,而通配符匹配得到 100)。
q=name:(foo*^100.0 OR foo^200.0)
【问题讨论】:
这是解决此问题的一种方法。
保留一个仅包含 WhiteSpaceTokenizer 的文本字段(可能还有 LowerCaseFilter,具体取决于您区分大小写的需要)。使用此字段进行完全匹配。我们称这个字段为name_ws。
不要在 name_ws 上使用通配符查询,而是在分析器链中使用带有 EdgeNGramTokenizer 的文本类型 copy field,这将输出如下标记:
food -> f, fo, foo, food
我们称这个字段为name_edge。
然后你可以发出这个 dismax 查询:
q=foo&defType=dismax&qf=name_ws^200+name_edge^100
(添加debugQuery=on 以验证评分是否按您想要的方式进行。)
【讨论】: