搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)

搜索引擎Solr详解:从0开始搭建、维护及各类使用

  • 一. Solr简介及入门
    • 1.1 什么是搜索引擎
      • 1.1 什么是搜索引擎?
    • 1.2 什么是solr
    • 1.3 Solr与其他产品对比
    • 1.4 Solr的特点、优缺点、使用场景
  • 二. Solr搭建及维护
    • 2.1 Windows端搭建Solr
    • 2.2 Linux端搭建Solr教程
    • 2.3 Solr的管理界面的使用
      • 2.3.1 Dashboard(仪表盘)
      • 2.3.2 Logging(日志)
      • 2.3.3 Core Admin(core管理)
      • 2.3.5 Core新增索引库的方法
      • 2.3.6 Java Properties(Java 属性)
      • 2.3.7 Thread Dump(相关线程)
    • 2.4 Core Selector
      • 2.4 Query的查询详解
    • 2.5 Solr的配置文件的使用
    • 2.6 Solr的分词配置
    • 2.7 Solr的定位配置
  • 三. Solr后端引入及基本使用
    • 3.1 引入SpringBoot项目教程
    • 3.2 基本查询方法:增、删、查、改
    • 3.3 注意事项
  • 四. Solr高级语法
    • 4.1 分词
    • 4.2 高亮
    • 4.3 分组
    • 4.4 统计
    • 4.5 其他语法
  • 五. Solr优化
    • 5.1 Solr查询连接池
    • 5.2 Solr查询封装
    • 5.3 Solr其他优化
  • 六. 扩展

一. Solr简介及入门

1.1 什么是搜索引擎

1.1 什么是搜索引擎?

  • 专业角度:
    • 搜索引擎(Search Engine)是指根据一定的策略、运用特定的计算机程序从互联网上回搜集信息,在对信答息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。搜索引擎包括全文索引、目录索引、元搜索引擎、垂直搜索引擎、集合式搜索引擎、门户搜索引擎与免费链接列表等。
    • 所谓搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出制定信息反馈给用户的一门检索技术。搜索引擎依托于多种技术,如网络爬虫技术、检索排序技术、网页处理技术、大数据处理技术、自然语言处理技术等,为信息检索用户提供快速、高相关性的信息服务。搜索引擎技术的核心模块一般包括爬虫、索引、检索和排序等,同时可添加其他一系列辅助模块,以为用户创造更好的网络使用环境。
    • 一个搜索引擎由搜索器 、索引器 、检索器 和用户接口 四个部分组成。搜索器的功能是在互联网 中漫游,发现和搜集信息。索引器的功能是理解搜索器所搜索的信息,从中抽取出索引项,用于表示文档 以及生成文档库的索引表。检索器的功能是根据用户的查询在索引库中快速检出文档,进行文档与查询的相关度评价,对将要输出的结果进行排序,并实现某种用户相关性反馈机制。用户接口的作用是输入用户查询、显示查询结果、提供用户相关性反馈机制。
  • 通俗来说,搜索引擎就是协助用户完成搜索指定内容需求的一个工具。它拥有及其优良的查询性能,优秀的查询适配功能,能够满足大数据中迅速搜索目标数据的能力。
  • 常见的搜索有: 百度、谷歌等。他们是最终落地的产品,其内部借助的搜索引擎则是其核心。谷歌搜索就使用到了ElasticSearch作为核心进行搜索。作为更加老牌的搜索引擎产品Solr,也值得学习。

1.2 什么是solr

  1. Solr是一个开源搜索平台,用于构建搜索应用程序。 它建立在Lucene(全文搜索引擎)之上。 Solr是企业级的,快速的和高度可扩展的。 使用Solr构建的应用程序非常复杂,可提供高性能。
  2. Solr是一个发展中的,不断演进优化的产品,它虽然老牌,但仍跟随时代。比如自带Netty容器,不需要再继续安装Tomcat才能运行了。支持Solr集群,支持并行查询等。
  3. Solr是一个Restful 风格的全文检索引擎,所以它可以在任何语言上运行。它使用Java基于Lucene开发的全文检索服务,是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
  4. Solr(读作“solar”)是Apache Lucene项目的开源企业搜索平台。其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。Solr是最流行的企业级搜索引擎,Solr4 还增加了NoSQL支持。
  5. Solr是用Java编写、运行在Servlet容器(如 Apache Tomcat 或Jetty)的一个独立的全文搜索服务器。 Solr采用了 Lucene Java 搜索库为核心的全文索引和搜索,并具有类似REST的HTTP/XML和JSON的API。Solr强大的外部配置功能使得无需进行Java编码,便可对 其进行调整以适应多种类型的应用程序。Solr有一个插件架构,以支持更多的高级定制。
  6. 因为2010年 Apache Lucene 和 Apache Solr 项目合并,两个项目是由同一个Apache软件基金会开发团队制作实现的。提到技术或产品时,Lucene/Solr或Solr/Lucene是一样的。

