solr 集群 怎样搜集结果 搜查 (solr集群原理)
本文目录导航:
集群 solr 搜查 怎样搜集结果
Facet 是 solr 的初级搜查性能之一 , 可以给用户提供更友好的搜查体验 . 在搜查关键字的同时 ,能够依照 Facet 的字段启动分组并统计 .二. Facet 字段1. 适宜被Facet 的字段普通代表了实体的某种公共属性 , 如商品的分类 , 商品的制作厂家 , 书籍的出版商等等 .2. Facet 字段的要求Facet 的字段必定被索引 . 普通来说该字段无需分词 , 无需存储 .无需分词是由于该字段的值代表了一个全体概念 , 如电脑的品牌 ” 联想 ” 代表了一个全体概念 , 假设拆成 ” 联 ”,” 想 ” 两个字都不具备实践意义 . 另外该字段的值无需启动大小写转换等处置 , 坚持其原貌即可 .无需存储是由于普通而言用户所关心的并不是该字段的详细值 , 而是作为对查问结果启动分组的一种手腕 , 用户普通会沿着这个分组进一步深化搜查 .3. 不凡状况关于普通查问而言 , 分词和存储都是必要的 . 比如 CPU 类型 ”Intel 酷睿 2 双核 P7570”,拆分红 ”Intel”,” 酷睿 ”,”P7570” 这样一些关键字并区分索引 , 或许提供更好的搜查体验 . 然而假设将 CPU 作为 Facet 字段 , 最好不启动分词 . 这样就形成了矛盾 , 处置方法为 ,将 CPU 字段设置为不分词不存储 , 而后树立另外一个字段为它的 COPY, 对这个 COPY 的字段启动分词和存储 <types> <fieldType omitNorms=true/> <fieldType ><analyzer> …… </analyzer> </fieldType> ……</types><fields> <field name=”cpu” type=”string” indexed=”true” stored=”false”/> <field name=”cpuCopy” type=” tokened” indexed=”true” stored=”true”/> ……</fields><copyField source=cpu dest=cpuCopy/>三. Facet 组件Solr 的自动 requestHandler() 曾经蕴含了 Facet 组件 (). 假设自定义 requestHandler 或许对自动的 requestHandler 自定义组件列表 , 那么须要将 Facet 参与到组件列表中去 <requestHandler default=true>……<arr><str>自定义组件名</str><str>facet</str>……</arr></requestHandler>四. Facet 查问启动 Facet 查问须要在恳求参数中参与 ”facet=on” 或许 ”facet=true” 只要这样 Facet 组件才起作用 .1. Field FacetFacet 字段经过在恳求中参与 ”” 参数加以申明 , 假设须要对多个字段启动 Facet查问 , 那么将该参数申明屡次 . 比如/select?q=联想&facet=on&=cpu&=videoCard前往结果 :<lst><lst/><lst><lst><int>48</int> <int>28</int><int>18</int><int>11</int><int>11</int><int>9</int><int>9</int><int>8</int><int>7</int><int>6</int><int>6</int><int>5</int><int>4</int></lst><lst><int>63</int><int>24</int><int>21</int><int>8</int><int>8</int><int>7</int><int>6</int></lst> </lst> <lst/></lst>各个 Facet 字段互不影响 , 且可以针对每个 Facet 字段设置查问参数 . 以下引见的参数既可以运行于一切的 Facet 字段 , 也可以运行于每个独自的 Facet 字段 . 运行于独自的字段时经过f.字段名.参数名=参数值这种方式调用 . 比如 参数运行于 cpu 字段 , 可以驳回如下方式=Intel1.1 示意 Facet 字段值的前缀 . 比如 ”=cpu&=Intel”, 那么对 cpu字段启动 Facet 查问 , 前往的 cpu 都是以 ”Intel” 扫尾的 ,”AMD” 扫尾的 cpu 型号将不会被统计在内 .1.2 示意 Facet 字段值以哪种顺序前往 . 可接受的值为 true(count)|false(index,lex). true(count) 示意依照 count 值从大到小陈列 . false(index,lex) 示意依照字段值的人造顺序( 字母 , 数字的顺序 ) 陈列 . 自动状况下为 true(count). 当 值为正数时 ,自动 = false(index,lex).1.3 限度 Facet 字段前往的结果条数 . 自动值为 100. 假设此值为正数 , 示意不限度 .1.4 前往结果集的偏移量 , 默以为 0. 它与 配合经常使用可以到达分页的成果 .1.5 限度了 Facet 字段值的最小 count, 默以为 0. 正当设置该参数可以将用户的关注点集中在少数比拟抢手的畛域 .1.6 默以为 ””, 假设设置为 true 或许 on, 那么将统计那些该 Facet 字段值为 null 的记载.1.7 取值为 enum 或 fc, 默以为 fc. 该字段示意了两种 Facet 的算法 , 与口头效率关系 实用于字段值比拟少的状况 , 比如字段类型为布尔型 , 或许字段示意中国的一切省份 会遍历该字段的一切取值 , 并从 filterCache 里为每个值调配一个 filter( 这里要求 里对 filterCache 的设置足够大 ). 而后计算每个 filter 与主查问的交加 ( 示意 Field Cache) 实用于字段取值比拟多 , 但在每个文档里产生次数比拟少的状况 会遍历一切的文档 , 在每个文档内搜查 Cache 内的值 , 假设找到就将 Cache 内该值的count 加 1.1.8 当 =enum 时 , 此参数其作用 ,minDf 示意 minimum document frequency. 也就是文档内产生某个关键字的起码次数 . 该参数自动值为 0. 设置该参数可以缩小 filterCache 的内存消耗 , 但会参与总的查问时期 ( 计算交加的时期参与了 ). 假设设置该值的话 ,官网文档倡导优先尝试 25-50 内的值 .2. Date Facet日期类型的字段在文档中很经常出现 , 如商品上市时期 , 货物出仓时期 , 书籍上架时期等等 . 某些状况下须要针对这些字段启动 Facet. 不过期期字段的取值有有限性 , 用户往往关心的不是某个时期点而是某个时期段内的查问统计结果 . Solr 为日期字段提供了更为繁难的查问统计方式 .当然 , 字段的类型必定是 DateField( 或其子类型 ).须要留意的是 , 经常使用 Date Facet 时 , 字段名 , 起始时期 , 完结时期 , 时时期隔这 4 个参数都必定提供 .与 Field Facet 相似 ,Date Facet 也可以对多个字段启动 Facet. 并且针对每个字段都可以独自设置参数 .2.1 该参数示意须要启动 Date Facet 的字段名 , 与 一样 , 该参数可以被设置屡次 , 示意对多个字段启动 Date Facet.2.2 起始时期 , 时期的普通格局为 ” 1995-12-31T23:59:59Z”, 另外可以经常使用 ”NOW”,”YEAR”,”MONTH” 等等 , 详细魄式可以参考 . DateField 的 java doc.2.3 完结时期 .2.4 时时期隔 . 假设 start 为 2009-1-1,end 为 设置为 ”+1MONTH” 示意距离1 个月 , 那么将会把这段时期划分为 12 个距离段 . 留意 ”+” 由于是不凡字符所以应该用 ”%2B” 替代 .2.5 取值可以为 true|false, 默以为 false. 它示意 gap 迭代到 end 处驳回何种处置 . 举例说明 start 为 2009-1-1,end 为 2009-12-25,gap 为 ”+1MONTH”,hardend 为 false 的话最后一个时期段为 2009-12-1 至 2010-1-1;hardend 为 true 的话最后一个时期段为 2009-12-1 至 2009-12-25.2.6 取值范围为 before|after|between|none|all, 默以为 会对 start 之前的值做统计 会对 end 之后的值做统计 会对 start 至 end 之间一切值做统计 . 假设 hardend 为 true 的话 , 那么该值就是各个时期段统计值的和 示意该项禁用 示意 before,after,all 都会统计 .举例 :&facet=on&=date&=2009-1-1T0:0:0Z&=2010-1-1T0:0:0Z&=%2B1MONTH&=all前往结果 :3. Facet QueryFacet Query 应用相似于 filter query 的语法提供了更为灵敏的 Facet. 经过 参数 , 可以对恣意字段启动挑选 .例 1:&facet=on&=date:[2009-1-1T0:0:0Z TO 2009-2-1T0:0:0Z]&=date:[2009-4-1T0:0:0Z TO 2009-5-1T0:0:0Z]前往结果 :<lst><lst><int>5</int><int>3</int></lst> <lst/> <lst/></lst>例 2:前往结果 :例 3:&facet=on&=cpu:[A TO G]前往结果 :<lst> <lst> <int>11</int></lst> <lst/> <lst/></lst>4. key 操作符可以用 key 操作符为 Facet 字段取一一般名 .例 :&facet=on&={!key=中央处置器}cpu&={!key=显卡}videoCard前往结果 :<lst> <lst/> <lst> <lst> <int>48</int> <int>28</int><int>18</int><int>11</int><int>11</int><int>9</int><int>9</int><int>8</int><int>7</int><int>6</int><int>6</int><int>5</int><int>4</int></lst><lst><int>63</int><int>24</int><int>21</int><int>8</int><int>8</int><int>7</int><int>6</int></lst> </lst> <lst/></lst>5. tag 操作符和 ex 操作符当查问经常使用 filter query 的时刻 , 假设 filter query 的字段正好是 Facet 字段 , 那么查问结果往往被限度在某一个值内 .例 :&fq=screenSize:14&facet=on&=screenSize前往结果 :<lst> <lst/> <lst> <lst><int>107</int><int>0</int><int>0</int><int>0</int><int>0</int><int>0</int><int>0</int><int>0</int><int>0</int><int>0</int><int>0</int><int>0</int><int>0</int><int>0</int></lst> </lst> <lst/></lst>可以看到 , 屏幕尺寸 (screenSize) 为 14 寸的产品共有 107 件 , 其它尺寸的产品的数目都是0, 这是由于在 filter 里曾经限度了 screenSize:14. 这样 , 查问结果中 , 除了 screenSize=14 的这一项之外 , 其它名目没有实践的意义 .有些时刻 , 用户宿愿把结果限度在某一范围内 , 又宿愿检查该范围外的概略 . 比如上述状况 ,既要把查问结果限度在 14 寸屏的笔记本 , 又想检查一下其它屏幕尺寸的笔记本有多少产品 . 这个时刻须要用到 tag 和 ex 操作符 就是把一个 filter 标志起来 ,ex(exclude) 是在 Facet 的时刻把标志过的 filter 扫除在外 .例 :&fq={!tag=aa}screenSize:14&facet=on&={!ex=aa}screenSize前往结果 :<lst> <lst/> <lst> <lst><int>107</int><int>40</int><int>34</int><int>22</int><int>8</int><int>6</int><int>5</int><int>5</int><int>3</int><int>3</int><int>3</int><int>1</int><int>1</int><int>1</int></lst> </lst> <lst/></lst>这样其它屏幕尺寸的统计消息就无心义了 .五. SolrJ 对 Facet 的允许SolrServer server = getSolrServer();//失掉SolrServerSolrQuery query = new SolrQuery();//树立一个新的查问(*:*);(true);//设置facet=(new String[] { cpu, videoCard });//设置须要facet的字段(10);//限度facet前往的数量QueryResponse response = (query);List<FacetField> facets = ();//前往的facet列表for (FacetField facet : facets) {(());(----------------);List<Count> counts = ();for (Count count : counts) {(() + : + ());}();}

