php - 我需要为文本中的每个关键字进行一个 sql 查询吗?

标签 php sql mysql mysql-management

我正在开发内容重写器,基本上它将用同义词替换单词。

我在 mySQL 数据库中有同义词,该表包含 3 列

id        int(11)
keyword      varchar(50)
synonyms    varchar(255)

条目看起来像这样:

50  slake       abate,slack,decrease,lessen,minify
51  abate       slake,slack,decrease,lessen,minify
52  slack       slake,abate,decrease,lessen,minify
53  decrease    slake,abate,slack,lessen,minify
54  lessen      slake,abate,slack,decrease,minify
55  minify      slake,abate,slack,decrease,lessen

所以我的第一个想法是先把文本中的每一个词都重写(忽略黑名单中的一些关键字),然后进行sql查询,看看数据库中是否存在该词的同义词。但是如果我的文本有 1000 个单词,那么 1000 个 sql 查询会不会太多了?还有一些同义词有 2 个词(比如“扔掉”),所以我最终可能不得不做比文本中的词更多的查询。

有没有更好的方法来实现这一点?

最佳答案

这不是更好地建模为规范化模式吗:

Word Table:
    id        int(11) 
    word      varchar(50) 

Synonym Table
    WordId     int(11)
    SynonymId  int(11)

例如,一个词的同义词是:

Select W2.Word 
from SynonymTable S
join WordTable W on S.WordId = W.Id
join WordTable W2 on S.SynonymId = W2.Id
where W.word = 'slake' 

在 WordTable(Word)、SynonymTable(WordId) 和 SynonymTable(SynonymId) 上创建索引

使用这种方法有几个原因:

  • 灵活:每个单词的同义词数量没有限制
  • 高效:由于归一化,行的大小非常小,每个数据库页面都适合很多行,从而使更多页面适合可用内存

关于php - 我需要为文本中的每个关键字进行一个 sql 查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4982112/

相关文章:

php - 使用 phalcon 验证类进行不区分大小写的验证

PHP 计算平衡数组

mysql - 如何在更新的行上查询插入?

sql - MySQL Order by NULL 连接

php - 我将如何在 Doctrine2 中执行 MySQL 计数(*)?

mysql - 如何连续总结过去30天?

php - fatal error : Call to undefined function mysql_connect()

php - 查询一列中的多个值

c# - 检查文本框中是否包含值 'abc' 而不是 'abc aze'

MySQL 获取未处理的短信