1.3 Solr与其他产品对比

  1. 与数据库相比:
    • 倒排索引,预先分词,相比于数据库,join和like本身就是性能杀手,所以它在大部分场景下查询效率更快。
    • 地理GPS查询、高亮搜索、高级聚合查询,它能够完成数据库有些做得不够好或者做不到的地方。
    • 基于Restful风格,兼容性高,可扩展性强,比MySQL更易于使用。
  2. 与ES对比:
    • 当实时建立索引的时候,solr会产生io阻塞,而es则不会,es查询性能要高于solr。
    • 在不断动态添加数据的时候,solr的检索效率会变的低下,而es则没有什么变化。
    • Solr利用zookeeper进行分布式管理,而es自身带有分布式系统管理功能。Solr一般都要部署到web服务器上,比如tomcat(新版本已自带Web服务器了,可以直接解压后启动)。启动tomcat的时候需要配置tomcat与solr的关联。【Solr 的本质 是一个动态web项目】
    • Solr支持更多的格式数据[xml,json,csv等],而es仅支持json文件格式。
    • Solr是传统搜索应用的有力解决方案,但是es更适用于新兴的实时搜索应用。
      单纯的对已有数据进行检索的时候,solr效率更好,高于es。
    • Solr官网提供的功能更多,而es本身更注重于核心功能,高级功能多有第三方插件

    ES更适合动态数据处理,海量数据处理。而Solr更适合复杂,多情况的处理,因为它原生提供的功能更多。综合来讲,ES要优于Solr,但是Solr也是一个不错的选择。

1.4 Solr的特点、优缺点、使用场景

  • 特点:
    1.基于标准的开放接口:Solr搜索服务器支持通过XML、JSON和HTTP查询和获取结果。
    2.易管理:Solr可以通过HTML页面管理,Solr配置通过XML完成。
    3.可伸缩性:能够有效地复制到另外一个Solr搜索服务器。
    4.灵活的插件体系:新功能能够以插件的形式方便的添加到Solr服务器上。
    5.强大的数据导入功能:数据库和其他结构化数据源现在都可以导入、映射和转化。
  • 优缺点:
    • 优点:
    1. 软件成熟,有广大的用户群体,活跃的社区,更新迭代的团队。
    2. 支持多种格式的索引,如: HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式。
    3. 功能丰富,满足多种业务场景,是传统搜索应用的有力解决方案。它支持GPS经纬度查询(可实现附近的数据,经纬度范围内的数据等),高亮查询,各类聚合查询等
    • 缺点:
    1. 建立索引时,搜索效率下降,实时索引效率不高。
    2. 相比于ES,竞争力稍弱。
    3. 随着数据量的增加,Solr的搜索效率会变得更低,而ElasticSearch却没有明显的变化。
  • 使用场景:
  1. 传统搜索应用的有力助手,如租房平台的多条件房源搜索(附近的房源,商圈内房源,按租金,关键词,户型,朝向,套几等等关键词搜索)
  2. 可服务于数据量不是特别大,更新频率不是特别快的场景
  3. 另外可根据Solr的优缺点来看,优点就是适合的场景,缺点就是不适合的场景。

w3c的solr文档:https://www.w3cschool.cn/solr_doc/

二. Solr搭建及维护

