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