mysql - 位置无关的字符串匹配

标签 mysql solr sphinx string-matching

我的 mysql 数据库中有 2,000,000 个字符串。现在,当一个新字符串作为输入时,我尝试找出该字符串是否已在我的数据库中,否则,我插入该字符串。

字符串匹配的定义

就我而言,文本中单词的位置并不重要。字符串中只应出现所有单词,并且任一字符串中都不应出现多余的单词。

Ex - Ram 是男孩 AND 男孩是 Ram 将被认为是匹配的。 拉姆是个好 child 不会匹配。

PS - 请忽略这种感觉

现在,我的问题是,考虑到我必须匹配的字符串数量(2,000,000),进行这些匹配的最佳方法是什么。

我能想到的解决方案:

  1. 索引 SOLR/Sphinx 中的所有字符串
  2. 在新的搜索中,我只会 访问搜索服务器并且必须考虑最多前 10 个字符串

优点:-

  1. 比mysql全文搜索更快

缺点:-

  1. 使用 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/

相关文章:

java - Nutch 1.4 与 Solr 3.5 http.agent.name 属性的集成

javascript - adonisjs 与 mysql 的迁移问题

mysql - 从 PHP PDO 对象访问 AWS Lightsail LAMP Stack - MariaDB

php - 使用 PHP 和 MySQL 的多语言动态内容

linux - 如何解决 Sphinx 搜索依赖问题?

sphinx - 查询 Sphinx 搜索索引

ubuntu - 在 ubuntu 上安装 sphinx

php - 每小时清空一个 MySQL 表

solr - 在solr查询中使用特殊字符进行通配符搜索

solr - 使用 Jetty 运行 Solr