精华内容
下载资源
问答
  • 使用Solr实现电商网站中商品信息搜索功能,根据关键字、分类、价格搜索商品信息,也可以根据价格进行排序。 1.2 实现方法 在一些大型门户网站、电子商务网站等都需要站内搜索功能,使用传统的数据库查询方式实现...

    一、介绍

    1.1 我们需要实现的功能
    使用Solr实现电商网站中商品信息搜索功能,根据关键字、分类、价格搜索商品信息,也可以根据价格进行排序。
    1.2 实现方法
    在一些大型门户网站、电子商务网站等都需要站内搜索功能,使用传统的数据库查询方式实现搜索无法满足一些高级的搜索需求,比如:搜索速度要快、搜索结果按相关度排序、搜索内容格式不固定等,这里就需要使用全文检索技术实现搜索功能。
    1.2.1 使用Lucene实现
    单独使用Lucene实现站内搜索需要开发的工作量较大,主要表现在:索引维护、索引性能优化、搜索性能优化等,因此不建议采用。
    1.2.2 使用solr实现
    基于Solr实现站内搜索扩展性较好并且可以减少程序员的工作量,因为Solr提供了较为完备的搜索引擎解决方案,因此在门户、论坛等系统中常用此方案。

    二、什么是solr

    Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。 Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
    2.1 Solr与Lucene的区别:
    Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。Solr的目标是打造一款企业级的搜索引擎系统,它是一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。

    三、Solr安装及配置

    solr是一个全文检索引擎系统,通过部署到tomcat下就可以独立运行,通过http协议对外提供全文检索服务,就是索引和文档的增删改查服务。solr直接操作索引库和文档库, 我们的业务系统中可以使用solrJ(solr的客户端,就是一堆jar包)来调用solr服务端, 让solr服务端操作文档库和索引库,完成增删改查的任务,将结果返回给solrJ客户端,我们在业务系统中就可以获取到结果然后返回给客户在浏览器中显示。
    3.1.Solr的下载
    从Solr官方网站(http://lucene.apache.org/solr/ )下载Solr4.10.3,根据Solr的运行环境,Linux下需要下载lucene-4.10.3.tgz,windows下需要下载lucene-4.10.3.zip。
    Solr使用指南可参考:https://wiki.apache.org/solr/FrontPage
    3.2. Solr的文件夹结构
    将solr-4.10.3.zip解压:

    bin:solr的运行脚本
    contrib:solr的一些软件/插件,用于增强solr的功能。
    dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。
    docs:solr的API文档
    example:solr工程的例子目录:
    (1) example/solr:
    该目录是一个包含了默认配置信息的Solr的Core目录。
    (2) example/multicore:
    该目录包含了在Solr的multicore中设置的多个Core目录。 
    (3) example/webapps:
        该目录中包括一个solr.war,该war可作为solr的运行实例工程。
    licenses:solr相关的一些许可信息
    3.3 运行环境
    solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(java写的Servlet容器),本教程使用Tocmat作为Servlet容器,环境如下:
    Solr:Solr4.10.3
    Jdk:jdk1.7.0_72
    Tomcat:apache-tomcat-7.0.53
    3.4 Solr整合tomcat
    3.4.1 Solr Home与SolrCore
    创建一个Solr home目录,SolrHome是Solr运行的主目录,目录中包括了运行Solr实例所有的配置文件和数据文件,Solr实例就是SolrCore,一个SolrHome可以包括多个SolrCore(Solr实例),每个SolrCore提供单独的搜索和索引服务。
    solrHome:solrhome就是solr最核心的目录, 一个solrhome中可以有多个solr实例。
    solrCore:一个solrCore就是一个solr实例,solr中实例与实例之间他们的索引库和文档库是相互隔离的。每个实例对外单独的提供索引和文档的增删改查服务,默认实例叫做collection1。
    例如:
    (1) example\solr是一个solr home目录结构,如下:

    上图中“collection1”是一个SolrCore(Solr实例)目录 ,目录内容如下所示:

    说明:
    collection1:叫做一个Solr运行实例SolrCore,SolrCore名称不固定,一个solr运行实例对外单独提供索引和搜索接口。solrHome中可以创建多个solr运行实例SolrCore。一个solr的运行实例对应一个索引目录。conf是SolrCore的配置文件目录 。data目录存放索引文件需要创建。
    3.4.2 整合步骤
    因为我们想把solr独立部署在一个Tomcat服务器中,与我们的应用程序不在一个服务器。于是我把Eclipse中用到的Tomcat复制了一份出来,单独给solr使用。

    第一个tomcat给应用程序使用,第二个tomcat给solr使用。我们修改第二个tomcat的配置文件server.xml如下:
    <Connector connectionTimeout="20000" port="8181" protocol="HTTP/1.1" redirectPort="8443"/>
    第一步:安装tomcat。D:\DevelopApp\Tomcat\apache-tomcat-7.0.61-solr
    第二步:把solr的war包复制到tomcat 的webapp目录下。把\solr-4.10.3\dist\solr-4.10.3.war复制到D:\DevelopApp\Tomcat\apache-tomcat-7.0.61-solr\webapps下。改名为solr.war
    第三步:solr.war解压。使用压缩工具解压或者启动tomcat自动解压。解压之后删除solr.war
    第四步:把\solr-4.10.3\example\lib\ext目录下的所有的jar包添加到solr工程中。
    第五步:配置solrHome和solrCore。
    (1) 创建一个solrhome(存放solr所有配置文件的一个文件夹)。\solr-4.10.3\example\solr目录就是一个标准的solrhome。
    (2) 把\solr-4.10.3\example\solr文件夹复制到E:\temp路径下,改名为solrhome,改名不是必须的,是为了便于理解。
    (3) 在solrhome下有一个文件夹叫做collection1这就是一个solrcore。就是一个solr的实例。一个solrcore相当于mysql中一个数据库。Solrcore之间是相互隔离的。
    i. 在solrcore中有一个文件夹叫做conf,包含了索引solr实例的配置信息。
    ii. 在conf文件夹下有一个solrconfig.xml。配置实例的相关信息。如果使用默认配置可以不用做任何修改。
    Xml的配置信息:
    Lib:solr服务依赖的扩展包,默认的路径是collection1\lib文件夹,如果没有,就创建一个。
    dataDir:配置了索引库的存放路径。默认路径是collection1\data文件夹,如果没有data文件夹,会自动创建。
    requestHandler:

    第六步:告诉solr服务器配置文件关于solrHome的位置。修改web.xml使用jndi的方式告诉solr服务器。Solr/home名称必须是固定的。

    第七步:启动tomcat
    第八步:访问http://localhost:8181/solr/



    展开全文
  • 为了高效的检索,通常都用建立索引的方式提高检索速度。因为不同类型的数据存储格式、特征提取方法等等都是不同的,所以建立索引的类型也是不同的,检索的方法也是不同的。 对文本建立索引的数据结构是倒排索引;对...

    信息检索包含内容非常广,包含文本(搜索引擎)、 图片(以图搜索)、音频(歌曲识别)、视频等多种类型数据的检索。为了高效的检索,通常都用建立索引的方式提高检索速度。因为不同类型的数据存储格式、特征提取方法等等都是不同的,所以建立索引的类型也是不同的,检索的方法也是不同的。

    对文本建立索引的数据结构是倒排索引;对关系型数据库中的数据建立索引的数据结构是B-tree;对图片建立索引,根据特征提取方式的不同,方法也是不同的,Hash、乘积量化等方法比较主流。

    目前,针对不同类型的数据也有不同的工具针对不同的数据建立索引。Lucene和ElasticSearch都可以认为是全文索引的工具,是信息检索的一部分,下图清晰的介绍了全文索引的基本知识: 

         

    接下来,将简单介绍ElasticSearch与Lucene、Mysql、Solr之间的关系 

    1.Lucene和ElasticSearch的关系

    简单直观的讲,Lucene和ElasticSearch的关系就是飞机发动机和飞机的关系: 

    (1) 数据结构:关系型数据库通过增加一个 索引 比如一个 B树(B-tree)索引 到指定的列上,以便提升数据检索速度。Elasticsearch 和 Lucene 使用了一个叫做倒排索引的结构来达到相同的目的。

    (2) Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。无论是开源还是私有, Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库。

    但是 Lucene 仅仅只是一个库。为了充分发挥其功能,需要使用 Java 并将 Lucene 直接集成到应用程序中。

    (3) Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。

    然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。简单描述:

    • 一个分布式的实时文档存储,每个字段 可以被索引与搜索
    • 一个分布式实时分析搜索引擎
    • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

    Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。

    2.ElasticSearch和Solr 的关系

    Solr

    Apache Solr 是一个基于名为 Lucene 的 Java 库构建的开源搜索平台。它以用户友好的方式提供 Apache Lucene 的搜索功能。

    作为一个行业参与者已近十年,它是一个成熟的产品,拥有强大而广泛的用户社区。

    它提供分布式索引,复制,负载平衡查询以及自动故障转移和恢复。如果它被正确部署然后管理得好,它就能够成为一个高度可靠,可扩展且容错的搜索引擎。

    很多互联网巨头,如 Netflix,eBay,Instagram 和亚马逊(CloudSearch)都使用 Solr,因为它能够索引和搜索多个站点。

    主要功能列表包括:

    • 全文搜索
    • 突出
    • 分面搜索
    • 实时索引
    • 动态群集
    • 数据库集成
    • NoSQL 功能和丰富的文档处理(例如 Word 和 PDF 文件)

     

    其他方面比较:

    solr集群搭建是依赖Zookeeper进行元数据管理的,elasticsearch集群则是自己管理,不需要依赖其他第三方,使得elasticsearch集群搭建更方便、快捷。

    3.关系型数据库MySql和ElasticSearch的关系

     

    从上表中可以看出:

    1. MySQL 中的数据库(DataBase),等价于 ES 中的索引(Index)。

    2. MySQL 中一个数据库下面有 N 张表(Table),等价于1个索引 Index 下面有 N 多类型(Type)。

    3. MySQL 中一个数据库表(Table)下的数据由多行(Row)多列(column,属性)组成,等价于1个 Type 由多个文档(Document)和多 Field 组成。

    4. MySQL 中定义表结构、设定字段类型等价于 ES 中的 Mapping。举例说明,在一个关系型数据库里面,Schema 定义了表、每个表的字段,还有表和字段之间的关系。与之对应的,在 ES 中,Mapping 定义索引下的 Type 的字段处理规则,即索引如何建立、索引类型、是否保存原始索引 JSON 文档、是否压缩原始 JSON 文档、是否需要分词处理、如何进行分词处理等。

    5. MySQL 中的增 insert、删 delete、改 update、查 search 操作等价于 ES 中的增 PUT/POST、删 Delete、改 _update、查 GET。其中的修改指定条件的更新 update 等价于 ES 中的 update_by_query,指定条件的删除等价于 ES 中的 delete_by_query。

    6. MySQL 中的 group by、avg、sum 等函数类似于 ES 中的 Aggregations 的部分特性。

    7. MySQL 中的去重 distinct 类似 ES 中的 cardinality 操作。

    8. MySQL 中的数据迁移等价于 ES 中的 reindex 操作。

    (1)ES可以认为是NoSql的数据库,最大的缺点是不支持事物(当然,关系型数据库为了支持事物,损失很多的性能);

    (2)以查询为主的情况下,可以替代部分关系型数据库的功能;

    (3)关系型数据库在数据量小(百万级以下)情况下,无论是查询还是修改,都还是很有优势的;

    (4)对于大量日志的分析和存储,相对于Mysql,ES还是很有优势;

    DB-Engines对ElasticSearch和Mysql做了一个系统下的对比:

    Editorial information provided by DB-Engines
    Name Elasticsearch  Xexclude from comparison MySQL  Xexclude from comparison
    Description A distributed, RESTful modern search and analytics engine based on Apache Lucene infoElasticsearch lets you perform and combine many types of searches such as structured, unstructured, geo, and metric Widely used open source RDBMS
    Primary database model Search engine Relational DBMS infoKey/Value like access via memcached API
    Secondary database models Document store Document store
    Key-value store
    DB-Engines Ranking infomeasures the popularity of database management systems ranking trend
    Trend Chart
    Score 145.25
    Rank #8   Overall
      #1   Search engines
    Score 1167.29
    Rank #2   Overall
      #2   Relational DBMS
    Website www.elastic.co/­products/­elasticsearch www.mysql.com
    Technical documentation www.elastic.co/­guide/­en/­elasticsearch/­reference/­current/­index.html dev.mysql.com/­doc
    Developer Elastic Oracle infosince 2010, originally MySQL AB, then Sun
    Initial release 2010 1995
    Current release 6.6.0, January 2019 8.0.15, February 2019
    License infoCommercial or Open Source Open Source infoApache Version 2; Elastic License Open Source infoGPL version 2. Commercial licenses with extended functionallity are available
    Cloud-based only infoOnly available as a cloud service no no
    DBaaS offerings (sponsored links) infoDatabase as a Service

    Providers of DBaaS offerings, please contact us to be listed.
    Elasticsearch Service on Elastic Cloud: Try out the official hosted Elasticsearch and Kibana offering available on AWS and GCP that's powered by the creators of Elasticsearch.
    • Azure Database for MySQL: A fully managed, scalable MySQL relational database with high availability and security built in at no extra cost
    • Google Cloud SQL: A fully-managed database service for the Google Cloud Platform
    Implementation language Java C and C++
    Server operating systems All OS with a Java VM FreeBSD
    Linux
    OS X
    Solaris
    Windows
    Data scheme schema-free infoFlexible type definitions. Once a type is defined, it is persistent yes
    Typing infopredefined data types such as float or date yes yes
    XML support infoSome form of processing data in XML format, e.g. support for XML data structures, and/or support for XPath, XQuery or XSLT. no yes
    Secondary indexes yes infoAll search fields are automatically indexed yes
    SQL infoSupport of SQL SQL-like query language yes infowith proprietary extensions
    APIs and other access methods Java API
    RESTful HTTP/JSON API
    Proprietary native API
    ADO.NET
    JDBC
    ODBC
    Supported programming languages .Net
    Groovy
    Java
    JavaScript
    Perl
    PHP
    Python
    Ruby
    Community Contributed Clients
    Ada
    C
    C#
    C++
    D
    Delphi
    Eiffel
    Erlang
    Haskell
    Java
    JavaScript (Node.js)
    Objective-C
    OCaml
    Perl
    PHP
    Python
    Ruby
    Scheme
    Tcl
    Server-side scripts infoStored procedures yes yes infoproprietary syntax
    Triggers yes infoby using the 'percolation' feature yes
    Partitioning methods infoMethods for storing different data on different nodes Sharding horizontal partitioning, sharding with MySQL Cluster or MySQL Fabric
    Replication methods infoMethods for redundantly storing data on multiple nodes yes Master-master replication
    Master-slave replication
    MapReduce infoOffers an API for user-defined Map/Reduce methods ES-Hadoop Connector no
    Consistency concepts infoMethods to ensure consistency in a distributed system Eventual Consistency infoSynchronous doc based replication. Get by ID may show delays up to 1 sec. Configurable write consistency: one, quorum, all Immediate Consistency
    Foreign keys infoReferential integrity no yes infonot for MyISAM storage engine
    Transaction concepts infoSupport to ensure data integrity after non-atomic manipulations of data no ACID infonot for MyISAM storage engine
    Concurrency infoSupport for concurrent manipulation of data yes yes infotable locks or row locks depending on storage engine
    Durability infoSupport for making data persistent yes yes
    In-memory capabilities infoIs there an option to define some or all structures to be held in-memory only. Memcached and Redis integration yes
    User concepts infoAccess control   Users with fine-grained authorization concept infono user groups or roles
    More information provided by the system vendor
      Elasticsearch MySQL
    Specific characteristics Elasticsearch is a highly scalable open source full-text search and analytics engine....
    » more
     
    Competitive advantages Open source, real-time index, search and analysis, horizontally scalable, distributed,...
    » more
     
    Typical application scenarios
    » more
     
    Key customers
    » more
     
    Market metrics More than 250 million cumulative downloads More than 100,000 community members in...
    » more
     
    Licensing and pricing models The Elastic Stack (Elasticsearch, Kibana, Beats, and Logstash) is free and open source...
    » more
     

    We invite representatives of system vendors to contact us for updating and extending the system information,
    and for displaying vendor-provided information such as key customers, competitive advantages and market metrics.

    Related products and services
    3rd parties Dremio: Analyze your data with standard SQL and any BI tool. Accelerate your queries up to 1,000x.
    » more

    Elastic Cloud: Try the official hosted Elasticsearch.
    » more
    Dremio is like magic for MySQL accelerating your analytical queries up to 1,000x.
    » more

    General SQL Parser: Instantly adding parsing, decoding, analysis and rewrite SQL processing capability to your products.
    » more

    Progress DataDirect: Data connectivity across standard SQL and REST
    » more

    Navicat for MySQL is the ideal solution for MySQL/MariaDB administration and development.
    » more

    ScaleGrid: Fully managed MySQL-as-a-Service.
    » more

    CData: Connect to Big Data & NoSQL through standard Drivers.
    » more

    Azure Database for MySQL provides fully managed, enterprise-ready community MySQL database as a service
    » more

    We invite representatives of vendors of related products to contact us for presenting information about their offerings here.

    More resources
      Elasticsearch MySQL
    DB-Engines blog posts

    PostgreSQL is the DBMS of the Year 2017
    2 January 2018, Paul Andlinger, Matthias Gelbmann

    Elasticsearch moved into the top 10 most popular database management systems
    3 July 2017, Matthias Gelbmann

    MySQL, PostgreSQL and Redis are the winners of the March ranking
    2 March 2016, Paul Andlinger

    show all

    MariaDB strengthens its position in the open source RDBMS market
    5 April 2018, Matthias Gelbmann

    The struggle for the hegemony in Oracle's database empire
    2 May 2017, Paul Andlinger

    Microsoft SQL Server is the DBMS of the Year
    4 January 2017, Matthias Gelbmann, Paul Andlinger

    show all

    Recent citations in the news

    Toshi: A full text search engine modeled after Elasticsearch
    14 January 2019, JAXenter

    Data Silos and Breaches: Building a Long-term Security Operations Platform with Elasticsearch
    25 January 2019, TDWI

    Another Bank Found in Elasticsearch Database Leaks
    24 January 2019, Infosecurity Magazine

    Online casino group leaks information on 108 million bets, including user details
    21 January 2019, ZDNet

    James Spiteri on why security teams need Elastic Search -
    23 January 2019, Enterprise Times

    provided by Google News

    How to create tables and add data to MySQL database with MySQL Workbench
    8 February 2019, TechRepublic

    Highly Available MySQL Clustering at WePay Using Orchestrator, Consul and HAProxy
    10 February 2019, InfoQ.com

    MySQL database management vulnerability opens the door to data theft
    21 January 2019, SiliconANGLE News

    Love data? Learn MySQL for a measly $11 with this online course.
    23 January 2019, Mashable

    MySQL Design Flaw Allows Malicious Servers to Steal Files from Clients
    21 January 2019, BleepingComputer

    provided by Google News

    Job opportunities

    Return to Work Program
    Netflix, Los Gatos, CA

    Frontend Software Engineer (React) - Chicago, IL
    Telnyx, Chicago, IL

    Data Scientist / Engineer
    IBM, Armonk, NY

    Data Engineer (Entry-Level) - 2010953
    Software Engineering Institute, Arlington, VA

    Associate Engineer
    Conde Nast, New York, NY

    Database Administrator
    etouch, Mountain View, CA

    Database Administrator
    LT Consulting LLC, Reston, VA

    Database Administrator
    Hagen Software, Washington, DC

    Database Administrator
    Leidos, Reston, VA

    Database Administrator
    QVine Corporation, Reston, VA

    参考:

    全文搜索引擎 ElasticSearch 还是 Solr?

    System Properties Comparison Elasticsearch vs. MySQL

    展开全文
  • Elasticsearch与Solr

    2018-07-10 12:02:06
    搜索引擎选择: Elasticsearch与Solr搜索引擎选型调研文档Elasticsearch简介*Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。它可以用于全文搜索,结构化搜索以及...

    搜索引擎选择: Elasticsearch与Solr
    (转载,作为个人收藏)

    搜索引擎选型调研文档

    Elasticsearch简介*

    Elasticsearch是一个实时分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。

    它可以用于全文搜索结构化搜索以及分析,当然你也可以将这三者进行组合。

    Elasticsearch是一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎,可以说Lucene是当今最先进,最高效的全功能开源搜索引擎框架。

    但是Lucene只是一个框架,要充分利用它的功能,需要使用JAVA,并且在程序中集成Lucene。需要很多的学习了解,才能明白它是如何运行的,Lucene确实非常复杂。

    Elasticsearch使用Lucene作为内部引擎,但是在使用它做全文搜索时,只需要使用统一开发好的API即可,而不需要了解其背后复杂的Lucene的运行原理。

    当然Elasticsearch并不仅仅是Lucene这么简单,它不但包括了全文搜索功能,还可以进行以下工作:

    • 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。

    • 实时分析的分布式搜索引擎。

    • 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

    这么多的功能被集成到一台服务器上,你可以轻松地通过客户端或者任何你喜欢的程序语言与ES的RESTful API进行交流。

    Elasticsearch的上手是非常简单的。它附带了很多非常合理的默认值,这让初学者很好地避免一上手就要面对复杂的理论,

    它安装好了就可以使用了,用很小的学习成本就可以变得很有生产力。

    随着越学越深入,还可以利用Elasticsearch更多高级的功能,整个引擎可以很灵活地进行配置。可以根据自身需求来定制属于自己的Elasticsearch。

    使用案例:

    • 维基百科使用Elasticsearch来进行全文搜做并高亮显示关键词,以及提供search-as-you-type、did-you-mean等搜索建议功能。

    • 英国卫报使用Elasticsearch来处理访客日志,以便能将公众对不同文章的反应实时地反馈给各位编辑。

    • StackOverflow将全文搜索与地理位置和相关信息进行结合,以提供more-like-this相关问题的展现。

    • GitHub使用Elasticsearch来检索超过1300亿行代码。

    • 每天,Goldman Sachs使用它来处理5TB数据的索引,还有很多投行使用它来分析股票市场的变动。

    但是Elasticsearch并不只是面向大型企业的,它还帮助了很多类似DataDog以及Klout的创业公司进行了功能的扩展。

    Elasticsearch的优缺点**:

    优点

    1. Elasticsearch是分布式的。不需要其他组件,分发是实时的,被叫做”Push replication”。
    2. Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。
    3. 处理多租户multitenancy)不需要特殊配置,而Solr则需要更多的高级设置。
    4. Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。
    5. 各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。

    缺点

    1. 只有一名开发者(当前Elasticsearch GitHub组织已经不只如此,已经有了相当活跃的维护者)
    2. 还不够自动(不适合当前新的Index Warmup API)

    Solr简介*

    Solr(读作“solar”)是Apache Lucene项目的开源企业搜索平台。其主要功能包括全文检索命中标示分面搜索动态聚类数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。Solr是最流行的企业级搜索引擎,Solr4 还增加了NoSQL支持。

    Solr是用Java编写、运行在Servlet容器(如 Apache Tomcat 或Jetty)的一个独立的全文搜索服务器。 Solr采用了 Lucene Java 搜索库为核心的全文索引和搜索,并具有类似REST的HTTP/XML和JSON的API。Solr强大的外部配置功能使得无需进行Java编码,便可对其进行调整以适应多种类型的应用程序。Solr有一个插件架构,以支持更多的高级定制。

    因为2010年 Apache Lucene 和 Apache Solr 项目合并,两个项目是由同一个Apache软件基金会开发团队制作实现的。提到技术或产品时,Lucene/Solr或Solr/Lucene是一样的。

    Solr的优缺点

    优点

    1. Solr有一个更大、更成熟的用户、开发和贡献者社区。
    2. 支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式。
    3. Solr比较成熟、稳定。
    4. 不考虑建索引的同时进行搜索,速度更快。

    缺点

    1. 建立索引时,搜索效率下降,实时索引搜索效率不高。

    Elasticsearch与Solr的比较*

    当单纯的对已有数据进行搜索时,Solr更快。

    Search Fesh Index While Idle

    当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。

    search_fresh_index_while_indexing

    随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。

    search_fresh_index_while_indexing

    综上所述,Solr的架构不适合实时搜索的应用。

    实际生产环境测试*

    下图为将搜索引擎从Solr转到Elasticsearch以后的平均查询速度有了50倍的提升。

    average_execution_time

    Elasticsearch 与 Solr 的比较总结

    • 二者安装都很简单;
    • Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;
    • Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;
    • Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;
    • Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。

    Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。

    其他基于Lucene的开源搜索引擎解决方案*

    1. 直接使用 Lucene

    说明:Lucene 是一个 JAVA 搜索类库,它本身并不是一个完整的解决方案,需要额外的开发工作。

    优点:成熟的解决方案,有很多的成功案例。apache 顶级项目,正在持续快速的进步。庞大而活跃的开发社区,大量的开发人员。它只是一个类库,有足够的定制和优化空间:经过简单定制,就可以满足绝大部分常见的需求;经过优化,可以支持 10亿+ 量级的搜索。

    缺点:需要额外的开发工作。所有的扩展,分布式,可靠性等都需要自己实现;非实时,从建索引到可以搜索中间有一个时间延迟,而当前的“近实时”(Lucene Near Real Time search)搜索方案的可扩展性有待进一步完善

    说明:基于 Lucene 的,支持分布式,可扩展,具有容错功能,准实时的搜索方案。

    优点:开箱即用,可以与 Hadoop 配合实现分布式。具备扩展和容错机制。

    缺点:只是搜索方案,建索引部分还是需要自己实现。在搜索功能上,只实现了最基本的需求。成功案例较少,项目的成熟度稍微差一些。因为需要支持分布式,对于一些复杂的查询需求,定制的难度会比较大。

    说明:Map/Reduce 模式的,分布式建索引方案,可以跟 Katta 配合使用。

    优点:分布式建索引,具备可扩展性。

    缺点:只是建索引方案,不包括搜索实现。工作在批处理模式,对实时搜索的支持不佳。

    说明:基于 Lucene 的一系列解决方案,包括 准实时搜索 zoie ,facet 搜索实现 bobo ,机器学习算法 decomposer ,摘要存储库 krati ,数据库模式包装 sensei 等等

    优点:经过验证的解决方案,支持分布式,可扩展,丰富的功能实现

    缺点:与 linkedin 公司的联系太紧密,可定制性比较差

    说明:基于 Lucene,索引存在 cassandra 数据库中

    优点:参考 cassandra 的优点

    缺点:参考 cassandra 的缺点。另外,这只是一个 demo,没有经过大量验证

    说明:基于 Lucene,索引存在 HBase 数据库中

    优点:参考 HBase 的优点

    缺点:参考 HBase 的缺点。另外,在实现中,lucene terms 是存成行,但每个 term 对应的 posting lists 是以列的方式存储的。随着单个 term 的 posting lists 的增大,查询时的速度受到的影响会非常大

    展开全文
  • 搜索引擎选择: Elasticsearch与Solr 搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。 它可以用于全文搜索,结构化...

    搜索引擎选择: Elasticsearch与Solr

    搜索引擎选型调研文档

     

    Elasticsearch简介*

    Elasticsearch是一个实时分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。

    它可以用于全文搜索结构化搜索以及分析,当然你也可以将这三者进行组合。

    Elasticsearch是一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎,可以说Lucene是当今最先进,最高效的全功能开源搜索引擎框架。

    但是Lucene只是一个框架,要充分利用它的功能,需要使用Java,并且在程序中集成Lucene。需要很多的学习了解,才能明白它是如何运行的,Lucene确实非常复杂。

    Elasticsearch使用Lucene作为内部引擎,但是在使用它做全文搜索时,只需要使用统一开发好的API即可,而不需要了解其背后复杂的Lucene的运行原理。

    当然Elasticsearch并不仅仅是Lucene这么简单,它不但包括了全文搜索功能,还可以进行以下工作:

    • 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。

    • 实时分析的分布式搜索引擎。

    • 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

    这么多的功能被集成到一台服务器上,你可以轻松地通过客户端或者任何你喜欢的程序语言与ES的RESTful API进行交流。

    Elasticsearch的上手是非常简单的。它附带了很多非常合理的默认值,这让初学者很好地避免一上手就要面对复杂的理论,

    它安装好了就可以使用了,用很小的学习成本就可以变得很有生产力。

    随着越学越深入,还可以利用Elasticsearch更多高级的功能,整个引擎可以很灵活地进行配置。可以根据自身需求来定制属于自己的Elasticsearch。

    使用案例:

    • 维基百科使用Elasticsearch来进行全文搜做并高亮显示关键词,以及提供search-as-you-type、did-you-mean等搜索建议功能。

    • 英国卫报使用Elasticsearch来处理访客日志,以便能将公众对不同文章的反应实时地反馈给各位编辑。

    • StackOverflow将全文搜索与地理位置和相关信息进行结合,以提供more-like-this相关问题的展现。

    • GitHub使用Elasticsearch来检索超过1300亿行代码。

    • 每天,Goldman Sachs使用它来处理5TB数据的索引,还有很多投行使用它来分析股票市场的变动。

    但是Elasticsearch并不只是面向大型企业的,它还帮助了很多类似DataDog以及Klout的创业公司进行了功能的扩展。

    Elasticsearch的优缺点**:

    优点

    1. Elasticsearch是分布式的。不需要其他组件,分发是实时的,被叫做”Push replication”。
    2. Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。
    3. 处理多租户multitenancy)不需要特殊配置,而Solr则需要更多的高级设置。
    4. Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。
    5. 各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。

    缺点

    1. 只有一名开发者(当前Elasticsearch GitHub组织已经不只如此,已经有了相当活跃的维护者)
    2. 还不够自动(不适合当前新的Index Warmup API)

    Solr简介*

    Solr(读作“solar”)是Apache Lucene项目的开源企业搜索平台。其主要功能包括全文检索命中标示分面搜索动态聚类数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。Solr是最流行的企业级搜索引擎,Solr4 还增加了NoSQL支持。

    Solr是用Java编写、运行在Servlet容器(如 Apache Tomcat 或Jetty)的一个独立的全文搜索服务器。 Solr采用了 Lucene Java 搜索库为核心的全文索引和搜索,并具有类似REST的HTTP/XML和JSON的API。Solr强大的外部配置功能使得无需进行Java编码,便可对其进行调整以适应多种类型的应用程序。Solr有一个插件架构,以支持更多的高级定制。

    因为2010年 Apache Lucene 和 Apache Solr 项目合并,两个项目是由同一个Apache软件基金会开发团队制作实现的。提到技术或产品时,Lucene/Solr或Solr/Lucene是一样的。

    Solr的优缺点

    优点

    1. Solr有一个更大、更成熟的用户、开发和贡献者社区。
    2. 支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式。
    3. Solr比较成熟、稳定。
    4. 不考虑建索引的同时进行搜索,速度更快。

    缺点

    1. 建立索引时,搜索效率下降,实时索引搜索效率不高。

    Elasticsearch与Solr的比较*

    当单纯的对已有数据进行搜索时,Solr更快。

    Search Fesh Index While Idle

    当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。

    search_fresh_index_while_indexing

    随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。

    search_fresh_index_while_indexing

    综上所述,Solr的架构不适合实时搜索的应用。

    实际生产环境测试*

    下图为将搜索引擎从Solr转到Elasticsearch以后的平均查询速度有了50倍的提升。

    average_execution_time

    Elasticsearch 与 Solr 的比较总结

    • 二者安装都很简单;
    • Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;
    • Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;
    • Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;
    • Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。

    Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。

    其他基于Lucene的开源搜索引擎解决方案*

    1. 直接使用 Lucene

    说明:Lucene 是一个 JAVA 搜索类库,它本身并不是一个完整的解决方案,需要额外的开发工作。

    优点:成熟的解决方案,有很多的成功案例。apache 顶级项目,正在持续快速的进步。庞大而活跃的开发社区,大量的开发人员。它只是一个类库,有足够的定制和优化空间:经过简单定制,就可以满足绝大部分常见的需求;经过优化,可以支持 10亿+ 量级的搜索。

    缺点:需要额外的开发工作。所有的扩展,分布式,可靠性等都需要自己实现;非实时,从建索引到可以搜索中间有一个时间延迟,而当前的“近实时”(Lucene Near Real Time search)搜索方案的可扩展性有待进一步完善

    说明:基于 Lucene 的,支持分布式,可扩展,具有容错功能,准实时的搜索方案。

    优点:开箱即用,可以与 Hadoop 配合实现分布式。具备扩展和容错机制。

    缺点:只是搜索方案,建索引部分还是需要自己实现。在搜索功能上,只实现了最基本的需求。成功案例较少,项目的成熟度稍微差一些。因为需要支持分布式,对于一些复杂的查询需求,定制的难度会比较大。

    说明:Map/Reduce 模式的,分布式建索引方案,可以跟 Katta 配合使用。

    优点:分布式建索引,具备可扩展性。

    缺点:只是建索引方案,不包括搜索实现。工作在批处理模式,对实时搜索的支持不佳。

    说明:基于 Lucene 的一系列解决方案,包括 准实时搜索 zoie ,facet 搜索实现 bobo ,机器学习算法 decomposer ,摘要存储库 krati ,数据库模式包装 sensei 等等

    优点:经过验证的解决方案,支持分布式,可扩展,丰富的功能实现

    缺点:与 linkedin 公司的联系太紧密,可定制性比较差

    说明:基于 Lucene,索引存在 cassandra 数据库中

    优点:参考 cassandra 的优点

    缺点:参考 cassandra 的缺点。另外,这只是一个 demo,没有经过大量验证

    说明:基于 Lucene,索引存在 HBase 数据库中

    优点:参考 HBase 的优点

    缺点:参考 HBase 的缺点。另外,在实现中,lucene terms 是存成行,但每个 term 对应的 posting lists 是以列的方式存储的。随着单个 term 的 posting lists 的增大,查询时的速度受到的影响会非常大

    展开全文
  • Elasticsearch与Solr 选型

    2017-09-11 14:49:36
    搜索引擎选择: Elasticsearch与Solr 搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。 它可以用于全文搜索...
  • Elasticsearch与solr

    2019-03-18 14:54:19
    它可以帮助你用前所未有的速度去处理大规模数据。它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行组合。Elasticsearch是一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎,可以说Lucene...
  • Elastic search与Solr 对比方案

    千次阅读 2016-02-29 21:43:40
    搜索引擎选择: Elasticsearch与Solr 搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。 它可以用于全文搜索...
  • Elasticsearch与Solr比较

    2018-08-23 11:04:10
    它可以帮助你用前所未有的速度去处理大规模数据。 它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行组合。 Elasticsearch是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,可以说...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 138
精华内容 55
关键字:

lucene与solr速度