Apache Solr Hello World示例

本文介绍了Apache Solr的基础知识,包括如何在本地安装和启动Solr,管理控制台的使用,创建和管理Solr Core,以及添加、查询、删除文档。此外,文章还对比了Solr与Elasticsearch和关系数据库的异同,并强调了Solr的开源、灵活性和高性能搜索特性。
摘要由CSDN通过智能技术生成
apache solr徽标

Apache Solr是Apache Software Foundation提供的基于开源REST-API的企业实时搜索和分析引擎服务器。 它的核心搜索功能是使用Apache Lucene Framework构建的,并添加了一些额外的有用功能。 它是用Java语言编写的。

SOLR代表使用复制来搜索Lucene。 它的主要功能是索引编制和伺服。 像ElasticSearch一样,它也是基于文档的NoSQL数据存储。

注意
它的官方网站: http : //lucene.apache.org/solr/ 。 Solr的最新版本是6.4.2,已于2017年3月7日发布。

Apache Solr功能:-

  • 开源
  • 支持全文搜索和多面导航功能
  • 热门精选
  • 相关结果
  • 使用Apache Lucene反向索引为其文档建立索引。
  • 支持建议和拼写建议
  • 支持自动完成
  • 支持地理空间搜索
  • 支持基于REST的API(HTTP上的JSON)
  • 支持实时搜索和分析
  • Solr的最新版本(5.x版或更高版本)支持分布式和Colud技术。
  • 在撰写本文时,它支持跨平台功能。
  • 内置的身份验证和授权安全性
  • 支持流媒体

Apache Solr的优点或好处:-

  • 开源
  • 它具有非常有用的管理界面。
  • REST API轻巧
  • 它是非常快速,简单,强大且灵活的搜索引擎
  • 与ElasticSearch不同,它不仅支持JSON格式,还支持其他有用的格式:XML,PHP,Ruby,Python,XSLT,Velocity和基于HTTP的自定义Java二进制输出格式。
  • 高度可用。 简单且高度可扩展。 强大,容错和可靠的搜索引擎。
  • 无模式的数据存储。 但是,如果需要,我们可以创建一个架构来支持我们的数据。
  • 由于Apache Lucene反向索引而提高了搜索性能。
  • 支持结构化和非结构化数据
  • 支持分布式,分片,复制,群集和多节点体系结构
  • 支持批量操作
  • 使用新插件可轻松扩展
  • 支持缓存数据
  • 对大数据环境有用
  • 与ElasticSearch不同,它支持MapReduce算法

Apache Solr的缺点或局限性:

  • 不能用作主数据存储。 仅用作辅助数据存储。
  • 不是符合ACID的数据存储
  • 不支持交易和分布式交易
  • 不支持联接和复杂查询
  • 对规范化数据无效

使用Apache Solr的受欢迎的客户:

  • CNET,克鲁格,M TV
  • Flipkart.com,Sourceforge.net,guardian.co.uk
  • 易趣,digg
  • Instagram的
  • AT&T互动
  • 高盛
  • 美国在线音乐,美国在线旅行,美国在线黄页
  • 迪士尼
  • 苹果公司。
  • 更多客户参考此链接

诸如Cloudera,Hortonworks和MapR之类的流行Hadoop发行版内部都使用Apache Solr来支持搜索功能。

注意
众所周知,Apache Solr用Java编写。 因此,我们应该在系统路径中包含Java / JRE才能使用它。 请正确安装和设置Java Environment。 Apache Solr 5.x需要Java 7或更高版本。 Apache 6.x需要Java 8或更高版本。

我们可以通过两种方式使用Apache Solr:

  • 独立的Apache Solr服务器
  • 云和分布式Apached Solr服务器

在本教程中,我们将使用独立Apache Solr Server v6.4.2来演示我们的示例。

注意
在初始版本的Apache Solr中,不支持Colud功能。 从Apache Solr 4.0发行版开始,它通过使用SolrCloud组件支持Cloud。

1.在本地安装Apache Solr

请按照以下步骤在Windows,基于Linux(如Ubuntu)或Mac OS环境中本地设置独立Apache Solr Server。

