Solr学习之二-Solr基础知识

一 基本说明

简单来说Solr是基于Lucene的高性能的,开源的Java企业搜索服务器。Solr可以看作一个Web app,运行在tomcat或Jetty这类HTTP服务器上,

底层是一个基于Lucene的搜索引擎,还附加一个Solr的基本管理界面。Solr提供HTTP服务,通过Get方法进行查询,通过Post方法进行索引的添加/删除管理。

一般来说Solr的查询时通过Get方法请求到HTTP服务器的solr这个app下的/select对应的servlet上去,而添加等操作时通过POST方法到HTTP服务器的

Solr这个app下的/update对应的servlet方法上去。

Solr作为搜索引擎,提供基于切面/高亮/多种输出格式/复杂的语法搜索规则等功能。

与Lucene的区别是:Lucene是一些类API是个工具包,通过这些API我们可以创建索引/通过索引查询;而Solr是在此基础上的封装,通过简单的配置

就可以直接使用的开源搜索服务器。

二  基本概念

在Solr学习一中了解到搜索引擎的核心是建立索引,然后利用索引进行搜索。

在Solr中索引涉及到的概念有:

1 、 Core     : 在Solr的单节点部署或者Master-Salve方式部署下标示一个完整索引。Core都是由多个文件组成,建立索引的时候是先分段,然后再合并的方式。

一个Solr可以包含一个或多个Core,每个Core的配置可以不同;在SolrCoud部署下标示索引的一部分。

2、Collection: 在SolrCould部署模式下,指的是一个索引的逻辑概念。可以把Solr中的Core或Collection看做一个Oracle的实例。一个SolrCould可以包含多个Collection。

一个Collection可以切分成多个Shard,切分的数量大小和机器节点数和副本数有关系,要求shard数量+副本数<节点数。注意一个节点标示启动一个HTTP服务器,

一台机器可以起多个Solr节点(这种情况必须设置不同的端口),一个Collection的内容是由每个shard中的信息组成。一个shard的信息对应组成它的一个副本的信息。

3、Shard    : 标示切片,在SolrColud 部署模式下,将一个逻辑索引Collection切割成多个分片, 每个Shard是由多个副本Replica组成。

4、Replica  : 副本。多个副本组成一个Shard、注意一个Shard中的replica 包含的内容逻辑上应该是一样的,Shard的数据只是其中一份Replica,不是这些副本的组合。

这些副本中有一个副本会被选择为Leader,负责写索引。

5、Zookeeper:另外一个开源的软件,在solrCloud部署模式下是必须的,主要作用是:

1)配置的统一存储和分发;2)shard中副本的Leader的选取;3)负责监控集群状态,发生改变时候通知相关的监听器,比如挂了一台机器,这台机器上如果有shard的leader节点,剩余的同一个shard的其他副本会竞选Leader,且solrColud会知道这台机器挂掉,在处理请求的时候就不发请求给这台机器。

6、Config Set:配置组,存储配置信息,每个Collection都有,至少包含solrconfig.xml这个是配置这个collection基本配置,比如使用的Lucene的版本、使用的查询组件、缓存相关信息等;还必须包含Schema.Xml 这个配置文件配置的是Collection存在的文档的字段,包括字段的类型,是否需要存储,是否需要分词等。

7、文档: 在Solr中建立索引是通过文档添加的方式进行,如果将索引看成一张表,那么文档可以看成是一条记录,那么Schema.xml可以看成这个表的定义。

一个文档由多个字段定义,这些是在Schema.xml中定义的,不是所有定义的字段文档中都必须有,但是反过来文档中有的字段必须在Schema.xml中定义,

比如:   <field name="subAcctName" type="string" indexed="true" stored="true" /> 标示定义一个字段为string类型,名称为:subAcctName

是被索引的,而且是存储的。当然也可以通过一种叫动态定义的方法进行字段的模糊匹配,比如 <dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>就表示所有以_i结尾的字段都当成int来处理。

注意这里面的类型不同于java的类型,只是相似,对于每个类型,solr会定义其相关的处理规则等。比如:

<fieldType name="string" class="solr.StrField" sortMissingLast="true" />

标示string类型,对应的类为StrField类,如果缺失这个字段,默认在搜索的时候是排在最后的。

Schema.xml 在定义文档的字段时候会定义一个唯一值字段,似于表的主键,形如: <uniqueKey>id</uniqueKey>,作用是用于在solrCloud

模式下进行路由,Solr通过一定的算法对每个文档的ID进行计算,得到的一个Hash值,然后看下这个Hash值是属于哪个shard,就把文档发到哪个shard上去。

通过这个算法可以保证shard之间数量的均衡,在建索引可以起到负载均衡的作用。

如果你要制定文档存储的shard,有三个办法:

1)通过特殊的ID,这个ID必须有两部分组成,两部分之间用!号分隔,solr在计算hash的时候,会利用!前面的16bit做hash,并且利用后面16个bit做hash,

然后把它组合起来,这样可以保证这类文档都发到特定的shard上,注意这个特定的shard上,而不知道是具体是哪一个shard上。

2)通过_shard_字段来指定具体的shard上,这个字段设置为shard1、shard2等。

3) 在建collection的时候路由器设置为:implicit方式,在建索引的时候,文档添加一个_route_字段,值为:shard1、shard2等。

具体的语句举例: http://x.x.x.x:xxx/solr-5.0.0-web/admin/collections?action=CREATE&name=testimplicit&router.name=implicit&shards=shard1,shard2,shard3

文档在添加时候,如果以xml格式添加,内容类似:

<add><doc>

<field name=“id”>05991</field>

<field name=“name”>Peter Parker</field>

<field name=“supername”>Spider-Man</field>

<field name=“category”>superhero</field>

