企业级分布式搜索平台Solr

(1人)

149.00 元 5 折

全场5折优惠,咨询QQ810476411

分布式环境

集群环境的索引数据是怎么存储的?

集群环境和分布式环境有哪些区别呢?应用场景?

索引数据非常大(几百万,甚至上亿),在一台机器上效率就会很低=>将索引进行分布式的存储

shard1 shard2

用户进行搜索查询的时候由zookeeper进行控制,取每台机器的索引数据进行合并,然后返回给用户

索引数据的分片策略是基于什么策略?

solr默认的是基于文档id的hash值进行分布式的存储

 

-DnumShards=2 

理论上存储是均衡的,均衡程度取决于分布式算法,尽可能做到2个结点索引数量是均衡的。

通过参数查询每个结点到底存储了哪些数据-&shards.info=true

-&shards=shard1

请求8080时-由于是分布式环境,会找到8088结点(所有分布式结点),将所有结点的数据进行合并一起返回

其中一台宕机了以后,就出现错误,找不到其中一个分片,提示异常

solr提供了可配置信息,通过参数来进行容错的管理:-&shards.tolerant=true

[展开全文]

SolrCloud-高可用性、容错、分布式的索引和搜索能力,包含以下特性: {

集中配置

自动负载均衡和容错

Zookeeper(针对分布式系统的协调工具-分布式锁、分布式队列)协调和配置 

}

索引数据特别大的时候,采用分布式索引这种机制。

 

solr启动的时候会向zookeeper进行注册

tickTime-心跳检测

统一配置文件管理和信息保存由zookeeper尽心管理

dataDir=... -数据目录

 

怎么将tomcat中的solr实例注册到zookeeper当中,由zookeeper进行统一管理

 

[展开全文]

Facet-分组统计

&facet=on&facet.field=brandId&facet.mincount=2

HighLight-关键字搜索,命中后高亮显示

&hl=on&hl.fl=productName

 

dismax-搜索解析器

spellcheck-纠错参数

 

不管前端传递什么参数,后端都是由一个handler进行解析

 

/select

/browse(解决方法:可以在Tomcat/solr目录中创建 lib目录然后将solr解压开的文件夹dist中jar包和contrib\velocity\lib 
下的jar拷贝到该新创建的lib目录就可以了。    )

 

apache-solr-ref-guide-4.9.pdf

 

NRTSearching-实时搜索的实现机制-不同的业务要求时效性不一样

RealTime Get-实时查询接口

 

 

[展开全文]

如何搜索,通过solr如何实现我们的查询请求,solr是怎么实现搜索的,它的内部机制是怎样的?

接受处理器-handler->调用内部的查询组件,组件信息会请求一个Query parser(构建查询需求),最终调用底层得查询,返回结果

Query Parameter

Query parser

User-q->handler->queryComponent->queryParser

Solr内部提供了很多qp,通过查询语句的请求来分析具体由哪个解析器去解析,然后构建一个查询请求语句,将结果返回给用户。

如何构建查询语句是重点

知道如何构建查询语句才能实现需求

http://wiki.apache.org/solr/CommonQueryParameters

q-查询关键词

sort-排序规则-用什么机制去排序,用哪些属性去排序

start-由第几条记录开始返回

rows-返回多少条记录

fq(filterQuery)-需要范围查询(e.g.日期范围)

fl-指定哪些信息需要返回,哪些信息可以忽略

defType-Solr后端有很多查询解析器,解析器有很多种,通过该参数去指定由哪个解析器去解析query语句

 

wt=...返回格式

indent=true输出格式化,方便查看

 

默认标准解析器-默认关系为或

 

Debugging-debugQuery-显示查询语句的具体解析规则,可用于调试

 

[展开全文]
shakyEvil · 2016-09-25 · 8.solr query 0

solrconfig.xml-索引相关、搜索相关的配置信息

luceneMatchVersion

lib

dataDir

directoryFactory-不同的实现针对不同的环境,性能和效率是不同的

RAMDirectoryFactory-在分布式环境下不能持久化,不能复制

 

建索引过程中可能对索引有一些优化,优化策略有几种方式:

maxIndexingThread

useCompundFile-是否使用复合索引,会合并一些索引文件,在查询IO的时候会打开比较少的文件描述符,这样会对搜索效率提高很多

 

索引文件提交和合并,策略有两种:

基于文件大小:maxBufferSizeMB

基于文件数量:maxBufferedDocs

 

mergePolicy-在建立索引过程中,要对索引文件不断的合并

mergeFactor-段合并策略

mergeScheduler-计划任务

 

Handler {

updateHandler {

autoCommit-持久化,索引是否持久化到硬盘

autoSoftCommit-时效性,前端是否可以立即查看到

配合使用,达到搜索和索引的效果

Listener

}

Solr实现的缓存机制(搜索主要是访问IO量):

filterCache

queryResultCache

documentCache

自定义缓存机制

queryResultWindowSize-最大返回记录

自定义Listener来实现功能

requestDispatcher-配置转发

requestHandler {

<lst name="defaults" >...

/select

/query

/get

/browse

/update

...

}

SearchComponent-内置组件:

纠错组件-spellcheck

-spellchecker进行动态提示

提示组件-suggest

(requestHandler-/elevate-实现搜索的时候的排序规则)

高亮显示组件-solr.HighlightComponent

 

queryResponseWriter-返回的处理器

}

 

[展开全文]

根据搜索词对多个字段进行搜索

1.用户输入的搜索词逐个去匹配,通过匹配命中去返回结果集

2.schema.xml-copyField

 

