【发布时间】:2012-05-26 10:06:43
【问题描述】:
我有一个包含约 15,000 个多词短语的数据库,长度范围为 2-7 个单词。我希望能够搜索一个小文档(约 1000 个单词)以查看其中包含哪些短语。我基本上是在寻找实现这一目标的最佳方法。
我目前在 MySQL 中有两个表中的数据:
短语 (约 15,000 行)
短语 ID
短语
长度 (短语中的单词数)
文件 (100s/天)
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 的解决方案超出了我计划为这个项目学习的范围
【问题讨论】:
-
您的算法看起来不错。 PHP 对于这种字符串操作非常有用。您可能希望加载每个文档的文本并使用 PHP 将其处理成长度为 2-7 的短语,然后逐个查找这些短语。这对于合理长度的文件应该是相对有效的——圣经和博伽梵歌:好的。美国税法,没那么多。
标签: php mysql full-text-search sphinx