如何按全文字段字母顺序排序Manticore/Sphinx搜索结果?
实现Manticore按文本字段字典序排序的方法
你的问题核心在于:Manticore的rt_field是用于全文检索的字段,默认排序时会使用该字段的匹配权重值,而非原始字符串的字典序。要实现类似PostgreSQL/MySQL的文本列字母排序效果,需要通过**字符串属性(rt_attr_string)**来实现,具体步骤如下:
1. 修改索引配置
在原索引配置中添加rt_attr_string = title,将title同时定义为字符串属性(用于排序)和全文字段(用于检索)。修改后的配置如下:
index book_archive { type = rt path = /book_archive rt_field = title rt_field = author rt_attr_string = title # 添加这一行,将title设为字符串属性 charset_table = non_cjk, cjk stored_fields = title, author }
注意:如果是已创建的RT索引,无法直接修改配置文件添加属性,需要通过
ALTER TABLE语句动态添加:ALTER TABLE book_archive ADD COLUMN title string;执行后需要重新导入数据,或更新现有数据的title属性值。
2. 调整查询语句
查询时直接使用字符串属性title进行排序即可,此时排序逻辑会遵循原始字符串的字典序:
SELECT id, title FROM book_archive WHERE MATCH('(@title Test)') ORDER BY title DESC LIMIT 20;
补充说明
stored_fields仅用于存储字段原始内容供查询返回,不能用于字典序排序;只有rt_attr_string类型的属性才能支持字符串的字典序比较。- 如果需要对多个字段做字典序排序,同理为每个字段添加对应的
rt_attr_string配置即可。
内容的提问来源于stack exchange,提问作者tmello01
相关产品推荐
相关产品推荐

