我有超过800万条带有“名称”列的记录,我必须找到一种优化搜索的方法select * from ... like '%string%'
。
问题是您不能使用它并为此编制索引。所以我的想法是制作一个“统计”字符串,如:
[char][number of chars][char][number of chars][char][number of chars]...
在char
字符串中找到char的位置,然后是在该字符串中的次数。
我们可以有这样的字符串:
name='Electroperro'
result='E01c01e02l01o02p01r03t01'
nom='Tanataka'
result='T01a04k01n01t01'
好吧,你明白了。我已经在Php中做到了:
function string_stat($tab) {
$ret="";
foreach ($tab as $key=>$c) {
$ret.=sprintf("%s%02d", $key, $c);
}
return $ret;
}
echo 'nom='.var_export($nom,true)."\n";
$stat=array();
for ($i=0; $i<mb_strlen($nom); $i++) {
$c=mb_substr($nom, $i, 1);
if (!isset($stat[$c])) {
$stat[$c]=0;
}
$stat[$c]++;
}
echo string_stat($stat)."\n";
我想在JavaScript中为NodeJS使用完全相同的原理,以便对Mongoose做到这一点。你会怎么做?
我认为在这种情况下,您必须使用某些特殊的搜索引擎,例如Sphinx
或elasticsearch
。因为它是专门为此开发的,所以它将立即进行搜索。我认为在MySQL(或其他数据库)中这样做不是一个好方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句