Solr ElasticSearch、斯芬克斯、卢森、索尔、沙皮安。哪个适合哪个用途?
我目前正在研究其他搜索方法,而不是使用大型SQL查询。 我最近看到并玩过(搜索引擎的Python实现)Solr ElasticSearch、斯芬克斯、卢森、索尔、沙皮安。哪个适合哪个用途?,solr,lucene,elasticsearch,sphinx,xapian,Solr,Lucene,elasticsearch,Sphinx,Xapian,我目前正在研究其他搜索方法,而不是使用大型SQL查询。 我最近看到并玩过(搜索引擎的Python实现) 您能给出选择的理由吗?我们定期使用Lucene索引和 搜索数千万个文档。 搜索速度足够快,我们使用 不采取任何措施的增量更新 很长时间了。这确实花了我们一些时间 来这里。优势 Lucene是它的可扩展性,一个大的 一系列功能和一个活跃的 开发人员社区。使用裸 Lucene需要用Java编程 如果你重新开始,Lucene家族中适合你的工具是,它比bare Lucene更容易设置,并且几乎拥有Lu
您能给出选择的理由吗?我们定期使用Lucene索引和 搜索数千万个文档。 搜索速度足够快,我们使用 不采取任何措施的增量更新 很长时间了。这确实花了我们一些时间 来这里。优势 Lucene是它的可扩展性,一个大的 一系列功能和一个活跃的 开发人员社区。使用裸 Lucene需要用Java编程 如果你重新开始,Lucene家族中适合你的工具是,它比bare Lucene更容易设置,并且几乎拥有Lucene的所有功能。它可以很容易地导入数据库文档。Solr是用Java编写的,所以对Solr的任何修改都需要Java知识,但只需调整配置文件就可以做很多事情 我也听说了Sphinx的好消息,特别是与MySQL数据库的结合。但我没有用过 在国际海事组织,您应根据以下内容进行选择:
- 所需功能-例如,您是否需要法式词干分析器?Lucene和Solr有一个,其他的我不知道
- 精通实现语言-如果不懂Java,请不要接触Java Lucene。你可能需要C++来做狮身人面像的事情。Lucene也被移植到了中国。如果您想扩展搜索引擎,这一点非常重要
- 易于实验-我相信Solr在这方面是最好的
- 与其他软件的接口——Sphinx与MySQL有很好的接口。Solr支持ruby、XML和JSON接口作为RESTful服务器。Lucene只允许您通过Java进行编程访问。并且是Lucene的包装器,将其集成到更大的框架中李>
- 斯芬克斯:craigslist.org
- 解决方案:Cnet、Netflix、digg.com
- Elasticsearch:Foursquare,Github
我没有用过斯芬克斯,但我知道人们对它的速度和近乎神奇的“设置简单到令人惊叹”的比率信誓旦旦。作为ElasticSearch的创造者,也许我可以给你一些理由来解释我为什么要先创建它:) 使用纯Lucene具有挑战性。如果您想让它真正表现良好,有很多事情需要注意,而且它是一个库,因此没有分布式支持,它只是一个需要维护的嵌入式Java库 就Lucene的可用性而言,早在我创建Compass的时候(现在差不多6年了)。其目的是简化Lucene的使用,使日常Lucene变得更简单。我一次又一次遇到的是能够分发指南针的要求。我开始从Compass内部着手,通过与GigaSpaces、Coherence和Terracotta等数据网格解决方案集成,但这还不够 在其核心,分布式Lucene解决方案需要分片。此外,随着HTTP和JSON作为无处不在的API的发展,这意味着可以轻松使用一个解决方案,即使用不同语言的许多不同系统 这就是为什么我继续创建ElasticSearch。它有一个非常高级的分布式模型,本机使用JSON,并公开了许多高级搜索功能,所有这些功能都通过JSON DSL无缝表达 Solr也是一种通过HTTP公开索引/搜索服务器的解决方案,但我认为它提供了一种更优越的分布式模型和易用性(尽管目前缺少一些搜索功能,但不会太久,而且在任何情况下,计划是将所有Compass功能纳入ElasticSearch)。当然,我有偏见,因为我创建了ElasticSearch,所以您可能需要自己检查 至于斯芬克斯,我没有用过,所以我不能评论。我可以向你们介绍的是,我认为它证明了ElasticSearch的优越分布式模型
当然,ElasticSearch不仅仅是分布式的,还有更多的功能。它实际上是在考虑云的情况下构建的。您可以查看网站上的功能列表。我们在一个垂直搜索项目中使用Sphinx,其中包含10.000.000+个MySql记录和10+个不同的数据库。 它对MySQL有非常好的支持,在索引方面有很高的性能,研究速度很快,但可能比Lucene要慢一点。 但是,如果您每天都需要快速索引并使用MySQL数据库,那么它是正确的选择。试试indextank
作为弹性搜索的例子,它被认为比lucene/solr更易于使用。它还包括非常灵活的评分系统,可以在不重新编制索引的情况下进行调整。到目前为止,我唯一能找到的elasticsearch与solr性能比较是: 我的狮身人面像的实验
source post_source
{
type = mysql
sql_host = localhost
sql_user = ***
sql_pass = ***
sql_db = ***
sql_port = 3306
sql_query_pre = SET NAMES utf8
# query before fetching rows to index
sql_query = SELECT *, id AS pid, CRC32(safetag) as safetag_crc32 FROM hb_posts
sql_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 well
sql_field_string = title
sql_field_string = slug
sql_field_string = content
sql_field_string = tags
sql_attr_uint = category
# integer fields must be defined as sql_attr_uint
sql_attr_timestamp = date
# timestamp fields must be defined as sql_attr_timestamp
sql_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 natively
sql_query_info = SELECT * FROM my_posts WHERE id = $id
}
index posts
{
source = post_source
# source above
path = /var/data/posts
# index location
charset_type = utf-8
}
测试脚本:
<?php
require "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");
?>
Sphinx查询时间(1k并发):
MySQL查询时间:
=> 0.346 sec. (average)
=> 0.340 sec. (average of last 10 query)
"SELECT * FROM my_posts WHERE id = 123;"
=> 1.612 sec. (average)
=> 1.920 sec. (average of last 10 query)
MySQL查询时间(1k并发):
您提出了一个重要的概念,即搜索引擎必须具有适应性。我从未使用过Xapian。它看起来像是一个很好的搜索库,其特征与Lucene相当。同样,最重要的是您的应用程序需求、您希望搜索引擎运行的环境、您对实现语言(Xapian中的C++)的熟练程度
=> 0.346 sec. (average)
=> 0.340 sec. (average of last 10 query)
"SELECT * FROM hb_posts WHERE id = 123;"
=> 0.001 sec.
"SELECT * FROM my_posts WHERE id = 123;"
=> 1.612 sec. (average)
=> 1.920 sec. (average of last 10 query)