Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 斯芬克斯与吉德_Mysql_Full Text Search_Sphinx - Fatal编程技术网

Mysql 斯芬克斯与吉德

Mysql 斯芬克斯与吉德,mysql,full-text-search,sphinx,Mysql,Full Text Search,Sphinx,我们有一个数据库,我们想索引与斯芬克斯搜索引擎。问题是Sphinx要求每个文档都有整数ID,但我们的数据库实际上有GUID,即类似GUID的随机字符串作为主键。我可以动态生成合成ID,但它只适用于完整索引。如果我想要增量索引或运行时索引呢?使用Sphinx处理guid时,有哪些最佳实践可以处理增量索引和运行时索引?所涉及的数据库将相当大,因此我不想频繁地对它们重新编制索引 实时索引:您可以将非数字GUID转换为数字值。您可以使用crc32或md5转换为如下数字: mysql> select

我们有一个数据库,我们想索引与斯芬克斯搜索引擎。问题是Sphinx要求每个文档都有整数ID,但我们的数据库实际上有GUID,即类似GUID的随机字符串作为主键。我可以动态生成合成ID,但它只适用于完整索引。如果我想要增量索引或运行时索引呢?使用Sphinx处理guid时,有哪些最佳实践可以处理增量索引和运行时索引?所涉及的数据库将相当大,因此我不想频繁地对它们重新编制索引

实时索引:您可以将非数字GUID转换为数字值。您可以使用crc32或md5转换为如下数字:

mysql> select conv(mid(md5('abc'), 1, 16), 16, 10);
+--------------------------------------+
| conv(mid(md5('abc'), 1, 16), 16, 10) |
+--------------------------------------+
| 10376663631224000432                 | 
+--------------------------------------+
1 row in set (0.00 sec)
测试或谷歌找出哪种算法可以减少冲突

一旦您有了数字ID,您就可以将文档插入Sphinx RT索引

增量索引:您可以使用上述相同的方法将GUID转换为数字,但您必须记住索引的主要部分在何处完成以构建增量。如果表中有一些已更新或插入的字段,则可以轻松地执行此操作。sql\u查询\u范围将是smth,如select。。。在更新的位置>选择从sphinx\u助手更新的最后一个\u。在这种情况下,您不能基于ID,因为它们不是顺序的

我已经在1180万个不同的域上测试了md5 algo的一半:

mysql> update domain_tmp set hash = conv(mid(md5(domain), 1, 16), 16, 10);
Query OK, 5901483 rows affected (1 min 59.03 sec)
Rows matched: 11800403  Changed: 5901483  Warnings: 0

mysql> select count(*) from domain_tmp;
+----------+
| count(*) |
+----------+
| 11800403 | 
+----------+
1 row in set (16.30 sec)

mysql> select count(distinct hash) from domain_tmp;
+----------------------+
| count(distinct hash) |
+----------------------+
|             11800403 | 
+----------------------+
1 row in set (1 min 5.51 sec)

i、 e.没有发生碰撞。因此,如果您的数据集中没有太多文档,那么可以使用md5的一半。

我无法真正更改所有的表结构DB有50多个表,这些表结构由类似ORM的系统生成,以生成新ID。我可能会使用md5方法。。。但我担心冲突。您不需要更改表结构,您可以在通过Sphinx indexer进行选择时动态生成新ID。至于碰撞-md5的一半看起来很好,我已经在1180万个不同的域上进行了测试-没有任何碰撞。