omitNorms-solr建立索引过程中会为索引的字段写入一些boost,加一些权重值。如果忽略的话就不会写入信息,节省磁盘空间

term*-在索引过程中记录分词的偏移量,当需要高亮显示的时候会用到这些信息(配置属性字段的时候指定这些值)

sort*-默认排序

 

fieldType-定义属性信息的类型

t* - solr内部进行了优化,在范围查找的时候效率更高一些

通过analyzer标签指定分词方式

analyzer标签里可以指定过滤器

analyzer属性type:索引的时候基于什么策略(建立索引和搜索的时候可以采用不同的分词方式)

分词方式可以基于粗粒度或者细粒度,这样会达到一个比较好的查询效果

开源网站上查询中文分词方式-IK分词

控制台可以进行分词的测试

[展开全文]
shakyEvil · 2016-09-25 · 6.schema配置 0

结合具体业务场景构建搜索引擎

如何定义数据结构

如何在工程中配置

如何实现效果

 

构建搜索引擎的时候一定要了解业务-想要达到一个什么样的效果,想要达到什么样的一个搜索

 

schema.xml - 配置对象属性信息

 

核心目录-数据量很大的时候,业务非常多的情况下,可以根据目录结构去拆分业务。搜索索引的时候可以针对不同的业务去搜索不同的索引数据,方面索引数据的管理

indexed-是否进行索引,当需要通过该field进行查找的时候,需要将其定义为true

stored-如果索引数据需要在前端展示

required

multiValued-是否可以包含多个值

omitNorms

 

创建索引-用索引控制台,开发时用程序去实现

 

改分词-->一定要重新建立索引

 

更新配置-->core要reload

[展开全文]
shakyEvil · 2016-09-25 · 5.schema配置 0

Collection1

{

Overview-Replication(Master)-搭建分布式环境

Analysis-分词、测试分词效果

Dataimport-建索引需要导入数据的时候(通过这个组件导入索引数据信息)

Documents-提交数据(格式:JSON、XML...)、建立索引供查询

Files-核心目录下的文件

Query {

q:关键词

参数信息...

}

}

如何构建搜索引擎,如何设计数据结构来符合solr规范

schema.xml-在索引数据结构时的数据结构信息,通过这个文件来定义,有哪些数据结构、格式是怎么样的

solrconfig.xml-主要定义建索引查询的时候的一些规范

 

结合业务场景来讲如何构建搜索引擎,如何设计数据结构、如何定义分词等等信息来实现想要的结果

[展开全文]

实际生产环境中可以根据机器的性能情况和业务场景来分配队列大小和线程数量。 

构建server并提交之后要将其关闭-server.shutdown();

ConcurrentUopdateSolrServer-请求8080的时候,对于分布式环境8080默认由ZK进行管理。

 

CloudSolrServer-传入的是ZK地址,并不是服务器地址。由ZK地址访问请求之后,在ZK里面访问这2个服务器地址。(内部实现调用的是LBHttpSolrServer)

不知道执行的是哪个核心,需要进行设置

构建Query的时候,可查看文档,来构建符合需求的详细的Query

[展开全文]

/docs/solr-solrj

/solr-4.9.0-src/solr-4.9/solr-4.9.0/solr/solrj/src/test

apache-solr-ref-guide-4.9.pdf

隐藏了很多细节,封装了更高级别的方法

SolrServer(Abstract class)-连接Solr服务器的对象实例

SolrRequests\SolrQuerys-SolrResponses

HttpSolrServer-通常用作查询

 

server.setParser(new XMLResponeParser());-设置解析器创建一个返回解析器

SolrQuery-通过构建Query语句,通过query方法进行查询

如何构建索引、如何查询

 

ConcurrentUpdateSolrServer-多线程并发执行的server,可以通过它进行查询和更新,通常用作索引的建立。

 

CloudSolrServer-连接的地址是ZK地址,自动的实现负载均衡,内部实现通过LBHttpSolrServer实现

 

采用分布式环境,但是对于客户端的开发是透明的

[展开全文]

集群和分布式的区别

tomcat怎么连接到zookeeper上

catalina.bat

 

zookeeper进行统一的配置管理,它管理哪些配置文件呢?在tomcat启动时候没有将tomcat的配置上传到zookeeper中,在配置的时候需要上传

 

Cloud标签页{

Tree-zookeeper保存数据的目录

clusterstate.json {

不同的核心维护一套主节点和复制节点

当zookeeper进行solr实例维护的时候必须有一个主节点(leader),由它进行管理

}

Graph-由zookeeper显示(solrHome下的solr.xml)

}

[展开全文]

指定SolrHome

在tomcat中指定?

在web.xml中指定

[展开全文]

布置分布式环境-DnumShards=2

shard 分片

&shards.info=true

&shards=shard1

其中一台down机之后会出错,可以加入容错来解决shards.tolerant=true

 

[展开全文]

solr集群模式

配置不同的tomcat,注意端口

配置solr-home ,注意同时配置tomcat里的项目web.xml文件

 

[展开全文]

集中配置

自动负载均衡和容错

Zookeeper协调和配置

 

[展开全文]

硬提交: 持久化

软提交:时效性

 

[展开全文]

授课老师

软件架构师

学员动态

fresh_aire 开始学习课时 免费试听
fresh_aire 开始学习课时 9.solr facet-hi...
fresh_aire 学完了课时 8.solr query
fresh_aire 开始学习课时 8.solr query

QQ客服: 810476411

QQ咨询: 810476411

QQ吐槽: 810476411

服务时间: 9:00 - 21:00

刘老师: 18516031455

微信公众号:开源力量