我是否需要为文本中的每个关键字进行一次SQL查询?

her*_*sma 3 php mysql sql mysql-management

我正在研究内容重写器,基本上它将用他们的同义词替换单词.

我在mySQL数据库中有synonms,该表包含3列

id        int(11)
keyword      varchar(50)
synonyms    varchar(255)
Run Code Online (Sandbox Code Playgroud)

参赛作品如下:

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
Run Code Online (Sandbox Code Playgroud)

所以我的第一个想法是首先让文本中的每个单词重写(忽略黑名单中的一些关键字),然后进行SQL查询以查看数据库中是否存在该单词的同义词.但如果我有一个1000字的文本,1000 sql查询会不会太多?还有一些同义词有两个单词(比如"扔掉"),所以我最终可能要比文本中的单词做更多的查询.

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

Mit*_*eat 5

这不会像规范化架构那样更好地建模:

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

Synonym Table
    WordId     int(11)
    SynonymId  int(11)
Run Code Online (Sandbox Code Playgroud)

例如,单词的同义词是:

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' 
Run Code Online (Sandbox Code Playgroud)

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

使用此方法有几个原因:

  • 灵活:每个单词的同义词数量没有限制
  • 高效:由于规范化,行大小非常​​小,因此许多行适合每个数据库页面,使更多页面适合可用内存