Solr搜索引擎入门知识汇总

摘要:
在多机环境中备份同步索引文件很麻烦。Lucene本质上是一个搜索库。在构建索引时,我们通过托管模式文件配置ik分词器,以完成中文分词,并向文档对象添加字段?

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

免责声明:文章转载自《Solr搜索引擎入门知识汇总》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Maven实战:Maven生命周期Git 多人协作开发的过程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

highcharts配置的效果如下

配置如下: function init(categoryArray,seriesData,month_first_day,month_last_day,currDay){ var chart = Highcharts.chart('container', { chart: { type: 'columnrange...

异常:Unknown lifecycle phase "mvn". You must specify a valid lifecycle

这是在使用maven打包方式启动springboot项目时出现的异常, 我的异常原因属于下面的情况: 此时maven指令行为:mvn spring-boot:run. 如果写成这样会导致最终的maven指令为:mvn mvn spring-boot:run. 所以需要注意修改为:spring-boot:run即可. 还有一种可能,Maven插件[Run A...

[转]开发者必备的6款源码搜索引擎

From : http://news.cnblogs.com/n/184662/   英文原文:Open Source Matters: 6 Source Code Search Engines You Can Use For Programming Projects   在推动技术变革上,开源运动发挥了非常显著的作用。而 Linux 成功地将开源转换成...

Restful API 设计参考原则

在项目中,需要为后台服务撰写API。刚开始接触的时候,并没有考虑太多,就想提供URL,服务端通过该URL进行查询、创建、更新等操作即可。但再对相关规范进行了解后,才发现,API的设计并没有那么简单,远远不是URL的问题,而是一个通信协议的整体架构 1. 使用GET、POST、PUT、DELETE这几种请求模式 请求模式也可以说是动作、数据传输方式,通常我们...

elasticsearch安装ansj分词器

1、概述    elasticsearch用于搜索引擎,需要设置一些分词器来优化索引。常用的有ik_max_word: 会将文本做最细粒度的拆分、ik_smart: 会做最粗粒度的拆分、ansj等。    ik下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases    ansj下...

微信默认表情符号的代码对照表

之前有不少朋友问我,微信公众平台如何发带有表情符号的图片,其实只需要在信息里面插入表情代码就可以使用的。 微信表情对照表如下: 表情图片 字符串代码 替换关键字 /::) 微笑 /::~ 伤心 /::B 美女 /::| 发呆 /:8-) 墨镜 /::< 哭 /::$ 羞 /::X 哑 /::...