我的 mysql 数据库中有 2,000,000 个字符串。现在,当一个新字符串作为输入时,我尝试找出该字符串是否已在我的数据库中,否则,我插入该字符串。
字符串匹配的定义
就我而言,文本中单词的位置并不重要。字符串中只应出现所有单词,并且任一字符串中都不应出现多余的单词。
Ex - Ram 是男孩 AND 男孩是 Ram 将被认为是匹配的。 拉姆是个好 child 不会匹配。
PS - 请忽略这种感觉
现在,我的问题是,考虑到我必须匹配的字符串数量(2,000,000),进行这些匹配的最佳方法是什么。
我能想到的解决方案:
- 索引 SOLR/Sphinx 中的所有字符串
- 在新的搜索中,我只会 访问搜索服务器并且必须考虑最多前 10 个字符串
优点:-
- 比mysql全文搜索更快
缺点:-
- 使用 mysql 中的新查询保持搜索服务器更新 数据库。
还有其他更好的解决方案吗?非常欢迎任何解决此问题的建议和方法:)
谢谢!
最佳答案
您可以只计算第二列,其中的单词按排序顺序排列。那么只是该列上的唯一索引:)
ALTER TABLE table ADD sorted varchar(255) not null, unique index(sorted);
然后...(PHP为了方便,但其他语言也会类似)
$words = explode(' ',trim($string));
sort($words);
$sorted = mysql_real_escape_string(implode(' ',$words));
$string = mysql_real_escape_string($string);
$sql = "INSERT IGNORE INTO table SET `string`='$string',`sorted`='$sorted'";
关于mysql - 位置无关的字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19238755/