我有一个包含约 15,000 个多词短语的数据库,长度范围为 2-7 个单词。我希望能够搜索一个小文档(约 1000 个单词)以查看其中包含哪些短语。我基本上是在寻找实现这一目标的最佳方法。
我目前在 MySQL 中有两个表中的数据:
短语 (约 15,000 行)
phrase_id
短语
长度 (短语中的单词数)
文档 (100 秒/天)
document_id
文本
短语列表保持不变,新文档一直在添加。
据我所知,最好的方法是使用某种索引。理想情况下,当文档被添加时,它会被索引以查看它包含哪些短语,以便稍后进行搜索时,结果会立即返回。
我已经考虑过如何在 MySQL 中做到这一点
- 将文档标记为 2 个单词短语,查找以标记开头的短语
- 遍历增加令牌长度的结果 - if (phrase length == token length) {match} else {keep for next token length}。
- 将结果存储在新表中document_phrasesphrase_id , document_id
不过,这一切似乎都有很多开销,我想知道像 Sphinx 这样的外部工具是否能够更有效地做到这一点?我已经调查过了,但它似乎主要是为了搜索大量文档以获取 1 个短语,而不是在 1 个文档中搜索许多短语。
是否有一些我完全错过的技术?请注意,虽然技术上很有趣,但使用 java/python 的解决方案超出了我计划为这个项目学习的范围