2.1 Windows端搭建Solr

  1. 进入官网 选择下载合适的版本,可选择下载较为新的版本,此处以 Solr 7.7.2为例
  2. 解压后进入cmd进入bin目录执行 solr start命令,命令行显示如下,启动成功,默认端口8983,也可通过-p指定端口启动:
    搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第1张图片
  3. 打开浏览器,输入:
    http://localhost:8983/solr
    
    出现如下界面后表示安装成功:
    搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第2张图片

Windows需要安装JDK

2.2 Linux端搭建Solr教程

  1. 确认服务器中是否有Jdk等环境支持。
  2. 下载Solr:
    wget http://mirror.bit.edu.cn/apache/lucene/solr/7.6.0/solr-7.6.0.tgz
    
  3. 解压solr:
    tar -xzvf solr-7.6.0.tgz
    
  4. 输入命令运行Solr:
    bin/solr start -force
    
  5. 输入命令停止运行Solr:
    bin/solr stop -force
    

    也可以直接杀死进程

  6. 输入命令重启solr:
    bin/solr restart -force
    

2.3 Solr的管理界面的使用

2.3.1 Dashboard(仪表盘)

  • 它是一个监控界面,可以直观的看到JVM的运行参数,虚拟机内存使用情况,Solr版本,系统内存等信息:
    搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第3张图片

2.3.2 Logging(日志)

  • 它是关于日志以及日志级别相关的,Logging里面显示的是Solr运行出现的异常或错误:
    搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第4张图片

2.3.3 Core Admin(core管理)

  • 它是整个库的核心。在这里面:
    • Add Core:添加新的库(也可以叫核心、或者Core)
    • Reload:重新加载指定的库
    • Unload:卸载库(此功能慎用0.0)
    • Rename: 重新命名库
    • Optimize:优化索引库
      它里面还有别的一些功能以及展示一些别的信息:
      搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第5张图片
  • 新增索引库时,可注意如下名称含义:
    1. name: 给core起的名字
    2. instanceDir: 与我们在配置solr到tomcat里时的solr_home里新建的core文件夹名一致;
    3. dataDir:确认Add Core时,会在new_core目录下生成名为data的文件夹
    4. config:new_core下的conf下的config配置文件(solrconfig.xml)
    5. schema: new_core下的conf下的schema文件(schema.xml)

确认Add Core时,会在new_core下生成data文件夹,与core.properties文件。

2.3.5 Core新增索引库的方法

  • windows下:
  1. 打开dos命令窗口,切换目录到${solr.home}\bin,然后输入:solr create -c corename之后回车;
  2. 打开solr安装文件,在/server/solr下就会出现新的文件夹corename(就是新创建的core);
  3. 打开浏览器,输入solr访问路径:http://localhost:8983/solr,就会看到新建的core
  • Linux下:
  1. 直接在/server/solr下创建新文件夹,名字自定义,此处命名为newcore,作为新建的core;
  2. 找到/server/solr/configsets/_default目录下的conf文件夹,然后拷贝一份到/server/solr/newcore目录节点下。
  3. 然后按照下图操作
    搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第6张图片

2.3.6 Java Properties(Java 属性)

  • 顾名思义,它展示了一些Java的配置:
    搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第7张图片

2.3.7 Thread Dump(相关线程)

搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第8张图片

