我有一个搜索公司的系统.我希望当用户搜索"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)
但是,正如您所说,您需要使用索引,并且任何带有前导通配符的内容都%不会使用索引。
预处理您的记录名称:
然后当用户搜索时:
示例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)