gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:06:35 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com