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

在mysql中搜索大量不断更新的文本,mysql,database,search,text,lucene,Mysql,Database,Search,Text,Lucene,我有一个mysql数据库,其中不断添加大量文本。(每小时10页文本)。文本以明文形式存储在文本字段中。每行接触一两页文本 我需要定期在此数据库上进行全文搜索(搜索文本中的关键字并进行复杂查询)。我只需要搜索新添加的文本。但添加的文本立即可搜索(一两分钟内)是非常重要的 据我所知,mysql的全文版非常低效。我知道lucene是一个选项,但我还不确定它能以多快的速度索引新文本 那么我有什么选择呢?有没有办法让mysql更高效?lucene是我最好的解决方案吗?还有更合适的吗 谢谢您有两个选择:

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

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

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

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


谢谢

您有两个选择:

  • :可以直接与MySQL数据库集成。支持实时索引,但有一些限制

  • :通过JSON或XML从数据库向it提供数据。具有丰富的查询功能。当前版本不是实时的,没有一些边缘构建。您必须重新编制数据索引并提交数据,以便显示更改。这取决于你的数据量,你可以每10分钟做一次提交。这不会是一个问题,直到你有100K/1M+的文档,因为Lucene在索引方面非常快。每小时10页是相当微不足道的

  • :与Solr/Lucene一样基于Java,但似乎真正做到了“近实时”。其采用开箱即用的设计,可分布并支持线性扩展。您可以通过JSON向其提供数据,并通过JSON进行查询


这取决于你的需求和能力。斯芬克斯可能是最容易开始的。但是它的实时索引限制可能不适合您。

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

当你说10页文本时,你甚至不需要实时Sphinx索引。您可以在Sphinx中遵循main+delta索引方案(您可以在Sphinx文档中找到)。这将是超高速和近实时的。如果你想在这方面得到更多帮助,请尽管问,我很乐意为你解释

Solr是伟大的,但当涉及到优化算法斯芬克斯岩石!!试试斯芬克斯

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

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


比如说,你有1000万条记录,所以你可以把它作为主索引,所有的新文档都被添加到一个新的表中,这个表将作为增量。这个新表可以随时(比如每1小时)编制索引,并且数据可以在几秒钟内搜索,因为您有10页文本。现在,在搜索新记录之后,您可以合并主表+增量表的文档,这可以在不干扰搜索的情况下执行。合并文档时,清空新表,一小时后再次执行整个过程。我希望您还有其他问题,请随时提问。

Sphinx和ElasticSearch似乎很有趣。我要研究斯芬克斯的实时性限制。那么lucene每次都会重新索引整个数据库吗?它不是对索引进行增量更新吗?shinx和elasticsearch呢。ElasticSearch也基于Lucene 2。Lucene可以在新出现的文档中添加文档,这样您就不必重新编制任何索引,但是@Code意味着您需要为文档提供数据,并调用相对昂贵的“提交”操作,以便文档出现—这仅适用于Solr。Lucene和ElasticSearch不需要昂贵的“提交”3。ElasticSearch也很容易开始…感谢您的帮助。从我读到的内容来看,main+delta正是我所需要的。但有一点在文件中并不清楚;他们说这将把索引时间减少到30到60秒。在我的例子中,在几秒钟内(最多一分钟)准备好搜索新文本是至关重要的。main+delta足够快吗?从我所看到的斯芬克斯就是这样。非常欢迎你。你可以在上面看到我编辑过的答案。Main+Delta对您来说应该很有用,因为Sphinx索引非常快。然而,还有一件事:请也看看上面一个答案中提到的Sphinx中的实时索引,我从未使用过它,但它似乎很有希望。将这两种方法应用于数据之后,您可以检查哪些方法最适合您。