ElasticSearch,Sphinx,Lucene,Solr,Xapian。哪种适合哪种用途? [关闭]
我目前正在寻找其他搜索方法,而不是拥有一个巨大的SQL查询。 我最近看到了弹性搜索并玩弄了嗖 (搜索引擎的Python实现)。
你能说出你的选择理由吗?
#1楼
我的sphinx.conf
source post_source
{type = mysqlsql_host = localhostsql_user = ***sql_pass = ***sql_db = ***sql_port = 3306sql_query_pre = SET NAMES utf8# query before fetching rows to indexsql_query = SELECT *, id AS pid, CRC32(safetag) as safetag_crc32 FROM hb_postssql_attr_uint = pid # pid (as 'sql_attr_uint') is necessary for sphinx# this field must be unique# that is why I like sphinx# you can store custom string fields into indexes (memory) as wellsql_field_string = titlesql_field_string = slugsql_field_string = contentsql_field_string = tagssql_attr_uint = category# integer fields must be defined as sql_attr_uintsql_attr_timestamp = date# timestamp fields must be defined as sql_attr_timestampsql_query_info_pre = SET NAMES utf8# if you need unicode support for sql_field_string, you need to patch the source# this param. is not supported nativelysql_query_info = SELECT * FROM my_posts WHERE id = $id
}index posts
{source = post_source# source abovepath = /var/data/posts# index locationcharset_type = utf-8
}
测试脚本:
<?phprequire "sphinxapi.php";$safetag = $_GET["my_post_slug"];
// $safetag = preg_replace("/[^a-z0-9\-_]/i", "", $safetag);$conf = getMyConf();$cl = New SphinxClient();$cl->SetServer($conf["server"], $conf["port"]);$cl->SetConnectTimeout($conf["timeout"]);$cl->setMaxQueryTime($conf["max"]);# set search params$cl->SetMatchMode(SPH_MATCH_FULLSCAN);$cl->SetArrayResult(TRUE);$cl->setLimits(0, 1, 1); # looking for the post (not searching a keyword)$cl->SetFilter("safetag_crc32", array(crc32($safetag)));# fetch results$post = $cl->Query(null, "post_1");echo "<pre>";var_dump($post);echo "</pre>";exit("done");
?>
样本结果:
[array] => "id" => 123,"title" => "My post title.","content" => "My <p>post</p> content.",...[ and other fields ]
狮身人面像查询时间:
0.001 sec.
Sphinx查询时间(1k并发):
=> 0.346 sec. (average)
=> 0.340 sec. (average of last 10 query)
MySQL查询时间:
"SELECT * FROM hb_posts WHERE id = 123;"
=> 0.001 sec.
MySQL查询时间(1k并发):
"SELECT * FROM my_posts WHERE id = 123;"
=> 1.612 sec. (average)
=> 1.920 sec. (average of last 10 query)
#2楼
我们定期使用Lucene来索引和搜索数以千万计的文档。 搜索速度很快,我们使用不需要很长时间的增量更新。 我们花了一些时间来到这里。 Lucene的优势在于其可扩展性,大量功能以及活跃的开发人员社区。 使用裸Lucene需要用Java编程。
如果你重新开始,Lucene系列中的工具就是Solr ,它比裸露的Lucene更容易设置,并且几乎具有Lucene的全部功能。 它可以轻松导入数据库文档。 Solr是用Java编写的,因此Solr的任何修改都需要Java知识,但只需调整配置文件就可以做很多事情。
我也听过关于Sphinx的好消息,特别是与MySQL数据库一起使用。 但是没有用过它。
IMO,你应该根据:
- 所需的功能 - 例如,你需要一个法国的阻尼器吗? Lucene和Solr有一个,我不知道其他人。
- 熟练掌握实施语言 - 如果您不了解Java,请不要触及Java Lucene。 您可能需要C ++才能使用Sphinx。 Lucene也被移植到其他 语言中 。 如果您想扩展搜索引擎,这一点非常重要。
- 易于实验 - 我相信Solr在这方面是最好的。
- 与其他软件接口--Sphinx与MySQL有良好的接口。 Solr支持ruby,XML和JSON接口作为RESTful服务器。 Lucene只通过Java为您提供编程访问。 Compass和Hibernate Search是Lucene的包装器,它将它集成到更大的框架中。
#3楼
我使用过Sphinx,Solr和Elasticsearch。 Solr / Elasticsearch建立在Lucene之上。 它增加了许多常用功能:Web服务器api,分面,缓存等。
如果您想要一个简单的全文搜索设置,Sphinx是一个更好的选择。
如果您想自定义搜索,Elasticsearch和Solr是更好的选择。 它们非常易于扩展:您可以编写自己的插件来调整结果评分。
一些示例用法:
- 狮身人面像:craigslist.org
- Solr:Cnet,Netflix,digg.com
- Elasticsearch:Foursquare,Github
#4楼
Lucene很好,但他们的停止词设置很糟糕。 我不得不手动向StopAnalyzer.ENGLISH_STOP_WORDS_SET添加大量停用词,以使其接近可用。
我没有使用过Sphinx,但我知道人们发誓它的速度和近乎神奇的“易于设置到令人敬畏”的比例。
#5楼
作为ElasticSearch的创建者,也许我可以给你一些推理,为什么我继续创建它并在第一时间创建它:)。
使用纯Lucene具有挑战性。 如果你希望它真正表现良好,你需要注意很多事情,还有它的库,所以没有分布式支持,它只是你需要维护的嵌入式Java库。
就Lucene的可用性而言,(当时差不多6年),我创建了Compass。 它的目的是简化Lucene的使用,使每天的Lucene更简单。 我一次又一次遇到的是要求能够分发Compass。 我开始从Compass内部开始研究,通过与GigaSpaces,Coherence和Terracotta等数据网格解决方案集成,但这还不够。
其核心是分布式Lucene解决方案需要进行分片。 此外,随着HTTP和JSON作为无处不在的API的发展,它意味着可以轻松使用具有不同语言的许多不同系统的解决方案。
这就是我继续创建ElasticSearch的原因。 它具有非常先进的分布式模型,本地使用JSON,并且公开了许多高级搜索功能,所有功能都通过JSON DSL无缝表达。
Solr也是一个通过HTTP公开索引/搜索服务器的解决方案,但我认为ElasticSearch提供了一个更优越的分布式模型和易用性(虽然目前缺少一些搜索功能,但不是很长,而且在任何例如,计划是将所有Compass功能都纳入ElasticSearch)。 当然,我有偏见,因为我创建了ElasticSearch,所以你可能需要自己检查一下。
至于狮身人面像,我没有用它,所以我无法发表评论。 我可以推荐你的是Sphinx论坛上的这个主题 ,我认为它证明了ElasticSearch的优秀分布式模型。
当然,ElasticSearch除了分发之外还有许多其他功能。 它实际上是以云计算而构建的。 您可以查看网站上的功能列表。
#6楼
我们在垂直搜索项目中使用Sphinx,其中包含10.000.000 +的MySql记录和10多个不同的数据库。 它对MySQL有很好的支持和索引的高性能,研究速度快但可能比Lucene少一点。 但是,如果您需要每天快速编制索引并使用MySQL数据库,那么它是正确的选择。
#7楼
尝试indextank。
作为弹性搜索的情况,它被认为比lucene / solr更容易使用。 它还包括非常灵活的评分系统,无需重新索引即可进行调整。
#8楼
到目前为止我能找到的唯一弹性搜索与solr性能比较是:
Solr vs elasticsearch Deathmatch!
#9楼
比较ElasticSearch和Solr的实验
ElasticSearch,Sphinx,Lucene,Solr,Xapian。哪种适合哪种用途? [关闭]相关推荐
- 理解Lucene/Solr的缓存
缓存对于提高搜索引擎的吞吐量,降低CPU占用率极为重要.Lucene/Solr在这块做了很多的工作.Lucene/Solr中默认提供了5种缓存,同时solr还提供扩展缓存接口,允许开发者自定义缓存. ...
- Lucene,Elasticsearch,Solr,Xapian,Sphinx主流搜索引擎的对比
Lucene 系别:JAVA 基于Java的一个开放源代码的全文检索引擎工具包,注意是工具包,所以严格来说它并不是一个搜索引擎服务程序,开发者需要了解搜索引擎的基本原理和Lucene的用法,然后根据需 ...
- Solr vs Elasticsearch vs Lucene
最近看到有一个客户他们用的是Elasticsearch, 说实话,本人对Elasticsearch之前了解的比较少,准确地说,对"搜索引擎"这块了解的比较少.今天就各种搜索,收集了 ...
- ElasticSearch 基本原理(三)ElasticSearch与Lucene、Solr、Mysql的关系
信息检索包含内容非常广,包含文本(搜索引擎). 图片(以图搜索).音频(歌曲识别).视频等多种类型数据的检索.为了高效的检索,通常都用建立索引的方式提高检索速度.因为不同类型的数据存储格式.特征提取方 ...
- 【Elasticsearch】Elasticsearch 缓存深度剖析:一次提高一种缓存的查询速度
1.概述 转载:Elasticsearch 缓存深度剖析:一次提高一种缓存的查询速度 缓存是加快数据检索速度的王道.因此,如果您有兴趣了解 Elasticsearch 如何利用各种缓存来确保您尽可能快 ...
- Lucene / Solr 开发经验
Lucene / Solr 开发经验 http://clayz.iteye.com/blog/240357 2008-09-10 Lucene / Solr 开发经验 博客分类:Framework S ...
- ES(ElasticSearch)和solr的比较
ES(ElasticSearch) Elasticsearch是一个实时分布式搜索和分析引擎.它让你以前所未有的速度处理大数据成为可能.它用于全文搜索.结构化搜索.分析以及将这三者混合使用︰ 维基百科 ...
- 表字段注释放在哪_橱柜台面6种材质优缺点大解剖,我来测评,告诉你哪一种适合你!...
很多人装修厨房,只知道橱柜要好用,厨房才好用.但在做橱柜的时候,除了橱柜的选择,很多装修新手还会遇到一些其他疑问: ① 橱柜的台面用什么材质的比较好? ② 台面的挡水条到底要不要做? ③ 橱柜台面的高 ...
- 怎么把线稿提取出来_PS教程:提取线稿如此简单?三种方法总有一种适合你
原标题:PS教程:提取线稿如此简单?三种方法总有一种适合你 部落窝教育,每天学习PS独家原创视频 在PS出现之前,如果我们喜欢某个动漫角色大概只能通过临摹的方式将人物线条勾勒出来,但PS的出现将提取线 ...
最新文章
- 毕业生实名举报导师剽窃其论文发表:复制比达 90%,导师已道歉
- CFLAGS,CPPFLAGS,CXXFLAGS in Makefile
- 人工智能:各种知识收集----不断追加内容
- C语言程序设计 | 模拟实现字符串操作函数:strlen, strcmp, strcpy, strcat, strchr, strstr
- 制作旋转led_LED用蓝宝石衬底及加工工艺!
- 开源合同管理系统_「物联网架构」最适合物联网的开源数据库
- 借个iPad玩玩,越狱4.2.1成功
- 【AI视野·今日CV 计算机视觉论文速览 第207期】
- dd大牛《背包九讲》(转载)
- JAVA 中转义符的理解
- 站点技术---301重定向
- Java练手小游戏集结,你还在等什么
- linux hack tool
- 在线客服代码:在线QQ客服、在线旺旺客服
- 5G垂直领域:华为智慧园区
- diy计算机英语,电脑组装DIY基本英语单词
- ssh免密码登录全过程
- java案例_面向对象编程_Stool
- 搭建个人网站--域名申请
- TVS二极管和稳压二极管的区别
热门文章
- Anroid基础建设之View,Window,Activity
- 算法----- 给定一颗二叉树,找到二叉树上任意两个节点之间的距离(Java版本)
- Please select Android SDK
- 第十六周项目一-小玩文件(1)
- Android之图片加载框架Picasso源码解析
- swift_013(Swift 的运算符)
- java webpack web项目_spring + spring mvc + mybatis + react + reflux + webpack Web工程例子
- python绘制直方图显示数字_Python实现绘制双柱状图并显示数值功能示例
- 一种可以穿透还原卡和还原软件的代码
- 使用Microsoft Visual Studio International Pack获得中文字符串的所有拼音组合(处理多音字)...