从sphinx MVA中选择单个值

从sphinx MVA中选择单个值,sphinx,Sphinx,出于索引器性能的原因,我目前使用Sphinx MVA(多值属性),每个MVA只有一个值。基本上,我使用MVA的方式与sql\u joined\u字段的方式相同(我不能使用sql\u joined\u字段,因为不能按连接值进行过滤) 我希望能够按照MVA的值进行排序。根据sphinx文档,您实际上不能这样做,但是,您可以按选定的派生值进行排序。(例如,MAX(price)作为排序字段或GROUP\u CONCAT(tag)作为排序字段) 有没有办法从MVA中选择一个值(或者可能连接MVA中的所有值

出于索引器性能的原因,我目前使用Sphinx MVA(多值属性),每个MVA只有一个值。基本上,我使用MVA的方式与
sql\u joined\u字段
的方式相同(我不能使用
sql\u joined\u字段
,因为不能按连接值进行过滤)

我希望能够按照MVA的值进行排序。根据sphinx文档,您实际上不能这样做,但是,您可以按选定的派生值进行排序。(例如,
MAX(price)作为排序字段
GROUP\u CONCAT(tag)作为排序字段


有没有办法从MVA中选择一个值(或者可能连接MVA中的所有值)?

您可以按MVA的

sphinxQL>select id,bucket_id from gi_stemmed order by bucket_id desc;
+---------+-----------+
| id      | bucket_id |
+---------+-----------+
| 4138739 | 492       |
| 4138708 | 492       |
| 4138671 | 492       |
| 4138663 | 492       |
| 4138661 | 492       |
| 4138615 | 492       |
bucket_id是MVA(出于与您类似的原因)


好的,当它出现时,您可以按MVA排序

sphinxQL>select id,bucket_id from gi_stemmed where match('bridge') order by bucket_id desc;
+---------+-----------+
| id      | bucket_id |
+---------+-----------+
| 4135611 | 492       |
| 4135609 | 492       |
| 4132078 | 492       |
| 4130626 | 492       |
| 4117904 | 492       |
| 4114632 | 490       |
| 4087884 | 490       |
| 4087786 | 490       |
| 4087767 | 490       |
| 4087010 | 490       |
| 4086927 | 490       |
| 4086920 | 490       |
| 4086125 | 490       |
| 4083465 | 761       |
| 4081812 | 491       |
| 4081713 | 490       |
| 4065533 | 490       |
| 4065427 | 490       |
| 4065338 | 490       |
| 4065321 | 490       |
+---------+-----------+

Server version: 2.2.1-dev (r4133)
没有错。它不完全起作用。有一些结果不符合顺序(请参见上面示例中的2/3rds down)

但是有一个
magest()
函数,它的工作原理与问题中的MAX类似

sphinxQL>select id,bucket_id,greatest(bucket_id) as two from gi_stemmed where match('bridge road') order by two desc;

根据文件,情况并非如此。。。“这对于实现文章标签、产品类别等非常有用。支持对MVA属性进行筛选和分组(但不支持排序)。”我猜文档一定是过时了。上面的示例来自一个实时服务器。我在“生产”中使用了这样的排序。嗯,这一直困扰着我,所以运行了更多的测试,虽然它看起来有效,但并不完全准确。有一些无序的结果。但有一个最伟大(或最不伟大)的函数应该可以工作:)添加了什么版本的best()?我试图在文档中找到它,但找不到。在2.0.4中,我找到了“解析错误:未知标识符'magest'(不是属性,不是函数)。。。版本2.2.1-beta中引入了best()最大值(attr_json.some_array)。第一个参数是json array,返回值是该数组中的最大值。同样适用于MVA。我怀疑我是否能够使用beta,因为这是用于产品站点的。
sphinxQL>select id,bucket_id,greatest(bucket_id) as two from gi_stemmed where match('bridge road') order by two desc;