热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

1.solr学习速成之配置文件

什么是solrSolr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提
什么是solr

  Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果

solr的特点

  Solr是一个高性能,采用Java开发,Solr基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎.文档通过Http利用XML 加到一个搜索集合中。Solr查询该集合也是通过http收到一个XML/JSON响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提供一套强大Data Schema来定义字段,类型和设置文本分析,提供基于Web的管理界面等。

什么是Lucene?

  Lucene是apache软件基金会 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言).Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专注于搜索底层的建设,而Solr专注于企业应用。Lucene不负责支撑搜索服务所必须的管理,而Solr负责。所以说,一句话概括Solr: Solr是Lucene面向企业搜索应用的扩展。

Solr服务原理

  Solr对外提供标准的http接口来实现对数据的索引的增加、删除,修改,查询。在Solr中,用户通过向部署在servlet 容器中的Solr Web应用程序发送 HTTP 请求来启动索引和搜索。Solr接受请求,确定要使用的适当SolrRequestHandler,然后处理请求。通过 HTTP 以同样的方式返回响应。默认配置返回Solr的标准 XML 响应,也可以配置Solr的备用响应格式。

配置文件schema.xml

schema.xml 是用来定义索引数据中的域的,包括域名称,域类型,域是否索引,是否分词,是否存储,是否标准化即 Norms ,是否存储项向量等等。

schema.xml下有两个标签 field和fieldType,field定义域,fieldType定义域类型

<field name&#61;"id" type&#61;"string" indexed&#61;"true" stored&#61;"true" required&#61;"true" multiValued&#61;"false" />

name表示域名称 必须有

type表示域类型的名称,与fieldType元素的name属性值对应,必须有

indexed true表示需要对该域进行索引,一般当你需要在该域上进行查询或排序时,则需要配置为true,默认false

stored 是否需要把值存储到硬盘上,方便你后续查询时,能再次提取出来原样显示给客户

docValues 表示此域是否需要添加一个docValues域,这对facet查询,group分组,排序,function查询有好处,尽管这个属性

                        不是必须的,但他能加快索引数据加载,对NRT近实时搜索比较好,且更节省内存, 但他也有一些限制,比如当前

                        docValues域只支持strField,UUIDField Trie*Field等域,且要求域的域值是单值不能是多域值

multiValued 表示这个域是否可以存储多个值,若设置为true,即表示这是一个多值域

omitNorms 此属性若设置为true,即表示将忽略域值的长度标准化,忽略在索引过程中对当前域的权重设置,且会节省内存

                           ,只有全文本域或者你需要在索引创建过程中设置域的权重时才需要把这个值设为false,对于基本数据类型且不可

                           分词的域如,intField.longField,StrField等默认属性值就是true,否则默认就是false.

termVectors 设置为true即表示需要为该field存储项向量信息,当你需要MoreLikeThis功能时,则需要将此属性值设为true

这样会带来一些性能提升

termPositions 是否存储Term的起始位置信息,,这会增加索引的体积,但高亮度功能需要依赖此项设置否则无法高亮

termOffsets 表示是否存储索引的位置偏移量,高亮功能需要此项配置,当你使用SpanQuery时,此项配置会影响匹配的结果集

 

field里还有两个比较难理解的域,是Solr扩展的,在Lucene中没有的概念,即dynamicField

动态域和copyField复制域

  动态域的属性配置跟普通的field差不多,区别就是name的属性值,可以使用通配符,这样就可以模糊匹配多个域啦遮掩设计的目的就是不用频繁的去修改schema.xml中的field配置去增加field域啦,比如之前有个link_s域,某一天你想再增加一个url_s域,那你就需要去修改schema.xml配置文件,由于schema.xml修改过后需要重启tomcat才能生效,重启即意味着程序的中断,这往往是不可接受的所以引入动态域来避免频繁的添加修改域,但前提是你的域需要符合你提前定义的动态域的域名称命名规则 

  复制域即表示把某个域的值复制到另一个目标域上面,那如果把多个域的值复制到一个目标域上面,你可以进行多次复制,体现到xml配置上就是类似这样的配置:

<copyField source&#61;"title" dest&#61;"text"/><copyField source&#61;"body" dest&#61;"text"/>

如上配置就是表示把title和body这两个域的值全部复制到text这个新域上面要注意的是,如果只是复制单个域,那么如果你被复制域本身就是多值域,那么目标域也是多值域,这毋容置疑,那如果你复制的域是多个域,只要其中有一个域是多值域,那么目标域就一定是多值域.

 

配置文件solrconfig

solrconfig.xml配置包含了很多solr自身配置相关的参数,分为以下几块

1.依赖的lucene版本配置,这决定了你创建的lucene索引结构,因为lucene各版本之间的索引结构并不是完全兼容的

<luceneMatchVersion>5.3.1luceneMatchVersion>

2.索引创建相关的配置,如索引目录,IndexWriterConfig类中的相关配置(它决定了你的索引创建性能)

