【发布时间】:2014-01-17 11:12:50
【问题描述】:
如何在文本开头找到短语(单词)
我需要非常快速的解决方案来找出文本是否以某些已知短语开头
我在 Mysql (innodb) 表中的短语如下:
CREATE TABLE IF NOT EXISTS `phrase` (
`id` int(10) unsigned NOT NULL,
`text` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `text` (`text`)
) ENGINE=InnoDB;
INSERT INTO phrase VALUES (1, 'one');
INSERT INTO phrase VALUES (2, 'one two');
INSERT INTO phrase VALUES (3, 'two');
INSERT INTO phrase VALUES (4, 'three');
短语文本是一个或多个单词。 表包含大约 20.000 行
现在我从用户请求中获取文本,并且需要知道该文本是否像任何短语一样开头。 但我需要找出数据库中最长的短语
我应该将行预缓存到服务器内存,或者我可以在 mysql 表中搜索。
我试过了
$_REQUEST['text'] = 'one two three';
$_REQUEST['text'] = explode(' ', $_REQUEST['text']);
$search = ''; $found = null;
foreach ($_REQUEST['text'] as $next_word) {
$search .= (($search == '') ? '' : ' ').$next_word;
$query = "SELECT SQL_CACHE * FROM phrase WHERE phrase = '{$search}' LIMIT 1;";
...
$row = mysql_fetch_assoc($result);
if ( ... not found ... ) break;
else $found = $row;
}
print_r($row); // print latest found phrase "one two"
我觉得这种方式很慢,因为我需要对每个单词进行全表扫描
您知道更快的解决方案吗?
【问题讨论】: