热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Solr第一讲——概述与入门

一、solr介绍1.什么是solrSolr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr可以独立运行在Jetty、Tomcat等这些Se

一、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也可以高效的完成站内搜索功能。

   

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

二、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/

  

   各目录概述如下:

  

  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界面简介

  

    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(重点)

      

      通过此界面可以测试索引分析器和搜索分析器的执行情况。

      注:solr中,分析器是绑定在域的类型中的

      dataimport

      可以定义数据导入处理器,从关系数据库将数据导入到Solr索引库中。

      默认没有配置,需要手工配置。   

    Document(重点)  

      通过/update表示更新索引,solr默认根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新

      通过此菜单可以创建索引、更新索引、删除索引等操作,界面如下:

      

     Query(重点)   

    通过/select执行搜索索引,必须指定“q”查询条件方可搜索。

    

 

  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的各版本差异导致文件位置等可能会发生变化,比如这里搜索到的其中一个位置是(具体各文件待阅读文档):

    

 

  实例讲解:

    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>iduniqueKey>

  其中的id是在Field标签中已经定义好的域名,而且该域要设置为requiredtrue 

  一个schema.xml文件中必须有且仅有一个唯一键

   copyField:复制域

 

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

  Source:要复制的源域的域名

  Dest:目标域的域名

  由dest指的的目标域,必须设置multiValued为true。

  可以通过复制将多个域复制到一个域进行操作

   FieldType:定义域的类型

 <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />

<filter class="solr.LowerCaseFilterFactory"/>
analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
analyzer>
fieldType>

        name——指定域的名称

    class——指定域的类型对应的solr类型

    analyzer——指定分析器

    tokenizer——分词器

    filter——过滤器

  2.中文分词器

  使用IKAnalyzer中文分析器

  基本步骤: 

     第一步:把IKAnalyzer2012FF_u1.jar添加到solr/WEB-INF/lib目录下。

    第二步:复制IKAnalyzer的配置文件和自定义词典和停用词词典到solr的classpath下。

    第三步:在schema.xml中添加一个自定义的fieldType,使用中文分析器。


<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
fieldType>

    //这里的TextField与Lucene的TextField还是有差别的

    第四步:定义field,指定fieldtype属性为text_ik


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

 


推荐阅读
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 帝国CMS中的信息归档功能详解及其重要性
    本文详细解析了帝国CMS中的信息归档功能,并探讨了其在内容管理中的重要性。通过归档功能,用户可以有效地管理和组织大量内容,提高网站的运行效率和用户体验。此外,文章还介绍了如何利用该功能进行数据备份和恢复,确保网站数据的安全性和完整性。 ... [详细]
  • 利用ZFS和Gluster实现分布式存储系统的高效迁移与应用
    本文探讨了在Ubuntu 18.04系统中利用ZFS和Gluster文件系统实现分布式存储系统的高效迁移与应用。通过详细的技术分析和实践案例,展示了这两种文件系统在数据迁移、高可用性和性能优化方面的优势,为分布式存储系统的部署和管理提供了宝贵的参考。 ... [详细]
  • 部署solr建立nutch索引
    2019独角兽企业重金招聘Python工程师标准接着上篇nutch1.4的部署应用,我们来部署一下solr,solr是对lucene进行了封装的企 ... [详细]
  • camel_使用Camel在来自不同来源的Solr中索引数据
    camelApacheSolr是建立在Lucene之上的“流行的,快速的开源企业搜索平台”。为了进行搜索(并查找结果),通常需要从不同的源(例如内容管理 ... [详细]
  • 本文介绍了如何通过安装 rpm 包来使用 resize2fs 和 ext2online 工具进行系统文件的扩容。提供了详细的步骤和注意事项。 ... [详细]
  • PHP 使用 Cookie 进行访问授权的方法
    本文介绍了如何使用 PHP 和 Cookie 实现访问授权,包括表单验证、数据库查询和会话管理等关键步骤。 ... [详细]
  • 本文详细解析了Java类加载系统的父子委托机制。在Java程序中,.java源代码文件编译后会生成对应的.class字节码文件,这些字节码文件需要通过类加载器(ClassLoader)进行加载。ClassLoader采用双亲委派模型,确保类的加载过程既高效又安全,避免了类的重复加载和潜在的安全风险。该机制在Java虚拟机中扮演着至关重要的角色,确保了类加载的一致性和可靠性。 ... [详细]
  • 系统转换的三种方法及其具体应用分析
    系统转换是信息技术领域中常见的任务,本文详细探讨了三种主要的系统转换方法及其具体应用场景。这些方法包括:代码迁移、数据迁移和平台迁移。文章通过实例分析了每种方法的优势和局限性,并提供了实际操作中的注意事项和技术要点。例如,代码迁移适用于从VB6获取网页源码,数据迁移在Ubuntu中用于隐藏侧边栏,而平台迁移则涉及Tomcat 6.0的使用和谷歌爬虫的测试。此外,文章还讨论了蓝翰互动PHP面试和5118 SEO工具在系统转换中的应用,为读者提供了全面的技术参考。 ... [详细]
  • Swoole加密机制的安全性分析与破解可能性探讨
    本文深入分析了Swoole框架的加密机制,探讨了其在实际应用中的安全性,并评估了潜在的破解可能性。研究结果表明,尽管Swoole的加密算法在大多数情况下能够提供有效的安全保护,但在特定场景下仍存在被攻击的风险。文章还提出了一些改进措施,以增强系统的整体安全性。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 触发器的稳态数量分析及其应用价值
    本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
  • 在网络故障排查中,tcpdump 是一款强大的工具,尤其在 Linux 环境下。尽管开发环境中问题较少,但在测试或生产环境中,往往会遇到各种难以预料的异常情况。通过在问题发生的环境中启用 tcpdump 进行抓包,并重现问题,可以获取到宝贵的原始数据,为问题的诊断提供关键线索。本文将详细介绍如何使用 tcpdump 进行实战操作,帮助读者掌握这一技能。 ... [详细]
  • Lucene系列四:Lucene提供的分词器、IKAnalyze中文分词器集成、扩展 IKAnalyzer的停用词和新词
    一、Lucene提供的分词器StandardAnalyzer和SmartChineseAnalyzer1.新建一个测试Lucene提供的分词器的maven项目LuceneAnal ... [详细]
author-avatar
qqq
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有