0

我正在使用 Sphinx Search ( http://sphinxsearch.com/ )SphinxQL并需要按字符串属性进行排序:

我将属性配置为sql_attr_string = myattribute.

示例查询:SELECT * FROM myindex ORDER BY myattribute ASC;

我通过 order by 得到的订单myattribute ASC1a, 100b, 101c, 2a, 3a

我想要的顺序: 1a, 2a, 3a, 100b, 101c

有没有办法做到这一点?

4

1 回答 1

0

您可以做的是添加另一个包含字符串属性长度的属性,然后首先按长度 ASC 排序,然后按字符串 ASC 排序。这修复了您在问题中提供的示例中的顺序: mysql> select * from idx_min order by l asc, myattribute asc; +------+-------------+------+ | id | myattribute | l | +------+-------------+------+ | 1 | 1a | 2 | | 4 | 2a | 2 | | 5 | 3a | 2 | | 2 | 100b | 3 | | 3 | 101c | 3 | | 6 | a200 | 3 | | 7 | c345 | 3 | | 8 | a345-2 | 5 | +------+-------------+------+ 8 rows in set (0.00 sec)

但是,您可能希望在 1a 之前有 a200、c345、a345-2(来自您的评论)。然后我想你可以在 Sphinx / Manticoresearch 中做到这一点的唯一方法是使用 UDF(用户定义的函数)。您需要创建一个函数,它将您的字符串转换为一个数字,因为 az 应该具有高于 0-9 的值。然后您可以在查询中使用该函数的结果。像这样:

select *, natsort(myattribute) ns from idx_min order by ns asc;

于 2018-01-24T04:28:15.073 回答