注意
要下载最新的Apache Solr,请参考此官方下载链接

1.1 Windows环境

  • 下载最新版本的Apache Solr
  • 使用此链接下载Apache Solr V. 6.4.2。 您将获得solr-6.4.2.zip于Windows环境的solr-6.4.2.zip

  • 将zip文件解压缩到本地文件系统
  • solr-6.4.2.zip文件solr-6.4.2.zip压缩到F:\solr-6.4.2

  • 设置环境变量
  • 让我们假设SOLR_HOME=F:\solr-6.4.2

PATH=${SOLR_HOME}\bin

1.2 Linux或Mac环境

  • 下载最新版本的Apache Solr
  • 使用此链接下载Apache Solr V. 6.4.2。 您将在Linux或Mac环境中获得solr-6.4.2.tgz

  • 解压缩zip文件
$ tar -xvf solr-6.4.2.tgz
  • 设置环境变量
  • 让我们假设SOLR_HOME=/home/rambabu/solr-6.4.2

    export PATH=${SOLR_HOME}\bin

    现在,我们已经成功安装了Apache Solr。

    2.在本地启动/停止Apache Solr

    一些操作Apache Solr Server的命令。

    2.1检查Apache Solr的状态
    在启动Solr Server之前,请执行以下“ status”命令以了解状态。

    cd solr-6.4.2
    $ ./solr status
    
    No Solr nodes are running.

    2.2启动Apache Solr

    $ ./solr start
    Archiving 1 old GC log files to /home/rambabu/solr-6.4.2/server/logs/archived
    Archiving 1 console log files to /home/rambabu/solr-6.4.2/server/logs/archived
    Rotating solr logs, keeping a max of 9 generations
    Waiting up to 180 seconds to see Solr running on port 8983 [\]  
    Started Solr server on port 8983 (pid=24563). Happy searching!

    如果观察上述启动命令日志,我们可以理解Apache Solr服务器是在默认端口号8983上启动的。现在再次执行“ status”命令以了解服务器状态。

    $ ./solr status
    
    Found 1 Solr nodes: 
    
    Solr process 24563 running on port 8983
    {
      "solr_home":"/home/rambabu/solr-6.4.2/server/solr",
      "version":"6.4.2 34a975ca3d4bd7fa121340e5bcbf165929e0542f - ishan - 2017-03-01 23:30:23",
      "startTime":"2017-03-22T15:11:30.804Z",
      "uptime":"0 days, 0 hours, 5 minutes, 10 seconds",
      "memory":"35.3 MB (%7.2) of 490.7 MB"}

    用不同的端口号启动Apache Solr

    $ ./solr start –p 9000

    2.3停止Apache Solr
    使用“停止”命令停止服务器

    $ ./solr stop
    
    Sending stop command to Solr running on port 8983 ... waiting up to 180 seconds to allow Jetty process 24563 to stop gracefully.

    2.4重新启动Apache Solr

    $ ./solr restart
    
    Sending stop command to Solr running on port 8983 ... waiting up to 180 seconds to allow Jetty process 19442 to stop gracefully.
    Archiving 1 old GC log files to /home/rambabu/solr-6.4.2/server/logs/archived
    Archiving 1 console log files to /home/rambabu/solr-6.4.2/server/logs/archived
    Rotating solr logs, keeping a max of 9 generations
    Waiting up to 180 seconds to see Solr running on port 8983 [\]  
    Started Solr server on port 8983 (pid=19691). Happy searching!

    注意
    在本教程中,由于我将使用Linux(Ubuntu)操作系统,因此我使用了./solr start类的命令。 如果您使用的是Windows操作系统,请使用jsut solr start

    3. Apache Solr术语

    我们将讨论一些重要的ElasticSearch术语: Solr CoreSolr CoreIndexingDocumentField等。

    3.1什么是Solr实例?
    在Apache Solr中,Solr实例是在JVM中运行的Solr实例。 在独立模式下,Solr仅包含一个实例,而在云模式下,它仅包含一个或多个实例。

    3.2什么是Solr核心?
    在Apache Solr中,Solr Core也简称为“ Core”。 核心是所有文档中可用的文本和字段的索引。 一个Solr实例可以包含一个或多个Solr核心。
    换句话说,Solr Core = Apache Lucene索引+ Solr配置的实例(solr.xml,solrconfig.xml等)

    PS:-Apache Solr使用以下重要配置文件:

    • solr.xml
    • solrconfig.xml
    • core.properties

    如果要尝试将Apache Solr作为基于Schama的体系结构进行试验,请参考Apache Solr文档。

    3.3什么是索引?
    在Apache Lucene或Solr中,索引是一种将文档内容添加到Solr索引中的技术,以便我们可以轻松地搜索它们。 Apache Solr使用Apache Lucene反向索引技术对其文档进行索引。 因此,Solr提供了非常快速的搜索功能。

    3.4什么是文件?
    在Apache Solr中,文档是一组字段及其值。 文档是我们存储在Apache Cores中的基本数据单元。 一个核心可以包含一个或多个文档。

    3.5什么是字段?
    在Apache Solr中,字段是存储在文档中的实际数据。 这是一个键与值对。 键指示字段名称和值包含该字段数据。 一个文档可以包含一个或多个字段。 Apache Solr使用此字段数据为文档内容编制索引。

    Apache Solr Architecture

    要记住的要点:

    • Apache Solr独立架构只有一个Solr实例,而随着Solr Cloud Architecture拥有更多实例。
    • Apache Solr使用SolrCloud技术来支持Cloud Architecture。
    • 每个Solr实例可以具有零个或多个Core。
    • 每个核心可以包含零个或多个文档。
    • 每个文档可以包含零个或多个字段。
    • 每个字段包含一个键:值对。 键是字段的名称,值是字段的数据。

    注意
    由于本教程仅适用于Apache Solr独立模式,因此我们不讨论SolrCloud术语。

    4. Apache Solr管理控制台

    与ElasticSearch不同,Apache Solr具有Web界面或管理控制台。 这是Apache Solr的优点之一。 对于Solr管理员和程序员来说,查看Solr配置详细信息,运行查询和分析文档字段以微调Solr配置等非常有用。

    启动Apache Solr之后,我们可以使用以下地址访问其管理控制台: http://localhost:8983/solr/

    Apache Solr管理控制台

    如上图所示,Apache Solr最初没有任何内核,这就是为什么它在左侧面板上显示“无可用内核”的原因。

    我们可以使用以下管理控制台:

    • 创建,更新,删除(卸载)和查看核心
    • 创建,更新,删除和查看文档
    • Apache Solr配置
    • 记录信息
    • 监控信息

    5.创建“ helloworld” Apache Solr核心

    我们可以使用以下方式执行Apache Solr操作,例如CRUD,Apache Core或CRUD,Doucment或Field。

    • Apache Solr Comamnds
    • 管理控制台
    • REST API
    • CURL命令

    首先,让我们讨论如何创建Core Use Commands并在管理控制台中查看它们。

    在执行这些命令之前,请使用“ solr start”命令启动Apache Solr。 我们可以使用“ create”命令来创建一个Apache Core,如下所示:

    创建命令语法:

    $ ./solr create -c <SOLR_CORE_NAME>

    在这里,“ create”命令用于创建Core,“-c”选项指定Solr Core Name。

    创建命令示例:-

    $ ./solr create -c helloworld
    
    Copying configuration to new core instance directory:
    /home/rambabu/solr-6.4.2/server/solr/helloworld
    
    Creating new core 'helloworld' using command:
    http://localhost:8983/solr/admin/cores?action=CREATE&name=helloworld&instanceDir=helloworld
    
    {
      "responseHeader":{
        "status":0,
        "QTime":1636},
      "core":"helloworld"}

    如果观察以上输出,我们可以理解“ helloworld”核心已成功创建。 甚至我们都可以在输出中看到以下REST API URL,以创建“ helloworld”核心。

    http://localhost:8983/solr/admin/cores?action=CREATE&name=helloworld&instanceDir=helloworld

    此处,“操作”查询参数指定“创建”操作,名称定义核心名称,instanceDir指定目录名称。 我们可以使用相同或不同的name和instanceDir。

    执行此命令后,如果刷新管理控制台,则在左侧面板上看不到“没有可用的内核”。 现在您可以看到“ Core Selector”选项。 如果单击该按钮,它将在下拉框中显示“ helloworld”核心。 如果选择该核心,它将在左侧面板显示所有信息。 它还在该下拉框中的下方显示了不同的选项:

    • 总览
    • 显示有关该Core的概述信息。

    • 文件资料
    • 在Core中创建/更新/删除文档。

    • 询问
    • 查询或查看文档或字段(数据)。

    它还在${SOLR_HOME}/server/solr/下创建一个文件夹“ helloworld”,如下所示:

    使用所需的文件夹名称创建Apache Core

    创建命令示例:-

    $ ./solr create -c helloworld -d myhellowolrd

    在这里,我们的“ helloworld”核心使用文件夹名称“ myhellowolrd”创建

    6.添加/更新/导入文档到核心

    当我们刚刚创建“ helloworld” Core时,它是空的。 不包含文件或资料。 我们可以使用Apache Solr管理控制台的“文档”选项将文档添加/更新/导入到此核心中。

    我们可以通过直接使用JSON,XML,Binary等不同格式的Content或使用FileUpload选项直接将文件上传为Document来添加Document。

    将文件添加到“ helloworld”核心

    • 访问Solr管理控制台: http://localhost:8983/solr/
    • 单击“核心选择器”选项,然后在下拉框中选择“ helloworld”核心。
    • 点击“文档”选项
    • 观察“ Request-Handler”,它显示“ / update”,这意味着我们将使用文档更新Core
    • 在文档上,单击“选择文件”选项
    • 从$ {SOLR_HOME} / example / films /中选择“ films.json”
    • 点击“提交文件”按钮。

    它使用films.json文件中的可用数据创建一个文档。 我们可以使用xml,csv等文件执行相同的操作。

    7.从核心查询文档

    我们可以使用REST API或管理控制台从A​​pache Core查询文档。

    现在让我们使用Apache Admin Console探索它。

    • 访问Solr管理控制台: http://localhost:8983/solr/
    • 单击“核心选择器”选项,然后在下拉框中选择“ helloworld”核心。
    • 点击左侧面板上的“查询”
    • 观察“ Request-Handler”,它显示“ / select”,这意味着我们要从Core中选择或检索Documents。
    • 单击右侧面板中的“执行查询”按钮
    • 它从“ helloworld”核心检索所有可用文档

    您可以使用以下REST API调用访问相同的结果。 您将在浏览器或REST客户端上看到相同的结果。

    http://localhost:8983/solr/helloworld/select?indent=on&q=*:*&wt=json

    这里的“ q”代表“查询参数以过滤数据”。 它使用“ q = Fieldname:Value”语法。 这里的“ q = *:*”表示查询所有内容。 “ wt”表示“作者类型”或“响应类型”。
    现在让我们查询一些过滤选项。 您可以从Web浏览器或任何REST客户端(例如POSTMAN,Sense,Fidler等)访问此REST API。

    http://localhost:8983/solr/helloworld/select?indent=on&q=directed_by:"Gary Lennon"&wt=json

    在这里,我们从Films Document中检索了所有数据,这些数据与该查询directed_by =“ Gary Lennon”相匹配。 如果您精通SQL,我们可以将此查询转换为以下SQL SELECT命令。

    SELECT * FROM FILMS WHERE directed_by="Gary Lennon"

    您可以使用以下REST API调用访问相同的结果。 您将在浏览器或REST客户端上看到相同的结果。

    http://localhost:8983/solr/helloworld/select?fl=genre&indent=on&q=directed_by:"Shane Acker"&wt=json

    “ fl”代表响应或结果中的字段列表。 我们只想检索“类型”字段。 将此转换为SQL查询。

    SELECT genre FROM FILMS WHERE directed_by="Shane Acker"

    同样,请尝试尝试使用不同的SELECT查询来检索或过滤数据。

    8.删除Apache Solr文档

    在这里,我们将删除一个符合directed_by =“ Zack Snyder”条件的文档。 我们使用相同的“ Request-Handler” =“ / update”,这意味着我们将更新Core。 我们用 ” ”选项表示我们将删除或删除符合给定条件的文档。

    在这里,我们也使用curl命令执行DELETE操作来覆盖CURL命令示例。 您可以使用其他选项(例如REST客户端等)尝试该示例。

    $ curl http://localhost:8983/solr/helloworld/update/?commit=true -H "Content-Type: application/xml" -d "<delete><query>directed_by:'Zack Snyder'</query></delete>"
    <?xml version="1.0" encoding="UTF-8"?>
    <response>
    <lst name="responseHeader"><int name="status">0</int><int name="QTime">563</int></lst>
    </response>

    9.删除Apache Solr Core

    我们可以使用“ Request-Handler” =“ / update”并在Documents上执行添加/更新/删除操作来更新Apache Solr Core。 我们可以使用浏览器上的REST API,管理控制台,REST客户端或CURL命令来执行此操作。 如果需要,我们可以使用Apache Solr管理控制台中的“卸载”选项来删除或删除Cores。

    请按照以下步骤卸载核心

    • 访问Solr管理控制台: http://localhost:8983/solr/
    • 单击“核心选择器”选项,然后在下拉框中选择“ helloworld”核心。
    • 单击右侧面板上的“卸载”按钮。
    • 它从Apache Solr中删除或卸载选定的内核。
    • 它不会从“ server / solr”路径中删除Core文件夹。

    10.为什么选择Apache Solr? 为什么不使用Apache Lucene?

    众所周知,Apache Lucene是流行的搜索引擎(Apache Solr和ElasticSearch)的基本核心API。 但是,Apache Lucene是普通的Java API,仅对基于Java的应用程序有用。

    像ElasticSearch一样,Apache Solr是Apache Lucene API之上的包装器。 它将Java API作为REST API公开,如下图所示。 现在,我们可以在任何应用程序中使用此Search API。 REST API也非常灵活且轻巧。

    11. Apache Solr相对于ElasticSearch相对于关系数据库

    众所周知,Apache Solr和ElasticSearch都使用Apache Lucene来实现其核心功能。 几乎两者都支持相同的功能。 一些明显的相似之处:

    • 两者都在后台使用Apache Lucene。
    • 两者都支持REST Base API。
    • 两者都是开源搜索引擎。
    • 两者都支持BigData和Cloud Technologies。
    • 两者都支持群集管理。
    • 两者都可用作辅助数据存储。
    • 两者都使用Apache Lucene的反向索引来支持快速搜索功能。

    它们具有以下差异。

    • Apache Solr使用一些外部组件:SolrCloud支持云和分布式架构,因为ElasticSearch内置并支持真正的云和分布式架构。
    • Apache Solr使用Apache Zookeepter进行集群管理,而ElasticSearch为此使用Zen Discovery。
    • ElasticSearch仅支持基于JSNO的REST API,而Apache Solr则支持更多格式,例如JSON,XML,Doc,CSV,Binary等。
    • Apache Solr具有内置的安全支持,而ElasticSearch则没有。
    • ElasticSearch仅支持无模式数据存储,因为Apache Solr支持基于模式和较少模式的数据存储。

    Apache Solr和关系数据库之间的区别

    • 关系数据库仅支持结构化数据,其中与Apache Solr一样,结构化和非结构化数据均如此。
    • 关系数据库适合于规范化数据,而Apache Solr则适合于非规范化数据。
    • 关系数据库需要Schema来存储其数据,因为Apache Solr支持基于Schema和Schema较少。
    • 关系数据库支持复杂的查询并在Apache Solr不支持的地方加入。
    • 我们可以将关系数据库用作主要数据存储,而将Apache Solr用作辅助数据存储。

    参考文献

    1. 阿帕奇·索尔(Apache Solr)
    2. 维基百科– Apache Solr
    3. 弹性搜索

    翻译自: https://mkyong.com/solr/apache-solr-hello-world-example/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值