Java框架solr用哪个版本的好?
solr-4.10.2,当下几个闻名的分词器IKAnalyzer已允许该版本。
如今开发的产品须要经常使用搜查性能,lucene是首选,于是再度钻研了一翻,没有多大难度。
同时也不在间接经常使用lucene库,而是经常使用solr,大大简化了创立索引与查问索引的难度。
solr这种散布式索引方式对性能的控制愈加有掌握,由于它允许多核、复制性能,咱们还可以写代码成功读写分别等性能裁减性能。
itJob
顶级开源名目Slor经常使用教程,一文详解速度掌握经常使用技巧!
Slor简介Slor,作为Apache下的顶级开源名目,驳回Java开发,是基于Lucene的全文搜查主机。
它提供了比Lucene更为丰盛的查问言语,同时成功了可性能、可裁减,并对索引、搜查性能启动了提升。
Slor可以独立运转,允许在Jetty、Tomcat等Servlet容器中运转。
参与、删除、降级索引可经过POST方法向Slor主机发送形容Field及其内容的XML文档成功。
Slor搜查经过HTTP GET恳求成功,解析前往的Xml、json等格局的查问结果,而后组织页面规划。
Slor不提供构建UI的性能,但提供了一个治理界面,经过该界面可以查问Slor的性能和运转形态。
Slor和Lucene的区别Slor和Lucene的实质区别重要体如今以下三个方面:搜查主机、企业级运行和治理。
Lucene是一个专一于搜查底层树立的搜查库,而非独立运行。
而Slor是一个独立的搜查主机。
Lucene专一于搜查底层树立,而Slor则专一于企业运行需求。
Lucene不担任撑持搜查服务所必需的治感性能,而Slor则担任这些治理义务。
Slor是Lucene面向企业搜查运行的裁减。
Slor装置性能下载Slor:从Slor官网网站下载,依据运转环境选用。
可参考经常使用指南/solr/Fr...装置环节:解压下载包,将server\solr-webapp\webapp文件夹复制到Tomcat\webapps目录下,并修正为solr。
将server\lib\ext中的jar文件复制到Tomcat\webapps\solr\WEB-INF\lib目录中。
启动服务:运转启动服务。
访问治理界面:关上失误处置:假设在装置环节中遇到失误,可以参考失误消息启动处置。
中文分词器装置性能启动Slor后,性能分词器。
在中文分词中,须要将用户输入的文本剖析成逻辑词。
Slor自带分词器,可性能自动剖析器。
新建文件夹,复制conf文件,参与索引库重启Tomcat,而后在solr治理控制台参与Core,选用新增的分词器。
性能IK分词器:在自动剖析器基础上参与IK分词器,下载IK,解压后复制关系文件至指定目录,修正并参与性能。
业务系统性能性能业务系统时,须要将MySQL数据库中的数据在Slor中创立索引,与数据库字段对应。
判别能否须要搜查字段启动业务处置,如点击搜查结果后进入概略页,须要经常使用商品id等字段。
字段性能在managed-schema文件中定义字段,包括类型、称号、能否存储、能否索引、能否多值等属性。
每个Field相当于Java中的类属性,用于寄存数据。
性能时,须要选用适宜的域类型和属性,如string、long、int等。
SlorJ客户端经常使用在名目中参与Slor的依赖,经常使用Maven导入jar包。
经过SolrJ客户端启动索引操作,如参与、修正、删除索引。
性能HttpSolrClient,编写查问语句和查问条件,成功与Slor的交互。
总结Slor提供了一种片面的搜查处置打算,从下载、装置、性能到业务系统的集成,再到经常使用SolrJ客户端启动操作,笼罩了搜查服务的各个阶段。
经过性能字段、分词器和业务系统,可以成功高效、灵敏的搜查性能。
SlorJ客户端简化了与Slor主机的交互,使开发人员能够更方便地集成搜查性能到运行中。
此外,Slor允许丰盛的查问参数和操作符,为用户提供更准确、更共性化的搜查体验。