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

app*_*ief 5 mysql database lucene search text

我有一个mysql数据库,其中不断添加大量文本.(每小时10页文本).文本在文本字段中以纯文本格式存储.每行联系一页或两页文本.

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

从我所读到的,使用mysql的全文是非常低效的.我知道lucene是一个选项,但我不确定它能以多快的速度索引新文本.

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

谢谢

Yav*_*var 2

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

当你说 10 页文本时,似乎你甚至不需要 Real Time Sphinx Indexing。您可以遵循 Sphinx 中的主 + 增量索引方案(您可以在 Sphinx 文档中找到该方案)。这将是超快且接近实时的。如果您需要更多帮助,请随时询问,我们很乐意为您解释。

Solr 很棒,但是当谈到优化算法时,Sphinx 很震撼!尝试一下狮身人面像。

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

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

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