<filter class&#61;"solr.LimitTokenCountFilterFactory"maxTokenCount&#61;"10000"/><writeLockTimeout>1000writeLockTimeout>

maxTokenCount即在对某个域分词的时候,最多只提取前10000个Token,后续的域值将被抛弃

writeLockTimeout表示IndexWriter实例在获取写锁的时候最大等待超时时间,超过指定的超时时间仍未获取

到写锁,则indexWriter写索引操作将会抛出异常

<maxIndexingThreads>8<maxIndexingThreads>

表示创建索引的最大线程数,默认是开辟8个线程开创建索引

<ramBufferSizeMB>100ramBufferSizeMB>

表示创建索引时内存缓存大小,单位是MB,默认最大是100MB

<ramBufferedDocs>1000ramBufferedDocs>

表示在document写入硬盘之前,缓存的document最大个数,超过这个最大值会触发索引的flush操作

 

3.solrconfig.xml中依赖的外部jar包加载路径配置

如:

<lib dir&#61;"./lib" regex&#61;"lucene-\w&#43;\.jar"/>

这里的dir表示一个jar包目录路径,该目录路径是相对于你当前core根目录的;regex表示一个正则表达式,是用来过滤文件名的.

 

<dataDir>${solr.data.dir:}dataDir>

如果solr_home下不存在core的话,那dataDir默认就是相对于solr_home

 

4.缓存相关配置,缓存包括过滤器缓存,查询结果集缓存,Document缓存,以及自定义缓存等

<filterCache class&#61;"solr.FastLRUCache"size&#61;"512"initialSize&#61;"512"autowarmCount&#61;"0"/>

 

用来配置filter过滤器的缓存相关的参数

<queryResultCache class&#61;"solr.LRUCache"size&#61;"512"initialSize&#61;"512"autowarmCount&#61;"0"/>

用来配置对Query返回的查询结果集即TopDocs的缓存

<documentCache class&#61;"solr.LRUCache"size&#61;"512"initialSize&#61;"512"autowarmCount&#61;"0"/>

   

用来配置对Document中存储域的缓存,因为每次从硬盘上加载存储域的值

都是很昂贵的操作,这里说的存储域指的是那些store.YES的Field.

 

6.updateHandler配置即索引更新操作相关配置

<updateHandler class&#61;"solr.DirectUpdateHandler2">

指定索引更新操作处理类,directUpdateHandler2是一个高性能的索引更新处理类,它支持软提交

 

<updateLog><str name&#61;"dir">${solr.ulog.dir:}str>updateLog>

 

设置索引库更新日志.默认路径为solr_home下面的data/tlog

 

<autoCommit> <maxTime>15000maxTime> <maxDocs>10000maxDocs><openSearcher>falseopenSearcher> autoCommit>

 自动赢提交方式:

 maxTime;设置多长时间提交一次

 maxDocs;设置达到多少文档提交一次

 openSearcher;文档提交后是否开启新的searcher,如果false,文档只是提交到index

 索引库,搜索结果中搜不到此次提交的文档如果true,既提交到index索引库,也能在搜索结果

 中搜索到此次提交的内容

 

 

 

 7.requestHandler相关配置,即接受客户端http请求的处理类配置,输入的请求会通过请求中的路径被转发到特定的处理器

<requestHandler name&#61;"/query" class&#61;"solr.SearchHandler"><lst name&#61;"defaults"><str name&#61;"echoParams">explicitstr><str name&#61;"wt">jsonstr><str name&#61;"indent">truestr>lst>requestHandler>

  这个requestHandler配置的是请求URL  /query跟请求处理类SearcherHandler之间的一个映射关系

  &#xff0c;即你访问http://localhost:8080/solr/coreName/query?q&#61;xxx时&#xff0c;会交给SearcherHandler类来处理这个http请求&#xff0c;

  你可以配置一些参数来干预SearcherHandler处理细节&#xff0c;

  比如echoParams表示是否打印HTTP请求参数&#xff0c;wt即writer type,即返回的数据的MIME类型&#xff0c;如json,xml等等&#xff0c;

  indent表示返回的json或者XML数据是否需要缩进&#xff0c;否则返回的数据没有缩进也没有换行&#xff0c;不利于阅读

 

 

转:https://www.cnblogs.com/itliucheng/p/6898517.html



推荐阅读
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 一:什么是solrSolr是apache下的一个开源项目,使用Java基于lucene开发的全文搜索服务器;Lucene是一个开放源代 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • asp.net 有什么框架,有什么技术
    原文地址:http:www.cnblogs.comvirusswbarchive201201102318169.html文章写的很好,转载一些到自己的博 ... [详细]
  • Nexus3.0.0+Maven的使用(一)
    1、Nexus介绍Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用Nexus你可以只在一个地方就能够完全控制访问和部署在你所维护仓 ... [详细]
author-avatar
Lucky_Leeing
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有