在Mysql中按照确切的单词搜索字符串

use*_*031 6 php mysql

我有一个搜索公司的系统.我希望当用户搜索"Demo"时,将返回所有具有"Demo"的记录,例如"The Demo","Demo Inc."等.我不希望那些记录像"民主","拆迁"等我认为你明白了我的观点.

现在,我的工作查询看起来像这样:

select * from table where company LIKE "Demo%"
Run Code Online (Sandbox Code Playgroud)

但这确实没有达到我的要求.我也试过这个:

select * from table where company RLIKE "[[:<:]]demo[[:>:]]"
Run Code Online (Sandbox Code Playgroud)

唯一的问题是它消除了我公司领域索引的可能性.所以搜索速度很慢.我现在有超过一百万条记录.知道怎么做吗?如果它不能在mysql中完成,任何想法是否可以在PHP?谢谢!

Luk*_*uke -2

尝试测试两侧的空间:

select * from table where company LIKE "Demo %" OR company LIKE "% Demo"
Run Code Online (Sandbox Code Playgroud)

但是,正如您所说,您需要使用索引,并且任何带有前导通配符的内容都%不会使用索引。

因此,我认为您需要对搜索列实施某种预处理,大致如下:

预处理您的记录名称:

  • 对数据库中的所有记录名称使用词干算法
  • 将词干词存储在一张表中 ( stemmed_words )
  • 根据记录 ID ( record_index )记录词干词的出现次数

然后当用户搜索时:

  • 对搜索词使用词干算法
  • 查询表以查找包含最常用词干词的结果

示例temmed_words表列:

id, stemmed_word  // Eg. 1 (auto generated), "Demo"
Run Code Online (Sandbox Code Playgroud)

record_index表列示例:

record_id, stemmed_word_id, occurrence_count // Eg. 1 (auto generated), 1 (ID of "Demo" in stemmed_words table), 2 (2 occurrences)
Run Code Online (Sandbox Code Playgroud)

这是一个基本教程,可帮助您开始使用词干提取和字数统计