solr中文
solr常用函数

solr常用函数Solr作为一款优秀的搜索引擎,可以通过常用函数来提高搜索效率和查询结果的准确性。
下面将介绍一些常见的Solr常用函数。
一、数值函数1. abs(x):返回x的绝对值;2. ceil(x):返回不小于x的最小整数;3. floor(x):返回不大于x的最大整数;4. log(x):返回以e为底,x的对数;5. sqrt(x):返回x的平方根;6. pow(x,y):返回x的y次方。
二、日期函数1. day(date):返回日期date的日;2. hour(date):返回日期date的小时;3. minute(date):返回日期date的分钟;4. month(date):返回日期date的月份;5. second(date):返回日期date的秒;6. year(date):返回日期date的年份;7. dateDiff(date1,date2):返回日期date1和date2之间的天数。
三、字符串函数1. concat(str1,str2,...):连接字符串;2. length(str):返回字符串的长度;3. lower(str):将字符串转换为小写;4. upper(str):将字符串转换为大写;5. replace(str,search,replace):将字符串中的search替换为replace;6. substring(str,start,length):返回从start位置开始,长度为length的子字符串。
四、条件函数1. if(condition,value1,value2):如果condition为真,则返回value1,否则返回value2;2. case(value1,result1,value2,result2,...,default):根据value的值返回对应的result,如果都不符合则返回default。
五、集合函数1. sum(x):返回集合x的总和;2. avg(x):返回集合x的平均值;3. max(x):返回集合x的最大值;4. min(x):返回集合x的最小值;5. count(x):返回集合x的元素个数;六、地理函数1. dist(geom1,geom2):返回geom1和geom2之间的距离;2. geodist(lat1,lon1,lat2,lon2):返回经纬度(lat1,lon1)和(lat2,lon2)之间的距离;3. bbox(geom):返回包含geom的矩形框;4. geofilt(field,lat,lon,dist):根据距离过滤结果;5. geodistfacet(field,lat,lon,queries):根据距离进行分组。
Solr的原理及使用

Solr的原理及使⽤1.Solr的简介Solr是⼀个独⽴的企业级搜索应⽤服务器,它对外提供类似于Web-service的API接⼝。
⽤户可以通过http请求,向搜索引擎服务器提交⼀定格式的XML⽂件,⽣成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
2.⼯作原理solr是基于Lucence开发的企业级搜索引擎技术,⽽lucence的原理是倒排索引。
那么什么是倒排索引呢?接下来我们就介绍⼀下lucence倒排索引原理。
假设有两篇⽂章1和2:⽂章1的内容为:⽼超在卡⼦门⼯作,我也是。
⽂章2的内容为:⼩超在⿎楼⼯作。
由于lucence是基于关键词索引查询的,那我们⾸先要取得这两篇⽂章的关键词。
如果我们把⽂章看成⼀个字符串,我们需要取得字符串中的所有单词,即分词。
分词时,忽略”在“、”的“之类的没有意义的介词,以及标点符号可以过滤。
我们使⽤Ik Analyzer实现中⽂分词,分词之后结果为:⽂章1:⽂章2:接下来,有了关键词后,我们就可以建⽴倒排索引了。
上⾯的对应关系是:“⽂章号”对“⽂章中所有关键词”。
倒排索引把这个关系倒过来,变成: “关键词”对“拥有该关键词的所有⽂章号”。
通常仅知道关键词在哪些⽂章中出现还不够,我们还需要知道关键词在⽂章中出现次数和出现的位置,通常有两种位置:a.字符位置,即记录该词是⽂章中第⼏个字符(优点是关键词亮显时定位快);b.关键词位置,即记录该词是⽂章中第⼏个关键词(优点是节约索引空间、词组(phase)查询快),lucene中记录的就是这种位置。
加上出现频率和出现位置信息后,我们的索引结构变为:实现时,lucene将上⾯三列分别作为词典⽂件(Term Dictionary)、频率⽂件(frequencies)、位置⽂件 (positions)保存。
其中词典⽂件不仅保存有每个关键词,还保留了指向频率⽂件和位置⽂件的指针,通过指针可以找到该关键字的频率信息和位置信息。
solr score计算

