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. 安装CentOS 7 的yum 到 Radhat 7上,使其可以获取资源

    镜像资源: 1. http://mirrors.163.com/ 2. https://opsx.alibaba.com/mirror 从上列镜像资源下载如下rpm软件包 -rw-r--r--. 1 ...

  2. jquery.validate 远程验证remote使用详解

    目的: 试了一下远程验证,试了好几次,得出小结,可以记录下,提醒以防绕路. ----------------直接贴图,省事明了---------------- 1.引用js 2.demo的html & ...

  3. RNA-seq中的基因表达量计算和表达差异分析

    RNA-seq中的基因表达量计算和表达差异分析 差异分析的步骤:1)比对:2) read count计算:3) read count的归一化:4)差异表达分析: 背景知识:1)比对:普通比对: BWA ...

  4. egret 取消自动连接github

  5. ABP 依赖注入

    1.ABP自动注入 //IapplicationService注入方式暴露接 //ITransientDependency 不会暴露接口 ITransientDependency和ISingleton ...

  6. mysql 字段指定值靠前排序方法,多字段排序排序方法

    背景:SEO下选择某查询条件 查询展示信息为装修设计师以及设计师作品.设计师原型设计为:选择某风格 例如:简约,则列表出现拥有简约风格的设计师信息以及该设计师类型为简约的作品(3条靠前记录) 浏览原型 ...

  7. Programming for Everyone !

    Hello Internet ! This blog is to store my algorithm practices. Since Evernote code blocks do not sho ...

  8. Linux常用的工具软件安装

    一. linux简单介绍 linux的优势 可靠的安全性,良好的稳定性,完善的网络功能 跨平台的硬件支持,丰富的软件支持,多用户多任务 Linux的发行版本 Redhat 红帽子,最大稳定 CentO ...

  9. 未能加载文件或程序集“ .....WebUI ”或它的某一个依赖项,试图加载格式不正确的程序

    编译Web网站没有问题(需要引用oracle.dataAccess.dll),在运行时报错如下: 解决: 1. 将项目编译生成x86模式(win7 64位) 2. 有可能本机运行有问题,发布到IIS, ...

  10. Windows 注册表 16进制时间转换( Convert Reg_binary Time to a Datetime )

    背景: Windows注册表中,存在大量16进制的时间,以 reg_binary存储在注册表中. 例如: 0D 6C A4 4B 37 C5 CE 01 这种值日常报表中需要转换为适合人阅读的格式,实 ...