mysql - 在mysql中搜索大量不断更新的文本

标签 mysql database search text lucene

我有一个 mysql 数据库,其中不断添加大量文本。 (每小时 10 页文本)。文本以明文形式存储在文本字段中。每行都与一两页文本相关。

我需要定期对该数据库进行全文搜索(在文本中搜索关键字并进行复杂查询)。我只需要搜索新添加的文本。但让添加的文本立即可搜索(一两分钟内)非常重要。

据我所知,使用 mysql 的 fulltext 效率非常低。我知道 lucene 是一个选项,但我不确定它能以多快的速度索引新文本。

那么我的选择是什么?有没有办法让mysql更有效率? Lucene 是我最好的解决方案吗?有什么更合适的吗?

谢谢

最佳答案

我已经为 Sphinx 和 Solr 的索引时间做了基准测试。与 Solr 相比,Sphinx 在索引算法(超快速索引时间和小索引大小)方面遥遥领先。

当您说 10 页文本时,似乎您甚至不需要实时 Sphinx 索引。您可以遵循 Sphinx 中的 main + delta 索引方案(您可以在 Sphinx 文档中找到它)。它将超快且接近实时。如果您在这方面需要更多帮助,请随时提出,我们很乐意为您解释。

Solr 很棒,但在优化算法方面,Sphinx 太棒了!!尝试狮身人面像。

关于您在评论中提出的问题,Solr/Lucene 支持增量索引(在其术语中称为增量导入)并且配置起来非常简单,但是与 Sphinx 使用的方法相比它们非常慢。

Main+Delta 足够快,因为您可以做的是创建一个临时表,在其中存储新文本并对其进行索引。根据文档:Sphinx 支持“实时”(几乎实时)索引更新,可以使用 所谓的“main+delta”方案。这个想法是建立两个来源和两个索引,一个“主”索引用于数据,一个“增量”用于新文档。

例如,假设您有 1000 万条记录,因此您可以将其作为主索引,所有新文档都将添加到一个新表中,该表将充当增量。这个新表可以不时地(比如每 1 小时)索引,并且由于您有 10 页文本,因此数据在几秒钟内就可以搜索到。现在,在您的新记录被搜索后,您可以合并主表 + 增量表的文档,这可以在不干扰您的搜索的情况下进行。合并文件后,清空新表,一小时后再次执行整个过程。我希望你明白了,如果有任何问题,请随时提出。

关于mysql - 在mysql中搜索大量不断更新的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7164424/

相关文章:

php - 搜索多个值,按相关性排序(php + MySQL,无全文搜索)

php - Laravel/ Eloquent : replace with() for leftjoin() or join()

database - 在 Doctrine 2 中指定 decimal 字段类型时,scale 和 precision 意味着什么?

linux - 查找不属于特定用户的文件

sql-server - 优化sql脚本占用CPU资源

使用 .NET 删除数据库后 MySql 查询变慢

php - 显示多个词的搜索结果

php - 如何添加嵌套 xml 元素

mysql - 下面的 mysql 查询的改进

php - 代码点火器 : how to write where_in OR where_in query?