solr score计算Solr是一个开源的全文搜索框架,广泛应用于各种类型的应用程序中。
在Solr 中,搜索结果的排序是通过计算每个搜索结果的得分(score)来实现的。
Solr的得分计算算法非常复杂,涉及到多种因素的权衡和计算。
本文将介绍一些常见的Solr Score计算的因素和算法。
1. 词频(Term Frequency,TF):词频指的是搜索关键词在文档中出现的频率。
Solr会根据关键词在文档中的出现次数给予较高的权重,出现频率越高的关键词得分越高。
2. 逆文档频率(Inverse Document Frequency,IDF):逆文档频率是指关键词在整个文档集合中的重要性。
Solr会根据关键词在整个文档集合中的出现频率给予较低的权重,出现频率较低的关键词得分较高。
3. 字段长度(Field Length):Solr会考虑字段的长度对得分的影响。
例如,较短的字段可能更加精确地匹配搜索关键词,因此会得到较高的分数。
4. 域权重(Field Boost):Solr允许为不同的字段赋予不同的权重。
通过调整字段的权重,可以影响搜索结果的排序。
例如,如果某个字段对于搜索关键词的匹配非常重要,可以给予该字段较高的权重。
5. 文档相关度(Document Relevance):Solr会根据搜索关键词在文档中的位置和顺序来计算得分。
出现在标题或开头部分的关键词可能与搜索意图更加相关,因此会得到较高的分数。
6. 准确度(Precision):Solr会根据搜索关键词的准确度来计算得分。
如果搜索关键词与文档中的内容非常接近,将得到较高的分数。
7. 字段匹配度(Field Matching):Solr会考虑搜索关键词与字段中的内容的匹配度。
如果搜索关键词完全匹配字段中的内容,将得到较高的分数。
除了上述因素,Solr还会考虑文档的权重、搜索关键词的顺序以及其他一些算法来计算得分。
总体而言,Solr的得分计算是基于多种因素的综合评估,旨在提供与搜索意图最相关的结果。
Solr开发指南

Solr全文检索技术1.Solr介绍 152.Solr安装配置-SolrCore配置 153.Solr安装配置-Solr工程部署 104.Solr安装配置-Solr工程测试 155.Solr安装配置-多SorlCore配置 106.Solr入门--schema 207.Solr入门-安装中文分词器 158.Solr入门-自定义业务系统Field 209.Solr入门-SolrJ介绍1010.Solr入门-SolrJ索引维护 2011.Solr入门-数据导入处理器2012.Solr入门-搜索语法 1013.Solr入门-SolrJ-搜索 2014.Solr案例-需求分析 1015.Solr案例-架构设计 1516.Solr案例-Service 2017.Solr案例-Controller 2018.Solr案例-主体调试 2019.Solr案例-功能完善1【Solr介绍】1.1S olr是什么Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务。
Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引。
Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。
Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
1.2S olr与Lucene的区别Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。
solr语法

solr语法Solr是一个基于Lucene的开源搜索平台,支持全文检索、分布式搜索、多语言支持等功能。
Solr语法是指在Solr平台上执行搜索时所使用的查询语言,它可以帮助用户更加精确地定位到所需要的数据。
Solr语法主要包括以下几个方面:1. 查询语句:查询语句是Solr中最基本的语法,它用于指定要搜索的内容。
查询语句可以是一个单词或一个短语,也可以是一个复杂的逻辑表达式。
例如:- 查询单词:q=keyword- 查询短语:q="keyword1 keyword2"- 复杂逻辑表达式:q=(keyword1 AND keyword2) OR keyword32. 过滤器:过滤器用于对搜索结果进行过滤,可以根据指定条件过滤掉不符合条件的文档。
常用的过滤器包括范围过滤器、布尔过滤器、集合过滤器等。
例如:- 范围过滤器:fq=price:[10 TO 100]- 布尔过滤器:fq=is_published:true- 集合过滤器:fq=id:(1234 OR 5678)3. 排序:排序用于对搜索结果进行排序,可以根据指定字段对结果进行升序或降序排列。
例如:- 升序排序:sort=price asc- 降序排序:sort=price desc4. 分页:分页用于控制搜索结果的输出数量,可以指定每页输出多少条数据和从哪条数据开始输出。
例如:- 每页输出10条数据:rows=10- 从第20条数据开始输出:start=205. 字段选择:字段选择用于指定返回结果中包含哪些字段,可以提高搜索效率和减少网络传输量。
例如:- 返回title和content字段:fl=title,content- 排除id和score字段:fl=-id,-score以上就是Solr语法的主要内容,通过合理使用这些语法可以帮助用户更加准确地搜索到所需要的数据。
solr分词原理

