Solr
文章平均质量分 66
cj96248
程序员,单纯、固执、容易体会到成就感;能够挑灯夜战不眠不休;能够迎难而上挑战自我。
展开
-
Lucene 深入学习(4)Lucene索引实现方式
前言: 在之前的代码代码演示中,已经能够对给定的数据建立索引。为了对文档进行索引,Lucene提供了五个基础类,这一节,将更为详细地解释与这些类有关的内容。IndexWriterpublic class IndexWriterIndexWriter是在索引过程中中的中心组件,它不是唯一用来修饰索引的类,这个类创建一个新的索引并且添加到一个已有的索引中。public abstract class D原创 2017-10-25 23:45:37 · 563 阅读 · 0 评论 -
Solr分组聚合查询之StatsComponent
摘要: Solr可以利用StatsComponent 实现对数字、字符串或日期字段的聚合统计查询。Stats Component参数 参数 描述 stats 布尔值,设为true,表示开启Stats Component stats.field 指定需要做统计的字段 stats.facet 对指定的facet生成一个子结果集 stats.calcdistinct翻译 2017-03-26 21:09:21 · 3657 阅读 · 0 评论 -
Solr自定义分词器-通过特殊字符分词
摘要: 在对英文句子分词的时候,一般采用采用的分词器是WhiteSpaceTokenizerFactory,有一次因业务要求,需要根据某一个特殊字符(以逗号分词,以竖线分词)分词。感觉这种需求可能与WhiteSpaceTokenizerFactory相像,于是自己根据Solr源码自定义了分词策略。业务场景有一次,我拿到的数据都是以竖线“|”分隔,分词的时候,需要以竖线为分词单元。比如下面的这一堆数据原创 2017-04-02 23:07:12 · 5975 阅读 · 0 评论 -
Solr分组聚合查询之Facet
摘要: Solr的分组聚合是一个笼统的概念,目的就是把查询结果做分类,有多种方式可以做到很类似的结果。也正是由于它们的不同表现,可以适合于多种场景。何为FacetFacet是一种手段,用来将搜索结果分类,它并不会修改查询结果信息,只是给分类后的结果加上了每一项的数量值。我们可以用facet来做导航栏,引导用户更精确地查找信息。一般参数 参数 说明 facet 布尔值,设置为true,表翻译 2017-03-14 23:24:52 · 7179 阅读 · 0 评论 -
Solr分组聚合查询之Group
摘要: Solr对结果的分组处理除了facet还可以使用group。Solr的group是根据某一字段对结果分组,将每一组内满足查询的结果按顺序返回。Group对比FacetGroup和Facet的概念很像,都是用来分组。Facet返回所有相关的结果并允许用户基于facet的目录重新定义结果集。Facet可以对分组数量进行过滤,以及排序,和日期范围,时间范围分组,但是如果你想得到具体的数据,还得需要翻译 2017-03-18 22:10:58 · 21490 阅读 · 4 评论 -
Solr Tokenizers分词器介绍
摘要: Solr的分词器(Tokenizers)用来将文本流分解成一系列的标记(tokens)。分析器analyzer 受字段配置的影响,分词器(Tokenizers)于此无关。分析器主要是把字符流(character stream )处理成一系列的标记对象(Token objects)。参见原文。分词器说明输入流中很些信息可能是不需要的,比如空格和标点;有些信息是需要添加的,如同义词/别名;有些信翻译 2017-02-11 22:39:19 · 6345 阅读 · 1 评论 -
Solr Filter过滤器介绍
摘要: Solr的过滤器对接收到的标记流(TokenStream )做额外的处理。参见原文Solr的Analyzer分析器、Tokenizer分词器、Filter过滤器的区别/联系Analyzer负责把文本字段转成token stream,然后自己处理、或调用Tokenzier和Filter进一步处理,Tokenizer和Filter是同等级和顺序执行的关系,一个处理完后交给下一个处翻译 2017-02-12 21:48:38 · 7368 阅读 · 0 评论 -
Solr中的日期/时间表示
摘要: Solr的日期字段(TrieDateField 和DateRangeField)可以对一个时间点以毫秒精度表示。格式Solr中的日期有很严格的格式限制: YYYY-MM-DDThh:mm:ssZYYYY 表示年MM 表示月份DD 表示天hh 表示小时,24小时制mm 表示分钟ss 表示秒钟Z 代表时区是UTC比如: 2017-01-22T17:33:18Z时区不能换,只翻译 2017-01-22 16:56:59 · 8043 阅读 · 0 评论 -
Solr6与Zookeeper在Tomcat环境做SolrCloud集群
摘要: SolrCloud 是基于Solr和Zookeeper的分布式搜索方案,在搭建完一个Solr实例后,可以很容易地使用Zookeeper来做一个集群。我演示的安装步骤基于一台机器,所以采用伪集群的方式进行安装,如果是真正的生成环境,将伪集群的ip改下就可以了,步骤是一样的。准备工作JDK1.8以上Solr6的安装包(solr-6.0.0.zip 约140M)Tomcat8(至少tomca原创 2016-09-19 00:40:40 · 7772 阅读 · 7 评论 -
Solr Analyzers分析器介绍
摘要: Solr的分析器在检索过程中起着关键作用,这个分析就是提取关键信息的过程,就相当于把我们能看懂的句子转化成Solr能识别的信息。Analyzer用来校验字段的文本并生成标记流token stream. 参见原文单一的Analyzer可以在schema.xml中找到Analyzer的身影,通常来说,在配置solr.TextField的时候,会指定Analyzer,用一个<analyzer>标签翻译 2017-02-09 23:14:20 · 1735 阅读 · 0 评论 -
Solr中的字段类型field type
Solr含有多种字段类型,可用的字段类型基本都定义在了包org.apache.solr.schema中,列举如下: 类 说明 BinaryField 二进制数据 BoolField 布尔值,其中’t’/’T’/’1’都是true CollationFiled 支持Unicode排序 CurrencyField 支持货币和汇率翻译 2017-01-16 20:59:04 · 12556 阅读 · 0 评论 -
Solr字段类型field type的定义
摘要: Solr的字段类型定义了Solr如何解析字段数据并将数据检索出来,了解Solr的字段类型定义有助于更好的配置与使用Solr。字段类型的定义字段类型的定义主要包含如下四个方面的信息:名称实现的类名如果field type 是TextField,则可以指定字段解析器字段类型属性在schema.xml中定义的字段类型字段类型在schema.xml中指定,每一个字段类翻译 2017-01-15 14:52:35 · 17448 阅读 · 0 评论 -
Solr查询流程
Solr提供了富文本查询的功能,要想理解solr实现的原理,需要对solr整个工作的流程有一定的认识。本文基于solr说明文档,讲述solr的查询流程。下图可以大致描述solr的查询流程 用户在客户端发送查询请求 /selectsolr选择一个RequestHandler,默认是dismaxsolr选择一个QueryParser查询解析器,默认使用RequestHandler里的配置s原创 2016-12-20 22:30:27 · 3921 阅读 · 0 评论 -
Solr查询参数echoParams
摘要: 参数echoParams用来控制返回的responseHeader里包含哪些信息。参数说明参数echoParams有3个可选的值: 参数值 含义 explicit 默认值。包含所有指定的请求参数,再加上参数 _ all 包含所有对查询有用的参数,包含一些在solrconfig.xml中预定义的参数和 _ none 不显示params的信息。参数举例使用如下的H原创 2016-12-20 21:09:52 · 1849 阅读 · 0 评论 -
Solr/Lucene打分算法
摘要: 检索模型也就是文档和查询词的相关度的评分方法。Lucene使用布尔模型来确定哪些文档匹配上查询词,使用向量空间模型(VSM)来对这些文档评分。核心评分算法中的向量空间模型使用Tf-idf计算权重,对给定的词t和文档x,Tf(t,x)的值和词t在x中出现的次数正相关,而idf(t)的值和索引文档集合中包含词t的次数负相关。相关名词tf/词频 度量一个文档里词出现的频率idf/逆向文件频率原创 2017-04-05 22:55:35 · 3124 阅读 · 0 评论 -
Solr服务原理(索引)
摘要: 在Solr中,用户通过向部署在servlet容器中的 Solr Web 应用程序发送 HTTP 请求来启动索引和搜索/查询。索引 Solr的索引servlet可以接受下面四种形式的索引请求add/update 允许向Solr添加文档或更新文档。直到提交后才能搜索到这些添加和更新commit 告诉Solr,应该使上次提交以来所做的所有更改都可以搜索到optimize 重构 Lucene原创 2017-04-30 10:12:50 · 2214 阅读 · 0 评论 -
Solr6 源码结构分析
摘要: Apache Solr的源码不是很复杂,从源码的结构角度看,更容易理解Solr的设计思想。Solr包结构Solr6的包结构如下:org.apache.solr.analysis org.apache.solr.client.solrj.embedded org.apache.solr.cloud org.apache.solr.cloud.overseer org.apache.so原创 2017-05-13 00:11:15 · 1500 阅读 · 0 评论 -
Lucene 深入学习(3)Lucene索引初识
前言: Lucene的倒排索引是了解整个搜索的入口,本节将通过代码实例的方式初步认识Lucene的索引创建过程。原始文档可以使用任何文本文件来熟悉Lucene索引的创建,这里我选用了经典作品《致加西亚的信》英文版 A Message to Garcia,你可以在互联网上轻易地找到这篇文章。之所以用英文材料,是因为Lucene默认只支持英文,英文材料可以避免出现分词不准确造成的认知偏差,在学习完分词的原创 2017-10-24 22:26:22 · 576 阅读 · 0 评论 -
Solr 热更新,不重启修改配置文件
单机部署如果Solr是部署在Jetty等WEB容器中的话,需要容器本身支持,大部分情况下,支持是不好的。SolrCould部署在对schema.xml进行修改后,要想使schema.xml生效,需要重启SolrCould集群,然后加载配置文件。无法做到热更新。zookeeper配置solr更新schema.xml后,重新把配置文件注入到zookeeper。可以使用下面的脚本:./zkcli.sh -原创 2017-09-26 23:11:24 · 6005 阅读 · 0 评论 -
Solr 中的commit与optimize
摘要: 在Solr中,频繁的提交操作commit与优化操作optimize,会影响Solr的搜索效果。commit提交到Solr的添加、更新、删除操作只有在commit()方法被调用以后才生效。一般来说,不建议每次这样的操作都之后都直接调用commit()。添加的数据没有commit()不能被搜索到。建议每天调用几次commit()可。optimizeoptimize()是为了提高搜索效率,调用该方原创 2017-09-25 22:53:45 · 2000 阅读 · 0 评论 -
Solr的Filed中indexed与stored属性
摘要: Solr的Filed中有很多参数,其中的index和store参数让人有点犯晕。消失的Field<field name="description_s" type="text" indexed="false" stored="false" required="false" />上面的这个Field的index和store属性都设置为false。如果你插入一片含有该field的doc到Solr,原创 2017-07-27 22:36:03 · 8554 阅读 · 2 评论 -
Solr 运维管理监控
摘要: 有时候需要对Solr状态进行监控,但是Solr自身不支持这种功能。需要借助一个工具Cloudera Manager。cloudera manager四大功能(1)管理:对集群进行管理,如添加、删除节点等操作。(2)监控:监控集群的健康情况,对设置的各种指标和系统运行情况进行全面监控。(3)诊断:对集群出现的问题进行诊断,对出现的问题给出建议解决方案。(4)集成:对hadoop的多组件进行整合原创 2017-07-26 23:12:00 · 3317 阅读 · 0 评论 -
Solr查询空值字段
摘要: Solr的查询一般都是查找满足某个关键词的文档,偶然一个需求是查询Solr中某个字段不为空的数据。查询空值数据字符串类型可以通过下面这种查询方式找到所有描述description为空的数据。-description:* OR description:""整数类型可以通过下面这种查询方式找到所有页码page为空的数据。 -page:* OR page:0非空字段可以通过下面这种查询方式找到i原创 2017-07-30 22:58:51 · 8203 阅读 · 0 评论 -
Solr安全管理
摘要: 在搭建好Solr以后,我们可以通过Solr Admin Page管理页面简单的使用Solr,当然不希望这样的页面对外公开访问。可以通过认证的方式加密Solr admin page。Solr admin page不安全在Solr的管理页面可以做很多操作,不限于常用的查询命令,你还可以通过在Query页面更改Request-Handler来更新甚至删除数据。需要认证的HTTP请求我使用的测试环境原创 2017-07-30 18:18:05 · 1465 阅读 · 0 评论 -
Solr6.0与Jetty、Tomcat在Win环境下搭建/部署
摘要: Solr6的新特性包括增强的edismax,对SQL更好的支持——并行SQL、JDBC驱动、更多的SQL语法支持等,并且在Solr6发布以后,Solr5还在持续更新,对于想尝鲜Solr6的用户来说,与之前版本有什么不同,让我们一起来探究一下。Solr6用默认的Jetty启动需要的软件支持JDK1.8以上Solr6的安装包(solr-6.0.0.zip 大约140M)Solr自带一个Je原创 2016-09-11 21:06:28 · 5731 阅读 · 15 评论 -
Solr客户端查询Java
摘要: Solr有多种客户端工具,诸如JavaScript、Python、Java、Ruby等。对于熟悉这些编程语言的使用者来说,使用客户端工具可以很方便地操作Solr。简介使用SolrJ可以让Java程序员专注于Java代码的编写,不必关注Solr的实现细节。你可以在org.apache.solr.client.solrj找到SolrJ的Jar包。这里Jar包只用5个主要的类。对于使用者来说,只需原创 2017-05-20 22:40:17 · 1839 阅读 · 0 评论 -
Solr6的solrconfig.xml解读
摘要 solrconfig.xml配置文件主要定义了Solr的一些处理规则,包括索引数据的存放位置,更新,删除,查询的一些规则配置。luceneMatchVersion6.0.0表示Solr底层使用的是Lucene6lib 定义了Solr需要额外引用的jar包位置,如果对应的文件不存在,会自动忽略这一配置,一般建议将其注释掉,只添加需要使用的jar包。dataDir原创 2017-04-23 22:57:17 · 2692 阅读 · 0 评论 -
Solr 查询语法
摘要: 默认的Solr查询语法扩展了Lucene的语法,其目的也就是检索索引。basic querySolr的查询用到了参数q,标准的查询语法就想下面这样: http://localhost:8983/solr/query?q=test 可以使用debug=query来分析查询过程: http://localhost:8983/solr/query?q=test&debug=query{原创 2017-05-14 00:24:55 · 5764 阅读 · 0 评论 -
Solr Fields字段Copying Fields/Dynamic Fields
摘要: Solr的Fields定义在schema.xml中,在之前已经了解了field type,Solr字段的定义在此基础上展开。一般Fields<field name="price" type="float" default="0.0" indexed="true" stored="true"/>Copying Fields<copyField source="cat" dest="text"原创 2017-01-22 20:48:49 · 1720 阅读 · 0 评论 -
solr 近实时搜索
摘要: Solr的近实时搜索NRT(Near Real Time Searching)意味着文档可以在索引以后马上可以被查询到。Solr不会因为这次提交而阻塞更新操作,不会等待后台合并的完成而直接检索索引并返回数据。参见原文 利用NRT,就可以设置soft commit,因为标准的commit操作代价高昂,soft commit可以做到近乎实时的查询效果而不丢失数据。Commits 与 Opt原创 2017-04-22 23:22:02 · 7241 阅读 · 2 评论 -
Solr查询参数logParamsList
摘要: 参数logParamsList用来控制solr记录哪些参数的日志,参见wiki. 默认情况下,solr会将所有的请求参数记录到日志。从solr4.7开始,支持用参数控制日志范围。你可以将自己觉得重要的参数写到日志。 logParamsList=q,fq 这样的话,就只有q和fq信息被记录到日志。 如果你不想有任何参数信息被记录的话,可以使用空的参数值 logParamsList=原创 2016-12-20 20:50:16 · 976 阅读 · 0 评论 -
Solr查询参数cache/cost
摘要: 默认情况下,solr会缓存查询结果,这样可以快速响应重复请求。在某些情况下,比如测试的时候,不希望solr缓存,参数cache=false可以禁用solr的缓存,当然你也可以使用cost参数去控制。参数cache=false某一次的查询可能使用到了如下的查询参数: fq={!frange l=10 u=100}mul(popularity,price) 如果我们已经知道上面的查原创 2016-12-19 22:00:05 · 1282 阅读 · 0 评论 -
Solr查询参数sort(排序)
Solr查询每一次返回的数据都有一定的顺序,特定顺序的结果对于业务来说可能非常重要。原创 2016-12-12 21:57:37 · 35050 阅读 · 7 评论 -
Solr查询参数debug/debugQuery (调试)
debug参数可以使结果返回一些调试信息。 debug参数的合理使用,可以帮助开发者找打solr性能瓶颈,用以查找问题,优化查询参数等。目前,Solr已经支持多种调试信息返回。可以使用不同的参数值控制。如果不打开调试信息的话,默认不显示。原创 2016-12-14 22:32:23 · 3192 阅读 · 0 评论 -
Solr查询参数fl(field list)
Solr查询参数fl(field list)指定了返回结果字段。 参数fl限定了查询结果中包含哪些字段。这些指定的字段必须满足 stored=”true” 或者 docValues=”true”。可以使用fl=field-name来指定只返回字段field-name。如果返回多个字段,可以使用逗号(,)或者空格 将多个字段隔开。原创 2016-12-14 21:50:35 · 7273 阅读 · 0 评论 -
solr 中文分词mmeseg4j与ik analyzer效果对比
摘要: 之前用solr6成功集成了中文分词mmeseg4j,也顺利整合了ik analyzer,对比一下他们分词的效果。1884年,中法战争时被派福建会办海疆事务。 ik analyzer:1884 | 年 | 中法战争 | 中法 | 战争 | 时 | 派| 福建 | 会办 | 海疆 | 事务 mmeseg4j_simple:1884 | 年 | 中法 | 战争 | 时 | 被 | 派| 福建原创 2016-11-20 22:08:36 · 1382 阅读 · 0 评论 -
Solr6适配升级版中文分词器IK Analyzer
摘要: 中文分词库 IKAnalyzer自2006年发布以后,被大量运用,但是目前已经没有更新了,因此不能很好的支持Solr6,为此,我修改了源码,使之兼容。下载源码开源地址: https://github.com/EugenePig/ik-analyzer-solr5 说明:原本IK Analyzer应该为https://github.com/wks/ik-analyzer,但是由于太久没更原创 2016-11-15 21:57:45 · 4649 阅读 · 1 评论 -
Solr6配置中文分词库 IKAnalyzer
摘要: Solr有诸多分词器,本文介绍Solr6与中文分词库IKAnalyzer的整合,在此之前,你需要有一个可以运行Solr的环境,参见Solr6.0与Jetty、Tomcat在Win环境下搭建/部署准备环境Solr6IKAnalyzer分词器(ik-analyzer-solr6-6.0.jar) 要准备一个适合Solr6的ik-analyzer,需要动手做一些改动,我在这里大致描述了怎么修原创 2016-11-15 22:38:51 · 3489 阅读 · 5 评论 -
Solr的SolrCloud与Master-slave主从模式对比
摘要: 在之前的介绍中,已经涉及到了SolrCloud模式与Master-slave模式的搭建,本篇侧重于这两种模式的比较。第一印象SolrCloud是Solr4.0引入的,主要应对与商业场景。它很像master-slave,确能自动化的完成以前需要手动完成的操作。利用ZooKeeper这个工具去监控整个Solr集群,以了解集群间各个机器的工作状态。配置的区别从配置来看,SolrC原创 2016-11-28 22:58:49 · 4959 阅读 · 0 评论 -
Solr6适配自定义升级版mmseg4j
摘要: 接上一篇,由于Solr6在使用mmseg4j中文分词时,Solr会出现getInstanceDir()的NoSuchMethodError异常,需要修改mmseg4j源码,使之兼容。如果还未配置好mmseg4j,请到Solr6配置中文分词库mmseg4j下载源码开源地址:https://github.com/chenlb/mmseg4j-solr环境与工具:JDK8,Eclipse4.5原创 2016-11-09 22:28:55 · 2394 阅读 · 2 评论