gpt4 book ai didi

mysql - 简单的 Sphinx 和 mySQL 查询

转载 作者:行者123 更新时间:2023-11-29 06:00:54 25 4
gpt4 key购买 nike

请原谅我问了一个简单的问题,但我对 Sphinx 完全陌生。

我正在使用带有 mySQL 数据存储的 Sphinx。表格如下所示,标题和内容字段由 Sphinx 索引。

CREATE TABLE `documents` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`group_id` int(11) NOT NULL,
`group_id2` int(11) NOT NULL,
`date_added` datetime NOT NULL,
`title` varchar(255) NOT NULL,
`content` text NOT NULL,
`url` varchar(255) NOT NULL,
`links` int(11) NOT NULL,
`hosts` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`)
) ENGINE=InnoDB AUTO_INCREMENT=439043 DEFAULT CHARSET=latin1

现在,如果我通过 Sphinx 连接

mysql -h0 -P9306

我可以运行一个简单的查询,例如...

SELECT * FROM test1 WHERE MATCH('test document');

我会得到一个结果集,比如...

+--------+----------+------------+
| id | group_id | date_added |
+--------+----------+------------+
| 360625 | 1 | 1499727792 |
| 362257 | 1 | 1499727807 |
| 362777 | 1 | 1499727811 |
| 159717 | 1 | 1499717614 |
| 160557 | 1 | 1499717621 |
----------------------------------

当我真正想要的是它返回一个结果集,其中包含文档表中的列值(如 URL、标题、链接、主机等列),并且如果可能的话,根据 sphinx 比赛。

这可以在单个查询中完成吗?它会是什么样子?

提前致谢!

最佳答案

两个(主要)选项

  1. 从 SphinxQL 结果中获取 id,并运行 MySQL 查询以获取完整的详细信息,请参阅 http://sphinxsearch.com/info/faq/#row-storage例如 SELECT * FROM documents WHERE id IN (3,5,7) ORDER BY FIELD(id,3,5,7)这个 MySQL 查询应该非常快,因为它是一个 PK 查找,并且只检索几行(即一页结果)- 搜索整个表的繁重工作已经在第一个 Sphinx 查询中完成。

  2. 将要在结果集中检索的所有列复制为属性。您已经group_iddate_added 作为属性,还需要创建更多属性。

    sql_field_string 是一种非常方便的快捷方式,可以从一列中同时生成字段字符串属性。不适用于其他列类型,但不太有用,因为数字列通常不需要作为字段。

选项 1 很好,因为它避免了重复数据,并节省了内存(Sphinx 通常希望在内存中保存属性)- 并且可能在大数据集上最实用。

而选项 2 的好处在于它避免了对每个结果进行第二次查询。但是因为有一份数据副本,这可能意味着额外的复杂同步。

  • 在您的情况下看起来不相关,但如果说有一个“点击”列,您希望它经常增加(当用户点击时!),并且在结果集中需要它但在 sphinx 中您并不真正需要它出于查询目的,第一个选项将允许您只需要在数据库中递增它,并且 mysql 查询将始终获得实时值。但第二个选项意味着必须始终保持 sphinx 索引处于“同步”状态)

关于mysql - 简单的 Sphinx 和 mySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45083666/

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