SphinxQL变量已弃用,备用查询?

时间:2017-07-13 20:42:20

标签: sphinx sphinxql

我认为这是一个相当简单的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);

我觉得必须是一种按匹配强度对结果进行排序的方法。什么是替代品?

另一方面,如果出现某些其他词语,我想在其中加入贬值怎么办?例如,假设我想贬值其中包含“服装”一词的结果。可以在同一个查询中执行吗?

谢谢!

1 个答案:

答案 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) 字段创建,这可能只是其他字段的副本