我有一个 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/
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我正在尝试为我的iOS应用程序设置cocoapods但是当我执行命令时:sudogemupdate--system我收到错误消息:当前已安装最新版本。中止。当我进入cocoapods的下一步时:sudogeminstallcocoapods我在MacOS10.8.5上遇到错误:ERROR:Errorinstallingcocoapods:cocoapods-trunkrequiresRubyversion>=2.0.0.我在MacOS10.9.4上尝试了同样的操作,但出现错误:ERROR:Couldnotfindavalidgem'cocoapods'(>=0),hereiswhy:U
我在搜索我的值是方法的散列时遇到问题。我只是不想运行plan_type与键匹配的方法。defmethod(plan_type,plan,user){foo:plan_is_foo(plan,user),bar:plan_is_bar(plan,user),waa:plan_is_waa(plan,user),har:plan_is_har(user)}[plan_type]end目前如果我传入“bar”作为plan_type,所有方法都会运行,我怎么能只运行plan_is_bar方法呢? 最佳答案 这个变体怎么样?defmethod
这太简单了,太荒谬了,我在任何地方都找不到关于它的任何信息,包括API文档和Rails源代码:我有一个:belongs_to关联,我开始理解当您没有关联时您在Controller中调用的正常模型方法与您有关联时调用的方法略有不同。例如,我的关联在创建Controller操作时运行良好:@user=current_user@building=Building.new(params[:building])respond_todo|format|if@user.buildings.create(params[:building])#etcetera但我找不到关于更新如何工作的文档:@user
我有这个代码:context"Visitingtheusers#indexpage."dobefore(:each){visitusers_path}subject{page}pending('iii'){shouldhave_no_css('table#users')}pending{shouldhavecontent('Youhavereachedthispageduetoapermissionic错误')}它会导致几个待处理,例如ManagingUsersGivenapractitionerloggedin.Visitingtheusers#indexpage.#Noreason
我想获取主题名称与搜索关键字匹配的所有配置文件。现在我正在加载所有配置文件。我需要知道如何实现它。非常感谢任何帮助。配置文件.rbhas_many:categorizationshas_many:subjects,through::categorizations主题.rbhas_many:categorizationshas_many:profiles,through::categorizations分类.rbbelongs_to:profilebelongs_to:subjectviews/search/index.html.erb#searchform'get'do%>nil%>#
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin