【发布时间】:2011-08-29 14:01:12
【问题描述】:
我想在我的网络中进行全文搜索。我需要分页搜索。我的数据库每张表有 50,000 多行。我已经改变了我的表并将(title,content,date) 设为索引。该表始终在更新,仍有一列id 是自动增加的。最新的date 总是在表的末尾。
date varchar(10)
title text
content text
但整个查询时间将花费1.5+ seconds。我通过google搜索了很多文章,有的写道只限制Index字段字长可以帮助搜索更快。但作为text 类型,它can not 改变了一定的长度(我试过ALTER TABLE table_1 CHANGEtitletitleTEXT(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,不起作用)
date varchar(10)
title text(500)
content text(1000)
所以,除了Sphinx 和第三方脚本。如何仅使用 sql 优化全文搜索?此处查询代码:
(SELECT
title,content,date
FROM table_1
WHERE MATCH (title,content,date)
AGAINST ('+$Search' IN BOOLEAN MODE))
UNION
(SELECT
title,content,date
FROM table_2
WHERE MATCH (title,content,date)
AGAINST ('+$Search' IN BOOLEAN MODE))
Order By date DESC
谢谢。
【问题讨论】:
-
表中的数据是否经常发生变化?还是这里根本改变?倒排索引总是会难以置信地加速全测试搜索,对于静态数据,它非常容易实现/应用。如果有更新,这可能会变得更加复杂
-
@b.buchhold,是的,表中的数据经常更新,变化。所以这很困难……至少我没有什么好主意。如果有人有明智的方法,请寻求帮助。
-
是(标题、内容、日期)的全文索引,还是 btree 索引?
-
@Denis,只是
alter table table_1 ADD INDEX title(title)。 -
你不能使用像 Lucene 这样的东西的原因是什么?它通过 Zend 框架在纯 PHP 中实现
标签: php mysql full-text-search