设为首页 收藏本站
查看: 1076|回复: 0

[经验分享] Solr第一讲

[复制链接]

尚未签到

发表于 2017-12-19 14:12:37 | 显示全部楼层 |阅读模式
一、solr介绍
  1.什么是solr
  Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器Solr可以独立运行在Jetty、Tomcat等这些Servlet容器中。
  Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化
  实现方案: 
  索引流程:solr客户端(浏览器、java程序)可以向solr服务端发送POST请求,请求内容是包含Field等信息的一个xml文档,通过该文档,solr实现对索引的维护(增删改)
  搜索流程:solr客户端(浏览器、java程序)可以向solr服务端发送GET请求,solr服务器返回一个xml文档。
  Solr同样没有视图渲染的功能。
  2.solr和lucene的区别
  Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索应用。Lucene仅提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索应用。
  Solr的目标是打造一款企业级的搜索引擎系统,它是基于Lucene一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。
DSC0000.png

  最核心得区别是由工具包变成了独立服务,并且索引管理更加方便,可以集群!

二、solr安装配置
  1.下载
  Solr和lucene的版本是同步更新的,最新的版本是5.2.1
  本课程使用的版本:4.10.3
  下载地址:http://archive.apache.org/dist/lucene/solr/
  下载版本:4.10.3
  Linux下需要下载lucene-4.10.3.tgz,windows下需要下载lucene-4.10.3.zip。
  下载lucene-4.10.3.zip并解压:
  官网:https://lucene.apache.org/
DSC0001.png

  各目录概述如下:
DSC0002.png

  2.安装配置
  solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(java写的Servlet容器),本教程使用Tocmat作为Servlet容器。
  SolrCore的配置
  1.SolrCore和SolrHome
  SolrHome是Solr运行的主目录,该目录中包括了多个SolrCore目录。SolrCore目录中包含了运行Solr实例所有的配置文件和数据文件,Solr实例就是SolrCore
  一个SolrHome可以包括多个SolrCore(Solr实例),每个SolrCore提供单独的搜索和索引服务。  
  每一个solrcore都可以单独对外提供搜索和索引服务。
  多个solrcore之间没有关系。
  2.solr界面简介
   DSC0003.png
  Dashboard 
  仪表盘,显示了该Solr实例开始启动运行的时间、版本、系统资源、jvm等信息。
  Logging
  Solr运行日志信息
  Cloud
  Cloud即SolrCloud,即Solr云(集群),当使用Solr Cloud模式运行时会显示此菜单
  Core Admin
  Solr Core的管理界面。在这里可以添加SolrCore实例
  java properties
  Solr在JVM 运行环境中的属性信息,包括类路径、文件编码、jvm内存设置等信息。
  Tread Dump
  显示Solr Server中当前活跃线程信息,同时也可以跟踪线程运行栈信息。
  Core selector(重点)
  Analysis(重点)
   DSC0004.png
  通过此界面可以测试索引分析器和搜索分析器的执行情况。
  注:solr中,分析器是绑定在域的类型中的
  dataimport
  可以定义数据导入处理器,从关系数据库将数据导入到Solr索引库中。
  默认没有配置,需要手工配置。   
  Document(重点)  
  通过/update表示更新索引,solr默认根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新
  通过此菜单可以创建索引、更新索引、删除索引等操作,界面如下:
DSC0005.png

  Query(重点)
  通过/select执行搜索索引,必须指定“q”查询条件方可搜索。
DSC0006.png

  solr的详细配置与教程请参见 易百教程:http://www.yiibai.com/solr/apache_solr_on_windows_environment.html#article-start
  solr中国:https://www.solr.cc/blog/

三、solr的基本使用  
  1.schema文件  
  在schema.xml文件中,主要配置了solrcore的一些数据信息,包括Field和FieldType的定义等信息,
  在solr中Field和FieldType都需要先定义后使用
  注意:solr的各版本差异导致文件位置等可能会发生变化,比如这里搜索到的其中一个位置是(具体各文件待阅读文档):
DSC0007.png

  实例讲解:
  Field:定义Field域
  

  <field name="title" type="text_simple" indexed="true" stored="true" multiValued="true"/>  

  其中:(与lucene的概念是基本相通的)
  name——指定域的名称
  type——指定域的类型(用哪个分词器等)
  indexed——是否索引
  stored——是否存储
  multiValued——是否多值(比如商品信息中,一个商品有多张图片,一个Field像存储多个值的话,必须将multiValued设置为true。)
  dynamicField:动态域
  

<dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>   

  Name——指定动态域的命名规则,此例中匹配i为后缀的
  uniqueKey:唯一键
  

<uniqueKey>id</uniqueKey>  

  其中的id是在Field标签中已经定义好的域名,而且该域要设置为required为true。
  一个schema.xml文件中必须有且仅有一个唯一键
  copyField:复制域
  

<copyField source="cat" dest="text"/>  

  Source:要复制的源域的域名
  Dest:目标域的域名
  由dest指的的目标域,必须设置multiValued为true。
  可以通过复制将多个域复制到一个域进行操作
  FieldType:定义域的类型
  

<fieldType name="text_general" positionIncrementGap="100">  
<analyzer type="index">
  
<tokenizer/>
  
<filter ignoreCase="true" words="stopwords.txt" />
  
<!-- in this example, we will only use synonyms at query time
  
<filter synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
  
<filter/>
  

-->  
<filter/>
  
</analyzer>
  
<analyzer type="query">
  
<tokenizer/>
  
<filter ignoreCase="true" words="stopwords.txt" />
  
<filter synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
  
<filter/>
  
</analyzer>
  
</fieldType>
  

  name——指定域的名称
  class——指定域的类型对应的solr类型
  analyzer——指定分析器
  tokenizer——分词器
  filter——过滤器
  2.中文分词器
  使用IKAnalyzer中文分析器
  基本步骤:
  第一步:把IKAnalyzer2012FF_u1.jar添加到solr/WEB-INF/lib目录下。
  第二步:复制IKAnalyzer的配置文件和自定义词典和停用词词典到solr的classpath下。
  第三步:在schema.xml中添加一个自定义的fieldType,使用中文分析器。
  

<!-- IKAnalyzer-->  
<fieldType name="text_ik">
  
<analyzer/>
  
</fieldType>
  

  //这里的TextField与Lucene的TextField还是有差别的
  第四步:定义field,指定field的type属性为text_ik
  

<!--IKAnalyzer Field-->  
<field name="title_ik" type="text_ik" indexed="true" stored="true" />
  
<field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/>
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-425718-1-1.html 上篇帖子: 流火行者 下篇帖子: 5.solr学习速成之语法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表