SphinxQL 变量已弃用,替代查询?

SphinxQL Variables Deprecated, Alternate Query?

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

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

另一方面,如果出现某些其他词,我想在其中包含贬值怎么办。例如,假设我想降低其中包含单词 "apparel" 的结果的价值。可以在同一个查询中执行吗?

谢谢!

好吧,体重下降 'by default',所以就...

SELECT * FROM test1 WHERE MATCH('tennis') LIMIT 0,1000 OPTION ... 

但除此之外,只是@变量被'functions'取代,主要是因为它更多'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(), @countCOUNT(*), @distinctCOUNT(DISTINCT ...)@geodistGEODIST(...),而 @expr 确实没有一个等价的,要么直接使用表达式,要么使用您自己的自定义命名别名。


关于第二个问题。有点棘手,它们并不是真正的 'negative' 权重器。 Ther 是一个关键字 boost 运算符,但目前还不能使用它来专门贬值。

我认为可能让它起作用的唯一方法是,如果否定匹配针对特定字段,则可以构建复杂的排名表达式。基本上作为负权重,排名表达式需要一个特定的字段,因此可以使用 select 该列

... MATCH('@!(negative) tennis @negative apparel') 
... OPTION ranker=expr('SUM(word_count*IF(user_weight=99,-1,1))'), field_weights(negative=99)

这是用于说明目的的非常基本的演示表达式,真实的表达式可能要复杂得多。它只是显示使用 99 作为 'negative' 乘法的占位符。 需要创建新的 negative 字段,它可能只是其他字段的副本