<field name=“powers”>agility</field>

<field name=“powers”>spider-sense</field>

</doc></add>

8、字段:类似于数据库表的字段,有类型,有处理方式。注意我在Solr学习之一讲的倒排索引中的词典中的词不同于字段。

字段只有指明被索引后,然后被分词器进行分词,之后才会存储在词典中。

字段有几个非常重要的属性:

indexed: 标示是否被索引,简单来说,只有被索引的字段,在查询时候才可以通过这个字段的值进行匹配查询。

stored:   如果这个设置为true标示在索引中也存储这个字段信息;如果不存在这个信息,这查询的结果中不会显示,这适用于内容非常多的场景,

我们通过查询到的ID,再到其他存储中,比如数据库中把对应的这个字段信息再抽出来。

字段中有个特殊的字段叫拷贝字段,它的作用是,可以将其他字段的值拷贝到这个字段中,搜索的时候只要搜索这个字段就可以了。

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

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

将字段title和content内容拷贝到text字段里面。

时间: 2024-10-13 02:05:11

Solr学习之二-Solr基础知识的相关文章

framework7学习笔记二:基础知识

一:DOM7 framework7有自己的 DOM7 - 一个集成了大部分常用DOM操作的高性能库.它的用法和jQuery几乎是一样的,包括大部分常用的方法和jquery风格的链式调用. 在开发时,为了避免命名冲突以及方便开发,我们把dom7定义为一个变量: var $$ = Dom7; 之后,就可以在页面中使用 $$ 了. DOM7可以调用的方法,请查阅官方文档:http://docs.framework7.cn/Index/dom.html 二:

oracle学习入门系列之二 数据库基础知识

oracle学习入门系列之二 数据库基础知识 本篇蛤蟆要梳理下那些被淡忘的数据库基础知识,也许根本就没被人记住过.不管是哪种情况,该记住的必须记住,记不住就把他记下来吧. 首先问几个问题如下: 数据库基础知识是什么? 好吧,蛤蟆直接吐后而不亡,看目录开始吧. 本人邮箱:[email protected] 微信公众号:HopToad 欢迎各界交流 1      基本概念 概念就是概念,大伙对这些名词不要死磕,但是对定义一定要理解,理解方能领悟,领悟方能运用自如后创新. 1.1      数据 数据

加壳学习笔记(二)-汇编基础

7.简单的汇编语法:   堆栈平衡  PUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数 POP 操作数格式: PUSH r PUSH M PUSH data POP r POP mPUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPAADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,

APUE 学习笔记(一) Unix基础知识

1. Unix 体系结构 内核的接口被称为系统调用 公用函数库构建在系统调用接口之上 应用软件既可以调用公用函数库,也可以直接进行系统调用 2. 文件和目录 目录操作函数:opendir---> readdir---> closedir struct dirent 结构体 stat 系统调用 3.程序.进程.线程 程序:存放在磁盘上.并处于某个目录中的一个可执行文件.使用exec系列函数将程序从磁盘读入存储器,并使其执行 进程:程序的执行实体.进程控制的3个函数:fork.exec.waitp

Jquery的学习(二)基础核心

1.学习要点: 1.代码风格 2.加载模式 3.对象互换 一.代码风格: 在jQuery程序中,不管是页面元素的选择.内置的功能函数,都是美元符号"$"来起始的.而这个"$"就是jQuery当中最重要且独有的对象:jQuery对象,所以我们在页面元素选择或执行功能函数的时候可以这么写: $(function () {}); //执行一个匿名函数 $('#box'); //进行执行的ID元素选择 $('#box').css('color', 'red'); //执行功

【Java菜鸟学习总结】Java基础知识(类)

目录 [Java菜鸟学习总结]Java基础知识(类) 1.面向对象编程 2.类 3.static关键字 4.final关键字 [Java菜鸟学习总结]Java基础知识(类) 1.面向对象编程 1.1.面向对象编程的特征 面向对象编程(OOP)的三大特征 { 封装; 继承; 多态; } 1.2.类与对象概述 类与对象是面向对象的核心概念. 类与对象 { 类; // 类是对于一类事物的描述,是抽象的.概念的定义. 对象; // 对象是实际存在的该类事物的每个个体,因而也别称为实例. } 2.类 2.

VBS学习日记(二) 基础知识

VBScript 基础知识 一.变量 1.全部单引號后面的内容都被解释为凝视.(在vbsedit中ctrl+m凝视,反凝视ctrl+shift+m) 2.在 VBScript 中,变量的命名规则遵循标准的命名规则,须要注意的是:在 VBScript 中对变量.方法.函数和对象的引用是不区分大写和小写的.在申明变量时,要显式地申明一个变量,须要使用keyword DIm 来告诉 VBScript 你要创建一个变量,并将变量名称跟在其后.申明多个同类型变量,能够用逗号分隔.注意:VBScript 中

学习记录010-磁盘基础知识(待完善)

一./dev/null/2>&1的作用 1.定时任务发送的邮件会临时堆在/var/spool/clientmqueue 时间长了,会导致inode 减少,加上>/DEV/null/2>&12.删除某目录的两种方法:cd /var/spool/clientmqueue &&ls |xargs rm -fcd /var/spool &&ls |rm -rf clientmqueue mkdir clientmqueue &&ch

Web学习篇之---html基础知识(一)

html基础知识(一) 本篇文章主要介绍HTML头部所包括的信息. 一.下面都是在标签<head>...</head>之间的内容: 1.<title>-</title> 标题元素,帮助用户更好识别文件,有且仅仅有一个.当作为首页或收藏时做文件名称. 2.<link>-</link> 显示本文档和其他文档之间的关系:<link rel="stylesheet" href="example.css&qu