gpt4 book ai didi

mysql - Sphinx:用多个索引近似字符串排序的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-29 05:00:57 24 4
gpt4 key购买 nike

我正在使用 Sphinx并想实现字符串排序。我知道这可以使用属性和 String Ordinals 来完成, 但是,我也想实现 Live Index Updates并且字符串序数不适用于多个索引。

用多个索引近似字符串排序的最佳方法是什么?我正在考虑从字符串的前几个字母生成一个整数,例如:

select concat(ord('t'),ord('e'),ord('s'));

将允许我将字符串“test”的前三个字符添加到一个整数属性(假设它将作为一个整数添加到 sphinx,即使它在 MySQL 中是一个字符串)。这会给我近似排序,这可能已经足够好了。

最佳答案

我最终创建了一个将字符串转换为序数的 MySQL 函数:

CREATE DEFINER=`root`@`localhost` 
FUNCTION `stringToOrd`(str varchar(100)) RETURNS int(11)
READS SQL DATA
DETERMINISTIC
SQL SECURITY INVOKER
BEGIN

DECLARE ordinal INT;
SELECT ((ORD(SUBSTRING(str,1,1)) * 16777216)
+ (ORD(SUBSTRING(str,2,1)) * 65536)
+ (ORD(SUBSTRING(str,3,1)) * 256) + (ORD(SUBSTRING(str,4,1))))
into ordinal;
return ordinal;
END

该函数只使用字符串的前四个字符,因此排序是近似的。此函数在 sphinx 索引查询期间调用(在 sphinx 配置文件中)。然后在 sphinx 搜索调用期间使用该属性进行排序。

这已经在生产环境中成功运行了 6 个多月。

关于mysql - Sphinx:用多个索引近似字符串排序的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/631729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com