简单的狮身人面像& mySQL查询

时间:2017-07-13 14:29:54

标签: mysql sphinx

原谅我问什么应该是一个简单的问题,但我对Sphinx来说是全新的。

我正在使用Sphinx和mySQL数据存储区。该表如下所示,标题和内容字段由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,标题,链接,主机等列),如果可能的话,按照相关性对它们进行排序。狮身人面像比赛。

可以在一个查询中完成吗?它看起来像什么?

提前致谢!

1 个答案:

答案 0 :(得分:1)

两个(主要)选项

  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是一个非常方便的快捷方式,可以从一列中选择字段字符串属性。不适用于其他列类型,但不太有用,因为数字列通常不需要作为字段。

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

    而选项2的优点在于它避免了对每个结果的第二次查询。但由于有数据副本,可能意味着额外的复杂同步。

    • 在您的情况下看起来并不相关,但如果说有点击次数'列,你想要经常增加(当用户点击!),并在结果集中需要它,但你并不真的需要它在sphinx中用于查询目的,第一个选项,只允许你在数据库中增加它,并且mysql查询总是会获得实时值。但第二种选择意味着必须将狮身人面像指数保持在“同步”状态。在任何时候)