solr分词原理
哎呀,你问到这solr分词原理,咱得好好给你说道说道。
说起这个,咱们得先从字儿说起。
你看,这字儿,每个都有它的意思,但放一块儿了,那意思就变了。
这solr分词,就是把这大段大段的文字,给切成一小段一小段的,好让人更容易理解。
咱们陕西话里有个词儿叫“割肉”,虽然跟这分词不是一回事儿,但那种感觉差不多。
就是把一大块儿东西,给切成小块儿,方便吃,也方便消化。
这solr分词啊,它有个特点,就是能识别出哪些是词,哪些是短语。
这就好比咱们四川人吃火锅,一眼就能看出哪些是菜,哪些是肉,哪些是调料。
分得清清楚楚,明明白白。
再说说它的原理吧,其实也不复杂。
就是根据一些规则,比如词的长度、词的频率,还有上下文关系,来把文字切成一小块一小块的。
这就好比咱们做菜,得根据食材的特性,还有口味需求,来决定怎么切,怎么炒。
总的来说,这solr分词原理,就是这么一回事儿。
它能把大段大段的文字,切成小块儿,方便我们理解和处理。
就像咱们做菜一样,得把食材切好,才能做出好吃的菜来。
哎呀,说了这么多,你明白了吧?这solr分词原理,其实也不难,就是得有点儿技巧和经验。
就像咱们做菜一样,得多练练手,才能做出好吃的菜来。
solr multivalued 字段定义

Solr是一个基于Lucene的开源搜索引擎,广泛应用于企业级搜索解决方案中。
在Solr 中,字段(Field)是构成文档(Document)的基本单位,用于存储和检索数据。
其中,multivalued字段是一种特殊类型的字段,允许在一个字段中存储多个值。
本文将详细介绍Solr中multivalued字段的定义、特性及使用场景,字数超过800字。
一、multivalued字段的定义在Solr中,multivalued字段允许存储多个值,这些值可以是字符串、数字、日期等类型。
与单值字段相比,multivalued字段更具灵活性,能够存储更复杂的数据结构。
定义一个multivalued字段时,需要在schema.xml文件中将字段的multiValued属性设置为true。
例如:php<field name="tags" type="string" indexed="true" stored="true" multiValued="true"/>二、multivalued字段的特性存储多个值:multivalued字段可以存储多个值,这些值可以是相同类型或不同类型的数据。
这使得multivalued字段非常适合存储如标签、关键词、分类等信息。
高效检索:Solr对multivalued字段进行了优化,使其能够进行高效的检索操作。
用户可以使用Solr的查询语法,对multivalued字段进行精确的匹配、范围查询、模糊查询等操作。
动态更新:multivalued字段支持动态更新。
这意味着在文档被索引后,用户仍然可以向multivalued字段添加或删除值。
这为企业级搜索应用提供了极大的便利,可以根据业务需求灵活地调整索引结构。
扩展性强:Solr的multivalued字段具有很好的扩展性,可以与其他数据类型和功能进行集成。
solrcloud简介

