• Solr搜索引擎入门知识汇总


    1.技术选型,为什么用solr而不用lucene,或者其他检索工具

    lucene:需要开发者自己维护索引文件,在多机环境中备份同步索引文件很是麻烦

    Lucene本质上是搜索库,不是独立的应用程序。而Solr是。 Lucene专注于搜索底层的建设,而Solr专注于企业应用。 Lucene不负责支撑搜索服务所必须的管理,而Solr负责。 一句话概括Solr: Solr是Lucene面向企业搜索应用的扩展

    其实相识的技术还有ElasticSearch,但是ES只支持json文件格式,需要靠第三方插件提供功能,其他传统的搜索应用也不如solr,所以我们用的solr。在建立索引的时候我们通过managed-schema文件配置ik分词器来完成中文分词,从而实现了高亮显示关键字,分页,多字段,多性能的搜索。

     

    3.solr怎么建立、删除索引?

    在solr中创建索引的一般步骤:

    1)创建一个SolrServer对象,SolrServer用于管理索引

    2)创建SolrInputDocument对象,即文档对象,并且向文档对象添加字段

    3)利用SolrServer对象的add方法添加SolrInputDocument对象,创建索引

    删除索引有两种方式:一种是通过文档ID进行删除,用server.deleteById(id)方法删除,可以批量删除;

    第二种是通过查询到的结果删除,用server.deleteByQuery()方法;

     

    Solr存的什么数据类型?

    文本类型textfield

    搜索需要用到的字段有哪些?

    商品ID、商品名称、卖点、价格、商品分类名称、商品描述、商品图片;

     

    solr的高亮显示怎么做的?

    solr 默认已经配置了highlight 组件。"hl=true"是开启高亮,"hl.fl " 是告诉solr 对那些字段进行高亮(如果你想对多个字段进行高亮,可以添加多个字段,字段间用逗号隔开,如 "hl.fl=name,name2,name3")。 高亮内容与关键匹配的地方,默认将会被 "<em>" 和 "</em>" 包围。还可以使用hl.simple.pre" 和 "hl.simple.post"参数设置

     

    solr的特性和solr集群的优点;

    (1)大数据量下更高的性能 

    (2)更好扩展性 

    (3)更高的可靠性 

    (4)更简单易用

    solr使用步骤

    第一步:把solrJ的jar包添加到工程中。

    第二步:创建一个SolrServer,使用HttpSolrServer创建对象。

    第三步:创建一个文档对象SolrInputDocument对象。

    第四步:向文档中添加域。必须有id域,域的名称必须在schema.xml中定义。

    第五步:把文档添加到索引库中。

    第六步:提交。

    2.高亮的使用步骤

    第一步:开启高亮显示

    第二步:设置高亮域

    第三步:标签进行包裹

    第四步:填回实体对象 

    第五步:返回前台

    那你给我说说IK分词器是什么?

    我在做solr的时候使用的是IK分词器,IK分析器的分词原理本质上是词典分词。现在内存中初始化一个词典,然后在分词过程中逐个读取字符,和字典中的字符相匹配,把文档中的所有的词语拆分出来的过程。

    问:你在做solr的时候是怎么用的分词器?

    我们首先要下载对应的IK分词器版本,把IK目录下的三个文件为:分词器的jar包、分词器配置文件、分词器停词字典复制到tomact/webapps/solr/WEBINF/lib目录下,之后修改schema.xml。之后增加中文分词配置

     

    问:你在做solr的时候遇到问题了吗?

    多条件查询时出现了高亮不能显示的问题,分析了代码后发现我是对查询条件的集合booleanQuery进行的高亮,而实际上只对标题进行高亮就可以了,所以在多条件查询的时候高亮显示不出来,最后只需要对标题的那个Query加高亮就行了

    遇到的索引库不同步的问题,我是使用定时任务框架来解决的

    5.定时任务 在从数据中取数据生成索引的时候,因为表中的数据量比较大,防止一次取出所导致内存溢出问题,我采用了分段批量提取的方式进行,除此之外我们对后续增加的数据根据优先级的不同采取不同的策略,对于那些需要及时显示的数据我们通过spring定时器  在短时间内(30分钟)进行增量索引的生成,对于那些不需要及时展示的数据,我们通过spring定时器在服务器相对空闲的时候(比如每天晚上凌晨)进行索引的重新生成。此外我们为了提高solr的搜索的性能对其进行主从复制。

    • activeMQ应用场景:添加商品时需要将索引同步到数据库(这时候的manage-service充当消息的),当调用商品添加功能时,索引库并不会更新,此时如果对商品进行搜索,那么将无法获取到最新商品,所以需要当商品添加时,告诉索引库及时更新,此时activeMQ就充当了消息中间健的作用,当商品更新时,他就是消息生产者,通过activeMQ传达给消息消费者进行索引更新solrcloud:solrcloudsolr提供的,基于solrzookeeper的分布式搜索方案应用场景
    • activeMQ应用场景:添加商品时需要将索引同步到数据库(这时候的manage-service充当消息的),

    当调用商品添加功能时,索引库并不会更新,此时如果对商品进行搜索,那么将无法获取到最新商品,所以需要当商品添加时,告诉索引库及时更新,此时activeMQ就充当了消息中间健的作用,当商品更新时,他就是消息生产者,通过activeMQ传达给消息消费者进行索引更新

    solrcloud:solrcloud是solr提供的,基于solr和zookeeper的分布式搜索方案

    应用场景 :1) 当需要大规模,容错,分布式索引和检索能力时使用solrcloud;

    2)当索引量很大,搜索请求并发很高时,同样需要使用solrcloud来满足这些需求;

    不过当一个系统的索引数据量少的时候不需要使用solrcloud;

          zookeeper在solrcloud集群中作用:它的主要思想是使用zookeeper作为solrcloud集群的配置信息中心,同一管理solrcloud的配置,比如

    solrConfig.xml和schema.xml;

    它的几个特色功能:1)集中式的配置信息,2)自动容错3)近实时搜索4)查询时自动负载均衡

    zookeeper的功能有很多,1)目录服务(注册中心) 2)配置中心

    自己最solrcloud的理解:分为两个维度,物理维度:一个solrcloud集群由多个物理机器或者虚拟机组成,每个虚拟机中可以包含多个solrcore,一个solrcore对应一个solrhome,对应一个tomcat

       逻辑维度:一个solrcloud集群可以看成是一个collection,一个collection分为多个分片Shard,一个分    片又由多个solrcore组成,其中这几个solrcore是一主多从

    不同的shard可以增强solrcloud的存储功能。同一个shard中不同的solrcore可以解决单点故障问题,以及可以解决高并发问题。

     

     

    solrcloud中如何使用到了zookeeper:

    1)、  solrcloud是通过zookeeper统一管理配置文件(solrconfig.xml、schema.xml等),所以搭建solrcloud之前,需要先搭建zookeeper。

    2)、由于solrcloud一般都是解决大数据量、大并发的搜索服务,所以搭建solrcloud,对zookeeper也需要搭建集群。

    一:zookeeper集群搭建:1):安装jdk ;    2).上传zookeeper-3.4.6.tar.gz到linux,解压,并重命名为zk1至/usr/local/solrclod中,在复制两份为zk2,zk3;    3)将zoo_example.cfg 重命名为zoo.cfg    4)修改zoo.cfg:如下:(三个zookeeper配置文件中的clientPort端口不相同)

     

     

    5).在dataDir目录下创建myid文件(文件里面对应上面只写个1或者2或者3)    6).编写脚本,启动三台zookeeper   

    二.solrcloud搭建: 1).复制4个单机版solr服务对应的tomcat,并分别改变端口(每一个上面都有三个端口要改);   2)复制4个solrhome,每个solr实例对应一个solrhome   3).修改solrhome下的solr,xml文件(改一下ip和端口)   4).设置tomcat启动参数,在每个tomcat目录下的 bin/catalina.sh添加一下内容:JAVA_OPTS="-DzkHost=192.168.242.138:2281,192.168.242.138:2282,192.168.242.138:2283"  5).将solr文件中配置文件上传到zookeeper中,进行统一管理(使用/usr/local/solr-4.10.3/example/scripts/cloud-scripts下的zkcli.sh命令将/usr/local/solrcloud/solrhome8280/collection1/conf目录上传到zookeeper进行配置。):./zkcli.sh-zkhost192.168.242.139:2281,192.168.242.139:2282,192.168.242.139:2283-cmdupconfig -confdir /usr/local/solrcloud/solrhome8280/collection1/conf-confnamemyconf  6).使用zookeeper自带的 zkCli.sh命令连接zookeeper集群,查看上传的配置文件: ./zkCli.sh -server 192.168.242.138:2281   7)启动所有solr服务

     

    .创建collection:创建新的集群,名称为collection2,集群中有四个solr节点,将集群分为两片,每片两个副本: http://192.168.242.138:8280/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2      删除名称为collection1的集群:   http://192.168.242.139:8280/solr/admin/collections?action=DELETE&name=collection1

  • 相关阅读:
    Nginx从安装到配置文件详解
    python流程控制语句
    python数据类型以及方法
    python介绍以及基础基础语法
    new 操作符
    js 模拟substr
    js 对于链式加载的思考
    js 实现哈夫曼树
    js实现深度优先
    js 广度优先遍历
  • 原文地址:https://www.cnblogs.com/binghuaZhang/p/10780291.html
Copyright © 2020-2023  润新知