我认为这是一个相当简单的SphinxQL查询,但事实证明@变量已被弃用(参见下面的示例)
SELECT *,@weight AS m FROM test1 WHERE MATCH('tennis') ORDER BY m DESC LIMIT 0,1000 OPTION ranker=bm25, max_matches=3000, field_weights=(title=10, content=5);
我觉得必须是一种按匹配强度对结果进行排序的方法。什么是替代品?
另一方面,如果出现某些其他词语,我想在其中加入贬值怎么办?例如,假设我想贬值其中包含“服装”一词的结果。可以在同一个查询中执行吗?
谢谢!
答案 0 :(得分:1)
结果显示,“默认情况下”的结果是“默认”,所以只需要...
SELECT * FROM test1 WHERE MATCH('tennis') LIMIT 0,1000 OPTION ...
但除此之外,只有@变量,被'函数'取代,主要是因为它更像'SQL like'。所以 @weight ,是WEIGHT()
SELECT * FROM test1 WHERE MATCH('tennis') ORDER BY WEIGHT() DESC ...
或
SELECT *,WEIGHT() AS m FROM test1 WHERE MATCH('tennis') ORDER BY m DESC ...
作为参考 @group 而不是GROUPBY()
, @count 是COUNT(*)
, @distinct 是{{ 1}}, @geodist 是COUNT(DISTINCT ...)
, @expr 并不是真的有同等效果,要么直接使用表达式,要么使用自己的自定义命名别名。
至于第二个问题。有点棘手,他们不是真正的'负面'加权者。 Ther是一个关键字提升运算符,但到目前为止还不能用它来专门贬值。
我能想到的唯一方法就是让它发挥作用,如果负面匹配是针对某一特定领域,可能会构建复杂的排名表现。基本上作为负权重,需要一个特定字段用于排名表达式,因此可以用来选择该列
GEODIST(...)
这是一个非常基本的演示表达式,用于说明目的,真正的一个可能会复杂得多。它只是显示使用99作为“负”乘法的占位符。
需要新的... MATCH('@!(negative) tennis @negative apparel')
... OPTION ranker=expr('SUM(word_count*IF(user_weight=99,-1,1))'), field_weights(negative=99)
字段创建,这可能只是其他字段的副本