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搜索引擎入门知识汇总的更多相关文章

  1. Solr的入门知识

      一.Solr的简介 Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务.Solr可以独立运行在Jetty.Tomcat等这些Servlet容器中.都 ...

  2. CSS入门知识汇总

    1.CSS认识 在谈论CSS的概念之前,我们先说一说web标准的目的——其在于创建一个统一的用于web表现层的技术标准,以便通过不同浏览器或终端设备向最终用户展示信息内容.一个网页的呈现是由三部分组成 ...

  3. HTML入门知识汇总

    1. HTML认识 1.1 什么是HTML HTML是描述(制作)网页的语言,指的是超文本标记语言(Hyper Text Markup Language). 超文本:就是指页面内可以包含图片.链接.甚 ...

  4. redis入门知识汇总

    1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库 ...

  5. HTML5的快速使用和css3的入门知识汇总

    各位开发者朋友和技术大神大家好!博主刚开始学习html5 ,自本周开始会每周更新技术博客,与大家分享每周所学.鉴于博主水品有限,如发现有问题的地方欢迎大家指正,有更好的意见和建议可在评论下方发表,我会 ...

  6. nginx服务器入门知识汇总

    IP-hash 就是根据IP进行hash计算,然后分配到对应的服务器,好处就是不用session同步,固定IP会固定访问一台服务器,缺点就是恶意攻击,会造成某台服务器压垮.提供的服务不同,面向的地区不 ...

  7. MyBatis入门知识汇总

     为什么要使用MyBatis? 我们都知道,在学习mybatis之前,要在Java中操作数据库,需要用到JDBC,但是在使用JDBC时会有许多缺陷. 比如: 1.使用时需要先进行数据库连接,不用后要立 ...

  8. Java快速入门-03-小知识汇总篇(全)

    Java快速入门-03-小知识汇总篇(全) 前两篇介绍了JAVA入门的一系小知识,本篇介绍一些比较偏的,说不定什么时候会用到,有用记得 Mark 一下 快键键 常用快捷键(熟记) 快捷键 快捷键作用 ...

  9. 移动H5开发入门知识,CSS的单位汇总与用法

    说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...

随机推荐

  1. Javaweb拦截器

    http://blog.csdn.net/reggergdsg/article/details/52962774

  2. vue与js混用

    Vue 的官方是不建议直接操作 DOM 的,Vue 的用途在于视图和数据的绑定.如果通过JQuery 直接操作 DOM 的话,势必会造成视图数据和模型数据的不匹配,这样 Vue 就失去它存在的意义了. ...

  3. C#下载Url文件到本地

    protected void Page_Load(object sender, EventArgs e) { string filePath = Request.Params["FilePa ...

  4. C++ vector动态数组

    #include<vector>头文件 vector类称作向量类 百度百科的解释:https://baike.baidu.com/item/vector/3330482 我喜欢把知识点拿出 ...

  5. openstack镜像制作centos7

    1,找一台宿主机安装kvm并检查是否支持虚拟化,这里我用的是vmware来做宿主机 egrep '(vmx|svm)' /proc/cpuinfo 然后安装kvm: yum install epel- ...

  6. Vue 去掉#号,让网址像正常的一样

    vue利用hash模式让页面不刷新,但是有时候看起来觉得怪怪的,也可以去掉#,并像#模式一样不刷新页面. 1.在路由里面添加     mode: 'history' 这样就去掉了#号,但是点击页面会发 ...

  7. Codeforces 1065 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 G题 传送门 GGG题略难,膜了一波zhouyuyang{\color{red} zhouyuyang}zhouyuyang巨佬的代码. 其余都挺清真的. ...

  8. centos6安装oracle时运行./runInstaller无法弹出图形界面

    首先确保安装oracle的机器上安装了图形化界面. 1.利用xmanager登录到安装oracle的服务器上(直接用root用户登录) 2.运行 export DISPLAY=你的本机地址:0.0 3 ...

  9. web测试和app测试的区别

    功能上: 功能上没有什么区别,都是用同样的方法来写用例(等效.边界值...) 架构上: web是B/S架构(浏览器和服务器)代码更新后数据会同步,可以保证所有客户一致 app是C/S架构(客户端和服务 ...

  10. suse11 安装 python3.6 python3 安装步骤

    首先需要去网上下载Python-3.6.4.tgz,libopenssl-devel-0.9.8j-2.1.x86_64.rpm zlib-devel-1.2.7-3.14.x86_64.rpm li ...