Solr进化史 倒排表 了解solrCloud 搭建solrCloud集群 Zookeeper Leader 选举 Collections+cores API
Collections
创建collection: /admin/collections?action=CREATE&name=mycollection&numShards=4&replicationFactor=2&maxSha rdsPerNode=2&collection.configName=mycollection 删除collection:/admin/collections?action=DELETE&name=mycollection 修改collection: /admin/collections?action=MODIFYCOLLECTION&collection=mycollection&maxShardsPerNode=24 重新加载collection:/admin/collections?action=RELOAD&name=mycollection 创建shard(only to 'implicit' collections): /admin/collections?action=CREATESHARD&collection=mycollection&shard=shard_n&createNodeSet =172.25.8.190:9200_solr 拆分shard: /admin/collections?action=SPLITSHARD&collection=mycollection&shard=shard1 删除shard: /admin/collections?action=DELETESHARD&collection=mycollection&shard=shard1 创建别名: /admin/collections?action=CREATEALIAS&name=testalias&collections=mycollection,mycollectio n_1 删除别名:/admin/collections?action=DELETEALIAS&name=testalias 删除副本: /admin/collections?action=DELETEREPLICA&collection=mycollection_1&shard=shard5&replica=my collection_1_shard5_replica2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
solr中文:使用 Apache Solr 实现更加灵巧的搜索 第 2 部分: 用于企业的 Solr疯狂代码 / ĵ:http://DeveloperUtil/Article54041.html 本文举例源代码或素材下载 在本系列 第 1 部分我为您介绍了 Apache Solr种基于 HTTP 开源搜索服务器它可以很容易地和多种Web 应用集成我展示了 Solr 最基本功能包括索引、搜索和浏览介绍了 Solr 模式并解释了它在配置 Solr 功能方面作用在本部分中我将通过列举 Solr 作为大型生产环境中理想解决方案时所具备特性来完成对 Solr 介绍涵盖主题包括管理、缓存Cache、复制和可扩展性 请参阅 第 1 部分 来获得安装和设置 Solr 指导 配置和管理 本部分介绍了可用于监视和控制 Solr 功能性诸多选项首先来看看 Solr Administration Start Page该页可在 http://localhost:8080/solr/admin/ 找到旦找到了起始页在继续的前请务必花些时间熟悉下上面各种菜单选项在起始页中根据这些选项所提供信息区别对它们进行了分组: Solr 给出了有关这种活动模式(请参见 第 1 部分)、配置以及当前部署统计数据详细信息 App server 给出了容器当前状态包括 threading 信息以及所有 Java 系统属性列表 Make a Query 提供了调试查询所需快捷界面以及到功能更加全面查询界面链接 Assistance 提供了到外部资源有用链接以便理解和解决使用 Solv 可能遇到些问题 如下章节详细介绍了这些菜单选项并重点突出了其中管理特性 要使用 Solr 配置选项可以单击页上 CONFIG 链接这会显示当前 solrconfig.xml 文件您可以在 举例应用dw-solr/solr/conf 目录找到该文件现在让我们先来看看和索引和查询处理有关些常见配置选项而和 缓存Cache、复制 和 扩展 Solr 有关配置选项则留到后面章节再介绍 索引配置 Index 标记段定义了控制 Solr 索引处理低水平 Lucene 原因Lucene 基准发布(位于 Lucene 源代码contrib/benchmark 的下)包含了很多可用来对这些原因更改效果进行基准测试工具此外请参阅 参考资料 节中“Solr 性能原因” 来了解和各种更改相关性能权衡表 1 概括了可控制 Solr 索引处理各种原因:表 1. 对性能原因进行索引原因 描述useCompoundFile 通过将很多 Lucene 内部文件整合到单个文件来减少使用中文件数量这可有助于减少 Solr 使用文件句柄数目代价是降低了性能除非是应用用完了文件句柄否则 false 默认值应该就已经足够mergeFactor 决定低水平 Lucene 段被合并频率较小值(最小为 2)使用内存较少但导致索引时间也更慢较大值可使索引时间变快但会牺牲较多内存maxBufferedDocs 在合并内存中文档和创建新段的前定义所需索引最小文档数段 是用来存储索引信息Lucene 文件较大值可使索引时间变快但会牺牲较多内存maxMergeDocs 控制可由 Solr 合并 Document 最大数较小值 (< 10,000) 最适合于具有大量更新应用maxFieldLength 对于给定 Document控制可添加到 Field 最大条目数进而截断该文档如果文档可能会很大就需要增加这个数值然而若将这个值设置得过高会导致内存不足unlockOnStartup unlockOnStartup 告知 Solr 忽略在多线程环境中用来保护索引锁定机制在某些情况下索引可能会由于不正确关机或其他而直处于锁定这就妨碍了添加和更新将其设置为 true 可以禁用启动锁定进而允许进行添加和更新 查询处理配置 在 <query> 部分有些和 缓存Cache 无关特性这点您需要知道首先<maxBooleanClauses> 标记定义了可组合在起形成个查询子句数量上限对于大多数应用而言默认 1024 就应该已经足够;然而如果应用大量使用了通配符或范围查询增加这个限值将能避免当值超出时抛出 TooManyClausesException 通配符和范围查询通配符和范围查询是可自动扩展以包括所有可能匹配查询条件条目 Lucene 查询通配符查询允许使用 * 和 ? 通配符运算符而范围查询则要求匹配文档必须要在指定范围的内例如若查找 b*可能导致潜在数千个区别项都组合进这个查询进而会导致 TooManyClausesException 接下来若应用预期只会检索 Document 上少数几个 Field那么可以将 <enableLazyFieldLoading> 属性设置为 true懒散加载个常见场景大都发生在应用返回和显示系列搜索结果时候用户常常会单击其中个来查看存储在此索引中原始文档显示常常只需要显示很短段信息若考虑到检索大型 Document 代价除非必需否则就应该避免加载整个文档 最后<query> 部分负责定义和在 Solr 中发生事件相关几个选项首先作为种介绍方式Solr(实际上是Lucene)使用称为 Searcher Java 类来处理 Query 例子Searcher 将索引内容相关数据加载到内存中根据索引、CPU 以及可用内存大小这个过程可能需要较长段时间要改进这设计和显著提高性能Solr 引入了种 “温暖”策略即把这些新 Searcher 联机以便为现场用户提供查询服务的前先对它们进行 “热身”<query> 部分中<listener> 选项定义 Searcher 和 firstSearcher 事件您可以使用这些事件来指定例子化新搜索或第个搜索时应该执行哪些查询如果应用期望请求某些特定查询那么在创建新搜索或第个搜索时就应该反注释这些部分并执行适当查询 solrconfig.xml 文件剩余部分除 <admin> 的外涵盖了和 缓存Cache、复制 和 扩展或定制 Solr 有关项目admin 部分让您可以定制管理界面有关配置 admin 节更多信息请参看 Solr Wiki 和 solrconfig.xml 文件中注释 监视、记录和统计数据 在 http://localhost:8080/solr/admin 管理页有几个菜单条目可以让 Solr 管理员监视 Solr 过程表 2 给出了这些条目:表 2. 用于监视、记录和统计数据 Solr 管理选项菜单名 Admin URL 描述Statistics http://localhost:8080/solr/admin/stats.jsp Statistics 管理页提供了和 Solr 性能相关很多有用统计数据这些数据包括: 有关何时加载索引以及索引中有多少文档信息 有关用来服务查询 SolrRequestHandler 有用信息 涵盖索引过程数据包括添加、删除、提交等数量 缓存Cache实现和 hit/miss/eviction 信息Info http://localhost:8080/solr/admin/registry.jsp 有关正在运行 Solr 版本以及在当前实现中进行查询、更新和缓存Cache所使用类详细信息此外还包括文件存于 Solr subversion 存储库何处信息以及对该文件功能个简要描述Distribution http://localhost:8080/solr/admin/distributiondump.jsp 显示和索引发布和复制有关信息更多信息请参见 “发布和复制” 节Ping http://localhost: 8080/solr/admin/ping 向服务器发出 ping 请求包括在 solrconfig.xml 文件admin 部分定义请求Logging http:// localhost:8080/solr/admin/logging.jsp 让您可以动态更改当前应用日志记录等级更改日志记录等级对于调试在执行过程中可能出现问题非常有用Java properties http: //localhost:8080/solr/admin/get-properties.jsp 显示当前系统正在使用所有 Java 系统属性Solr 支持通过命令行系统属性替换有关实现此特性更多信息请参见 solrconfig.xml 文件Thread dump http://localhost:8080/solr/admin/threaddump.jsp thread dump 选项显示了在 JVM 中运行所有线程堆栈跟踪信息 调试此分析过程 经常地当创建搜索实现时您都会输入个应该匹配特定文档搜索但它不会出现在结果中在大多数情况下故障都是由如下两个原因的引起: 查询分析和文档分析不匹配(虽然不推荐但对文档分析可能会和对查询分析区别) Analyzer 正在修改区别于预期个或多个条目 可以使用位于 http://localhost:8080/solr/admin/analysis.jsp Solr 分析管理功能来深入调查这两个问题Analysis 页可接受用于查询和文档文本片段以及能确定文本该如何分析并返回正被修改文本逐步结果 Field 名称图 1 显示了分析句子 “The Carolina Hurricanes are the reigning Stanley Cup champions, at least for a few more weeks” 以及相关查询 “Stanley Cup champions” 部分结果正如为举例应用 schema.xml 中指定 content Field 分析那样:图 1. 对分析进行调试" _disibledevent=val1</str> </arr></listener> 清单 1 显示了在收到 commit 事件后在主服务器上创建快照所需配置同样配置也同样适用处理 optimize 事件在这个举例配置中在 commit 完成后Solr 位于 solr/bin 目录 snapshooter 脚本传入指定参数和环境变量wait 实参告知 Solr 在继续的前先等待线程返回有关执行 snapshooter 和其他配置脚本详细信息请参见 Solr 网站WebSite上 “Solr Collection and Distribution Scripts” 文档(请参见 参考资料) 在从服务器上使用 snappuller shell 脚本从主服务器上检索快照snappuller 从主服务器上检索了所需文件后snaper shell 脚本就可用来安装此快照并告知 Solr 有个新快照可用根据快照创建频率最好是安排系统定期执行这些步骤在主服务器上rsync 守护在从服务器获得快照的前必须先行启动rsyn 守护可用 rsyncd-enable shell 脚本启用然后再用 rsyncd-start 命令实际启动在从服务器上snappuller-enable shell 脚本必须在 snappuller shell 脚本的前运行 排除发布故障 虽然我们已经竭尽全力地对索引更新发布进行了优化但还是有几个常见场景会为 Solr 带来问题: 优化大型索引可能会非常耗时而且应该在索引更新不是很频繁情况下才进行优化会导致多个 Lucene 索引文件合并成个单文件这就意味者从服务器必须要复制整个索引然而这种方式优化还是比在每个从服务器上进行优化要好很多这些服务器可能和主服务器区别步导致新副本再次被检索 如果从主服务器中获取新快照频率过高则从服务器性能可能会降低这种降低源于使用 snappuller 复制更改开销以及在安装新索引时缓存Cache预热有关频繁索引更新方面性能均衡详细信息请参见 参考资料 中 “Solr Performance Factors” 最终向从服务器添加、提交和获取更改频繁程度完全取决于您自己业务需求和硬件能力仔细测试区别场景将会帮助您定义何时需要创建快照以及何时需要从主服务器中获取这些快照有关设置和执行 Solr 发布和复制更多信息请参看 参考资料 中 “Solr Collection and Distribution” 文档 定制 Solr Solr 提供了几个插件点您可以在这里添加定制功能来扩展或修改 Solr 处理此外由于 Solr 是开源所以如果需要区别功能您尽可以更改源代码有两种方式可以向 Solr 添加插件: 打开 Solr WAR在 WEB-INF/lib 目录下添加新库重新打包这些文件然后将 WAR 文件部署到 servlet 容器 将 JAR 放入 Solr Home lib 目录然后启动 servlet 容器这种思路方法使用了定制 ClassLoader 且有可能不适用于某些 servlet 容器 接下来几个章节突出介绍了可能希望扩展 Solr 几个领域 请求处理 若现有功能不能满足业务需求Solr 允许应用实现其自身请求处理功能比如您可能想要支持您自己查询语言或想要将 Solr 和您用户配置文件相集成来提供个性化效果SolrRequestHandler 接口定义了实现定制请求处理所需思路方法实际上除了 第 1 部分 所使用那些默认 “标准” 请求处理的外Solr 还定义了其他几个请求处理: 默认 StandardRequestHandler 使用 Lucene Query Parser 语法处理查询添加了排序和层面浏览 DisMaxRequestHandler 被设计用来通过更为简单语法来跨多个 Field 进行搜索它也支持排序(使用和标准处理稍有区别语法)和层面浏览 IndexInfoRequestHandler 可以检索有关索引信息比如索引中文档数或 Field 数 请求处理是由请求中 qt 参数指定Solr servlet 使用参数值来查找给定请求处理并将输入用于请求处理处理请求处理声明和命名通过 solrconfig.xml 中 <requestHandler> 标记指定要添加其他内容只需实现定制SolrRequestHandler 线程安全例子即可将其添加到 上述 定义好 Solr并将其包括到 如前所述 类路径中的后就可以通过 HTTP GET 或 POST 思路方法开始向其发送请求了 响应处理 和请求处理类似也可以定制响应输出必须要支持老式搜索输出或必须要使用 2进制或加密输出格式应用可以通过实现 QueryResponseWriter 来输出所需格式然而在添加您自己 QueryResponseWriter 的前需要先深入研究下 Solr 所自带实现如表 4 所示:表 4. Solr 查询响应书写器查询响应书写器 描述XMLResponseWriter 这个最为常用响应格式以 XML 格式输出结果如 第 1 部分 博客应用所示XSLTResponseWriter XSLTResponseWriter 将 XMLResponseWriter 输出转换成指定 XSLT 格式请求中 tr参数指定了要使用 XSLT 转换名称指定转换必须存在于 Solr Home conf/xslt 目录有关 XSLT Response Writer 更多内容请参见 参考资料JSONResponseWriter 用 JavaScript Object Notation (JSON) 格式输出结果JSON 是种简单、人类可读数据转换格式而且非常易于机器解析RubyResponseWriter RubyResponseWriter 是对 JSON 格式扩展以便在 Ruby 中安全地使用结果若有兴趣将 Ruby 和 Solr 结合使用可以参考 参考资料 中给出到 acts_as_solr 和 Flare 链接PythonResponseWriter 对 JSON 输出格式扩展以便在 Python eval 思路方法中安全地使用 QueryResponseWriter 通过 <queryResponseWriter> 标记及其附属属性被添加至 Solr solrconfig.xml 文件响应类型通过 wt 参数在请求中指定默认值是 “标准”即在 solrconfig.xml 中设定为XMLResponseWriter最后要强调是QueryResponseWriter 例子必须提供用来创建响应 write 和getContentType 思路方法线程安全实现 Analyzer、Tokenizer、TokenFilter 和 FieldType 借助新 Analyzer、Tokenizer、TokenFilter 可以定制 Solr 索引输出以提供新分析功能自身需要Tokenizer 或 TokenFilter 应用必须实现其自身 TokenizerFactory 和 TokenFilterFactory这两者使用<tokenizer> 或 <filter> 标记(作为 <analyzer> 标记部分)在 schema.xml 中声明如果您从的前应用中已经获得了个 Analyzer那么就可以在 <analyzer> 标记 属性中声明它并进行使用您无需创建新 Analyzer除非是想要在其他 Lucene 应用中使用这些分析器 —— 在 schema.xml 中使用 <analyzer> 标记声明 Analyzer 真是容易呀! 如果应用有特定数据需求您可能需要添加个 FieldType 来处理数据比如可以添加个 FieldType 来处理来自旧应用 2进制字段在 Solr 中应该可以搜索到这个应用只需使用 <fieldtype> 声明将 FieldType 添加到schema.xml 并确保它在类路径中可用 性能考虑 虽然 Solr 可以开箱即用但还是有几个窍门技巧可有助于让它更易于使用和任何应用样仔细考虑您对数据访问具体业务需求任重而道远比如添加已索引 Field 越多对内存需求就越多、索引就越大、优化该索引所需时间也越长同样检索已存储 Field 会太多 I/O 处理而减慢服务器速度使用懒散字段加载或在他处存储大型内容可以为搜索请求释放 CPU 资源 在搜索层面上您应该考虑所支持查询类型很多应用都不需要 Lucene Query Parser 语法全部尤其是使用通配符和其他高级查询类型情况下就更是如此若能分析日志和确保常用查询被缓存Cache将会非常有帮助为般查询使用 Filter 对于减少服务器负载也非常有用和任何应用样全面地测试应用可确保 Solr 能够满足您性能需求有关 Lucene(和 Solr)性能更多信息请参阅 参考资料 中给出 ApacheCon Europe “Advanced Lucene” 幻灯片演示 Solr 前景光明 构建于 Lucene 速度和强大功能的上Solr 本身就证明了它完全可以成为企业级搜索解决方案它吸引了大量活跃社区使用者这些使用者已经将它用到了各种大型企业环境Solr 也获得了开发人员衷心支持他们还直在寻找提高它途径 在这个包含两部分文章您了解了 Solr包括它开箱即用索引和搜索功能以及用来配置其功能 XML 模式另外您还浏览了让 Solr 得以成为企业架构理想选择配置和管理特性最后您还获悉了采用 Solr 时性能考虑以及可用来扩展它架构有关 Solr 更多信息请参阅 参考资料 中文档2009-1-15 22:30:15疯狂代码 /。