2.4 Core Selector

  • Core Selector 是对Solr中的数据进行操作、分析等。此章节将为大家讲解此模块的各个菜单:
    搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第9张图片
  • 点击具体的Core后,出现如下界面:
    搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第10张图片
  • 选择 core
    搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第11张图片
    如图所示,house_core是我们自己定义的一个core。在Solr中每一个Core代表一个索引库,里面包含索引数据及其配置信息。
    Solr中可以拥有多个Core,也就是同时管理多个索引库,就像mysql中可以有多个数据库一样。我们使用solr的语法就可以访问core中的数据了。solr core内的数据支持增删查改。下一章节会举例说明;
  • Overview(概览): 能够查看我们的运行实例信息
    搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第12张图片
  • Analysis(分析): 通过使用Analysis,我们能够实时的分析我们的语句解析情况。如使用ik分词器,检测内容:“我是中国人”的分词结果如图:
    搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第13张图片
  • Dataimport(从数据库导入数据):前提是已经配置好了相关的配置,则可以使用此功能进行数据库导入。有兴趣的可以百度了解。此处步骤暂略。
    搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第14张图片
    • Comman选项:full_import:全导入;delta_import:增量导入。
      所谓delta-import主要是对于数据库(也可能是文件等等)中增加或者被修改的字段进行导入。主要原理是利用率每次我们进行import的时候在solr.home\conf下面生成的dataimport.properties文件,此文件里面有最近一次导入的相关信息。这个文件如下:
      #Tue Jul 19 10:15:50 CST 2016
      advertiser.last_index_time=2016-07-19 10:15:49
      last_index_time=2016-07-19 10:15:49
      其实last_index_time是最近一次索引(full-import或者delta-import)的时间。
      通过比较这个时间和我们数据库表中的timestamp列即可得出哪些是之后修改或者添加的。
    • Verbose:
      Clean: 在索引开始构建之前是否删除之前的索引,默认为true
      Commit: 在索引完成之后是否提交。默认为true
      Optimize: 是否在索引完成之后对索引进行优化。默认为true
      Debug: 是否以调试模式运行,适用于交互式开发(interactive development mode)之中。请注意,如果以调试模式运行,那么默认不会自动提交,请加参数“commit=true”
      Entity: entity是document下面的标签(data-config.xml)。使用这个参数可以有选择的执行一个或多个entity 。使用多个entity 参数可以使得多个entity同时运行。如果不选择此参数那么所有的都会被运行。
      Start,Rows:分页
      Custom Parameters:导入条件
      Excute:执行导入。
      Refresh Status:刷新后才能看到数据发生了变化,如果刷新后数据还是0,说明未导入。
  • Document(文档操作):(索引文档)索引的相关操作,如:增加,修改,删除等,例如我们要增加一个索引(companyName)的办法:
  1. 先要在solr 的D:\solr_home\mycore1\conf 的 schema.xml配置文件下,增加相关的字段field
    	<field name="companyName" type="text_ik" indexed="false" stored="true" multiValued="false" />
    

    新版本solr可能没有schema.xml的话,可在要配置的core的相应conf 内寻找managed-schema 文件

  2. 使用 Core Admin -> Reload命令进行重载或者对solr服务器重启,刷新索引:
    搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第15张图片
  3. 在如下页面,选择/update ,文档格式选择json ,然后submit 提交。这样 索引就增加上了。修改与增加一样,都是/update ,删除为/delete 。成功之后,我们去query里查询数据就能查到我们刚添加的数据.
    搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第16张图片

    如果此处的advertiserId与advertiserType没有配置field 的话,可根据后面的教程配置,或者去掉这两个再进行尝试新增、修改、删除功能;

  • File: 能够查看服务器中solr的文件信息,并可进行配置:
    搜索引擎Solr详解:从0开始搭建、维护及各类使用(慢更)_第17张图片Request-Handler(qt): 要进行的操作(update\delete)
    Document Type:类型,有JSON、XML等格式
    Document(s): 内容,手动写的内容。
    Commit Within: 在内部提交
    Overwrite: 为true,说明如果id重复则覆盖以前的值;为false说明如果id重复不覆盖以前的值.
    Boost: 好像是什么版本,没用过
  • Ping: 网络延迟,按一下可以看这个Core还是不是活着的以及响应时间。

    点击Ping按钮相当于发送一个请求到对应的Core并获得答复。对应的http API是 /admin/ping (http://localhost:8983/solr//admin/ping),后端的处理逻辑是PingRequestHandler类

  • Plugins/Stats: Solr自带的一些插件以及我们安装的插件的信息以及统计。Plugins页面展示的是在Core下运行的各种插件的统计数据和状态信息。比如,可以找到Solr Cache的性能统计数据,Solr Searcher的状态,Request Handler和Search Component的配置信息等等。
  • Query:一个简单的结构化查询工具,下一节详细介绍
  • Replication: 显示你当前Core的副本,并提供disable/enable功能。在单机环境下可进行实例与实例之间的配置。在实例之间复制数据,保证数据的可用性,从而提高系统的服务能力。

    为Master-slave的副本工作方式提供了一个管理和查看副本的页面,SolrCloud中已经取代了这个页面上的大部分功能,单机版也无需关注该功能。(如果使用的是SolrCloud,不要使用该页面上的DisableReplication功能。)

  • schema:展示该Core的shema数据,如果是用ManagedSchema模式,还可以通过该页面修改,增加,删除schema的字段。(对比Solr4,是一个比较实用的提升。)
  • Segments info: 展示底层Lucence的分段信息。展示底层Lucence索引段,包括每个段的大小(字节大小和数据条数)以及其他的一些基本元数据信息,最显眼的是deleted documents数量,把鼠标移动到段上可以看到更多的数据信息。这些信息可以帮管理员做性能优化,优化该数据集的合并段的设置。

2.4 Query的查询详解

q: 查询字符串(必须的)。*:*表示查询所有;keyword:东看 表示按关键字“东看”查询
fq: filter query 过滤查询。使用Filter Query可以充分利用Filter Query Cache,提高检索性能。作用:在q查询符合结果中同时是fq查询符合的(类似求交集),例如:q=mm&fq=date_time:[20081001 TO 20091031],找关键字mm,并且date_time是20081001到20091031之间的。
sort: 排序。格式如下:字段名 排序方式;如advertiserId desc 表示按id字段降序排列查询结果。
start,rows:表示查回结果从第几条数据开始显示,共显示多少条。
fl: field list。指定查询结果返回哪些字段。多个时以空格“ ”或逗号“,”分隔。不指定时,默认全返回。
df: default field默认的查询字段,一般默认指定。
Raw Query Parameters:
wt: write type。指定查询输出结果格式,我们常用的有json格式与xml格式。在solrconfig.xml中定义了查询输出格式:xml、json、python、ruby、php、phps、custom。
indent: 返回的结果是否缩进,默认关闭,用 indent=true | on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。
debugQuery: 设置返回结果是否显示Debug信息。
dismax:
edismax:
hl: high light 高亮。hl=true表示启用高亮
hl.fl : 用空格或逗号隔开的字段列表(指定高亮的字段)。要启用某个字段的highlight功能,就得保证该字段在schema中是stored。如果该参数未被给出,那么就会高 亮默认字段 standard handler会用df参数,dismax字段用qf参数。你可以使用星号去方便的高亮所有字段。如果你使用了通配符,那么要考虑启用 hl.requiredFieldMatch选项。
hl.simple.pre
hl.requireFieldMatch: 如果置为true,除非该字段的查询结果不为空才会被高亮。它的默认值是false,意味 着它可能匹配某个字段却高亮一个不同的字段。如果hl.fl使用了通配符,那么就要启用该参数。尽管如此,如果你的查询是all字段(可能是使用 copy-field 指令),那么还是把它设为false,这样搜索结果能表明哪个字段的查询文本未被找到
hl.usePhraseHighlighter:如果一个查询中含有短语(引号框起来的)那么会保证一定要完全匹配短语的才会被高亮。
hl.highlightMultiTerm:如果使用通配符和模糊搜索,那么会确保与通配符匹配的term会高亮。默认为false,同时hl.usePhraseHighlighter要为true。
facet:分组统计,在搜索关键字的同时,能够按照Facet的字段进行分组并统计。
facet.query:Facet Query利用类似于filter query的语法提供了更为灵活的Facet.通过facet.query参数,可以对任意字段进行筛选。
facet.field:需要分组统计的字段,可以多个。
facet.prefix: 表示Facet字段值的前缀。比如facet.field=cpu&facet.prefix=Intel,那么对cpu字段进行Facet查询,返回的cpu都是以Intel开头的, AMD开头的cpu型号将不会被统计在内。
spatial:
spellcheck: 拼写检查。

2.5 Solr的配置文件的使用

2.6 Solr的分词配置

2.7 Solr的定位配置

三. Solr后端引入及基本使用

3.1 引入SpringBoot项目教程

3.2 基本查询方法:增、删、查、改

3.3 注意事项

四. Solr高级语法

4.1 分词

4.2 高亮

4.3 分组

4.4 统计

4.5 其他语法

五. Solr优化

5.1 Solr查询连接池

5.2 Solr查询封装

5.3 Solr其他优化

六. 扩展

你可能感兴趣的:(#,java,学习汇总,搜索引擎,Solr,Solr查询,Solr教程,搜索引擎,ElasticSearch)