solr课程

合集下载

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的原理及使用

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+facet学习笔记

solr+facet学习笔记

SOLR FACET学习笔记修改记录目录一.FACET简介 (3)二.FACET字段 (3)1.适宜被F ACET的字段 (3)2.F ACET字段的要求 (3)3.特殊情况 (3)三.FACET组件 (4)四.FACET查询 (4)1.F IELD F ACET (4)1.1facet.prefix (7)1.2facet.sort (7)1.3facet.limit (7)1.4facet.offset (8)1.5facet.mincount (8)1.6facet.missing (8)1.7facet.method (8)1.8facet.enum.cache.minDf (8)2.D ATE F ACET (8)2.1facet.date (8)2.2facet.date.start (8)2.3facet.date.end (8)2.4facet.date.gap (8)2.5facet.date.hardend (8)2.6facet.date.other (9)3.F ACET Q UERY (10)4.KEY操作符 (12)5.TAG操作符和EX操作符 (14)五.SOLRJ对FACET的支持 (17)一.Facet简介Facet是solr的高级搜索功能之一,可以给用户提供更友好的搜索体验.在搜索关键字的同时,能够按照Facet的字段进行分组并统计.二.Facet字段1.适宜被Facet的字段一般代表了实体的某种公共属性,如商品的分类,商品的制造厂家,书籍的出版商等等.2.Facet字段的要求Facet的字段必须被索引.一般来说该字段无需分词,无需存储.无需分词是因为该字段的值代表了一个整体概念,如电脑的品牌”联想”代表了一个整体概念,如果拆成”联”,”想”两个字都不具有实际意义.另外该字段的值无需进行大小写转换等处理,保持其原貌即可.无需存储是因为一般而言用户所关心的并不是该字段的具体值,而是作为对查询结果进行分组的一种手段,用户一般会沿着这个分组进一步深入搜索.3.特殊情况对于一般查询而言,分词和存储都是必要的.比如CPU类型”Intel 酷睿2双核P7570”,拆分成”Intel”,”酷睿”,”P7570”这样一些关键字并分别索引,可能提供更好的搜索体验.但是如果将CPU作为Facet字段,最好不进行分词.这样就造成了矛盾,解决方法为,将CPU字段设置为不分词不存储,然后建立另外一个字段为它的COPY,对这个COPY的字段进行分词和存储.schema.xml三.Facet组件Solr的默认requestHandler(ponent.SearchHandler)已经包含了Facet组件(ponent.FacetComponent).如果自定义requestHandler或者对默认的requestHandler自定义组件列表,那么需要将Facet加入到组件列表中去.solrconfig.xml四.Facet查询进行Facet查询需要在请求参数中加入”facet=on”或者”facet=true”只有这样Facet组件才起作用.1.Field FacetFacet字段通过在请求中加入”facet.field”参数加以声明,如果需要对多个字段进行Facet查询,那么将该参数声明多次.比如返回结果:各个Facet字段互不影响,且可以针对每个Facet字段设置查询参数.以下介绍的参数既可以应用于所有的Facet字段,也可以应用于每个单独的Facet字段.应用于单独的字段时通过这种方式调用.比如facet.prefix参数应用于cpu字段,可以采用如下形式1.1facet.prefix表示Facet字段值的前缀.比如”facet.field=cpu&facet.prefix=Intel”,那么对cpu字段进行Facet查询,返回的cpu都是以”Intel”开头的,”AMD”开头的cpu型号将不会被统计在内.1.2facet.sort表示Facet字段值以哪种顺序返回.可接受的值为true(count)|false(index,lex).true(count)表示按照count值从大到小排列. false(index,lex)表示按照字段值的自然顺序(字母,数字的顺序)排列.默认情况下为true(count).当facet.limit值为负数时,默认facet.sort= false(index,lex).1.3facet.limit限制Facet字段返回的结果条数.默认值为100.如果此值为负数,表示不限制.1.4facet.offset返回结果集的偏移量,默认为0.它与facet.limit配合使用可以达到分页的效果.1.5facet.mincount限制了Facet字段值的最小count,默认为0.合理设置该参数可以将用户的关注点集中在少数比较热门的领域.1.6facet.missing默认为””,如果设置为true或者on,那么将统计那些该Facet字段值为null的记录.1.7facet.method取值为enum或fc,默认为fc.该字段表示了两种Facet的算法,与执行效率相关.enum适用于字段值比较少的情况,比如字段类型为布尔型,或者字段表示中国的所有省份.Solr会遍历该字段的所有取值,并从filterCache里为每个值分配一个filter(这里要求solrconfig.xml里对filterCache的设置足够大).然后计算每个filter 与主查询的交集.fc(表示Field Cache)适用于字段取值比较多,但在每个文档里出现次数比较少的情况.Solr会遍历所有的文档,在每个文档内搜索Cache内的值,如果找到就将Cache 内该值的count加1.1.8facet.enum.cache.minDf当facet.method=enum时,此参数其作用,minDf表示minimum document frequency.也就是文档内出现某个关键字的最少次数.该参数默认值为0.设置该参数可以减少filterCache的内存消耗,但会增加总的查询时间(计算交集的时间增加了).如果设置该值的话,官方文档建议优先尝试25-50内的值.2.Date Facet日期类型的字段在文档中很常见,如商品上市时间,货物出仓时间,书籍上架时间等等.某些情况下需要针对这些字段进行Facet.不过时间字段的取值有无限性,用户往往关心的不是某个时间点而是某个时间段内的查询统计结果. Solr为日期字段提供了更为方便的查询统计方式.当然,字段的类型必须是DateField(或其子类型).需要注意的是,使用Date Facet时,字段名,起始时间,结束时间,时间间隔这4个参数都必须提供.与Field Facet类似,Date Facet也可以对多个字段进行Facet.并且针对每个字段都可以单独设置参数.2.1facet.date该参数表示需要进行Date Facet的字段名,与facet.field一样,该参数可以被设置多次,表示对多个字段进行Date Facet.2.2facet.date.start起始时间,时间的一般格式为”1995-12-31T23:59:59Z”,另外可以使用”NOW”,”YEAR”,”MONTH”等等,具体格式可以参考org.apache.solr.schema.DateField的java doc.2.3facet.date.end结束时间.2.4facet.date.gap时间间隔.如果start为2009-1-1,end为2010-1-1.gap设置为”+1MONTH”表示间隔1个月,那么将会把这段时间划分为12个间隔段.注意”+”因为是特殊字符所以应该用”%2B”代替.2.5facet.date.hardend取值可以为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.6facet.date.other取值范围为before|after|between|none|all,默认为none.before会对start之前的值做统计.after会对end之后的值做统计.between会对start至end之间所有值做统计.如果hardend为true的话,那么该值就是各个时间段统计值的和.none表示该项禁用.all表示before,after,all都会统计.举例:返回结果:3.Facet QueryFacet Query利用类似于filter query的语法提供了更为灵活的Facet.通过facet.query 参数,可以对任意字段进行筛选.例1:返回结果:例2:返回结果:例3:返回结果:4.key操作符可以用key操作符为Facet字段取一个别名.例:返回结果:5.tag操作符和ex操作符当查询使用filter query的时候,如果filter query的字段正好是Facet字段,那么查询结果往往被限制在某一个值内.例:返回结果:可以看到,屏幕尺寸(screenSize)为14寸的产品共有107件,其它尺寸的产品的数目都是0,这是因为在filter里已经限制了screenSize:14.这样,查询结果中,除了screenSize=14的这一项之外,其它项目没有实际的意义.有些时候,用户希望把结果限制在某一范围内,又希望查看该范围外的概况.比如上述情况,既要把查询结果限制在14寸屏的笔记本,又想查看一下其它屏幕尺寸的笔记本有多少产品.这个时候需要用到tag和ex操作符.tag就是把一个filter标记起来,ex(exclude)是在Facet的时候把标记过的filter排除在外.例:返回结果:这样其它屏幕尺寸的统计信息就有意义了.五.SolrJ对Facet的支持。

solr完整快速搭建版(学习笔记)

solr完整快速搭建版(学习笔记)

Solr学习笔记由于公司一个网站需要实现搜索功能的更新换代,在和编辑和领导沟通了一段时间之后,我们决定不再使用之前的通过JDBC发送sql语句进行搜索的方法。

一番比较,我们决定选用Lucene来搭建我们全文搜索的框架。

后来由于开发时间有限,Solr对lucene的集成非常好,我们决定使用Struts+Spring+Solr+IKAnalyzer的一个开发模式来快速搭建一个企业级搜索平台。

自己之前没有接触过这方面的东西,从不断看网上的帮助文档,逛论坛,逛wiki,终于一点一点的开发出一个有自己风格并又适合公司搜索要求的这么一个全文搜索功能。

网上对于lucene,solr的资料并不是那么多,而且大多是拷贝再拷贝,开发起来难度是有的,项目缺陷也是有的,但是毕竟自己积累了这么一个搭建小型搜索引擎的经验,很有收获,所以准备写个笔记记录下来,方便自己以后回忆,而且可以帮助一下其他学者快速搭建一个企业级搜索。

主要思想:此企业级搜索分2块,一块是Solr项目:仅关于Solr一系列配置,索引,建立/更新索引配置。

另一块是网站项目:Action中通过httpclient通信,类似webService一个交互实现,访问配置完善并运行中的Solr,发送查询请求,得到返回的结果hits(solrJ查询,下面详解),传递给jsp页面。

1.下载包Lucene3.5Solr3.5IKAnalyzer3.2.8中文分词器(本文也仅在此分词器配置的基础上)开发时段:2011.12中旬至1月中旬(请自己下载…)都是最新版,个人偏好新东西,稳定不稳定暂不做评论。

2.搭建Solr项目:1.apache-solr-3.5.0\dist下得apache-solr-3.5.0.war复制到tomcat下webapps目录,并更改名字为solr.war,运行生成目录.2.将IKAnalyzer的jar包导入刚生成的项目中lib目录下。

3.Solr项目配置中文分词:在solr/conf/schema.xml中<types>节点下添加个<fieldType>类型(可直接拷贝下段代码)<!--hu add IKAnalyzer configuration--><fieldType name="textik" class="solr.TextField" ><analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/><analyzer type="index"><tokenizer class="org.wltea.analyzer.solr.IKT okenizerFactory"isMaxWordLength="false"/><filter class="solr.StopFilterFactory"ignoreCase="true" words="stopwords.txt"/><filter class="solr.WordDelimiterFilterFactory"generateWordParts="1"generateNumberParts="1"catenateWords="1"catenateNumbers="1"catenateAll="0"splitOnCaseChange="1"/><filter class="solr.LowerCaseFilterFactory"/><filter class="solr.EnglishPorterFilterFactory"protected="protwords.txt"/><filter class="solr.RemoveDuplicatesT okenFilterFactory"/></analyzer><analyzer type="query"><tokenizer class="org.wltea.analyzer.solr.IKT okenizerFactory" isMaxWordLength="false"/><filter class="solr.StopFilterFactory"ignoreCase="true" words="stopwords.txt"/><filter class="solr.WordDelimiterFilterFactory"generateWordParts="1"generateNumberParts="1"catenateWords="1"catenateNumbers="1"catenateAll="0"splitOnCaseChange="1"/><filter class="solr.LowerCaseFilterFactory"/><filter class="solr.EnglishPorterFilterFactory"protected="protwords.txt"/><filter class="solr.RemoveDuplicatesT okenFilterFactory"/></analyzer></fieldType>此配置不过多解释:<analyzer type="query">此处配置type并分成index和query 代表着在索引和查询时候的分词实现,isMaxWordLength表示是以何种分词实现,true,false各代表一种,具体请看IKAnalyzer说明文档。

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为基础构建全文检索引擎。

Nutch相关框架视频教程(Hadoop、Hbase、Lucene、Solr、Tika、Gora)(13-20讲)

Nutch相关框架视频教程(Hadoop、Hbase、Lucene、Solr、Tika、Gora)(13-20讲)

第十三讲1、改变负载三台机器,改变负载host2(NameNode、DataNode、TaskTracker)host6(SecondaryNameNode、DataNode、TaskTracker)host8(JobTracker 、DataNode、TaskTracker)指定SecondaryNameNode为host6:vi conf/masters指定host6scp conf/masters host6:/home/hadoop/hadoop-1.1.2/conf/mastersscp conf/masters host8:/home/hadoop/hadoop-1.1.2/conf/mastersvi conf/hdfs-site.xml<property><name>dfs.http.address</name><value>host2:50070</value></property><property><name>dfs.secondary.http.address</name><value>host6:50090</value></property>scp conf/hdfs-site.xml host6:/home/hadoop/hadoop-1.1.2/conf/hdfs-site.xmlscp conf/hdfs-site.xml host8:/home/hadoop/hadoop-1.1.2/conf/hdfs-site.xml指定JobTracker为host8:vi conf/mapred-site.xml<property><name>mapred.job.tracker</name><value>host8:9001</value></property>scp conf/mapred-site.xml host6:/home/hadoop/hadoop-1.1.2/conf/mapred-site.xml scp conf/mapred-site.xml host8:/home/hadoop/hadoop-1.1.2/conf/mapred-site.xml vi conf/core-site.xml<property><name>fs.checkpoint.dir</name><value>/home/hadoop/dfs/filesystem/namesecondary</value></property>scp conf/core-site.xml host6:/home/hadoop/hadoop-1.1.2/conf/core-site.xmlscp conf/core-site.xml host8:/home/hadoop/hadoop-1.1.2/conf/core-site.xml配置host8:host8上的脚本start-mapred.sh会启动host2和host6上面的TaskTracker,所以需要对host8执行:ssh-keygen -t rsa(密码为空,路径默认)ssh-copy-id -i .ssh/id_rsa.pub hadoop@host2ssh-copy-id -i .ssh/id_rsa.pub hadoop@host6ssh-copy-id -i .ssh/id_rsa.pub hadoop@host8可以在host8上面通过ssh无密码登陆host2和host6ssh host2ssh host6ssh host8在/home/hadoop/.bashrc 中追加:export PATH=/home/hadoop/hadoop-1.1.2/bin:$PATHhost2: 执行start-dfs.shhost8: 执行start-mapred.sh2、SecondaryNameNodessh host6停止secondarynamenodehadoop-1.1.2/bin/hadoop-daemon.sh stop secondarynamenode强制合并fsimage和eidtshadoop-1.1.2/bin/hadoop secondarynamenode -checkpoint force启动secondarynamenodehadoop-1.1.2/bin/hadoop-daemon.sh start secondarynamenode3、启用回收站<property><name>fs.trash.interval</name><value>10080</value></property>1、动态增加DataNode节点和TaskTracker节点以host226为例在host226上执行:指定主机名vi /etc/hostname指定主机名到IP地址的映射vi /etc/hosts增加用户和组addgroup hadoopadduser --ingroup hadoop hadoop更改临时目录权限chmod 777 /tmp在host2上执行:vi conf/slaves增加host226ssh-copy-id -i .ssh/id_rsa.pub hadoop@host226scp -r /home/hadoop/hadoop-1.1.2 hadoop@host226:/home/hadoop/hadoop-1.1.2在host8上执行:vi conf/slaves增加host226ssh-copy-id -i .ssh/id_rsa.pub hadoop@host226在host226上面执行:hadoop-daemon.sh start datanodehadoop-daemon.sh start tasktracker在/etc/hosts的配置文件中,localhost到ip地址的映射要放到ipv4的最后面1、限制hadoop节点连接NameNode:vi conf/hdfs-site.xml<property><name>dfs.hosts</name><value>/home/hadoop/hadoop-1.1.2/conf/include</value></property><property><name>dfs.hosts.exclude</name><value>/home/hadoop/hadoop-1.1.2/conf/exclude</value></property>加入集群节点vi /home/hadoop/hadoop-1.1.2/conf/includeJobTracker:vi conf/mapred-site.xml<property><name>mapred.hosts</name><value>/home/hadoop/hadoop-1.1.2/conf/include</value></property><property><name>mapred.hosts.exclude</name><value>/home/hadoop/hadoop-1.1.2/conf/exclude</value></property>加入集群节点vi /home/hadoop/hadoop-1.1.2/conf/include重启集群2、动态删除DataNode节点和TaskTracker节点vi /home/hadoop/hadoop-1.1.2/conf/exclude增加待删除的节点host226在NameNode上面执行:hadoop dfsadmin -refreshNodesvi hadoop-1.1.2/conf/slaves (去掉host226)vi hadoop-1.1.2/conf/include (去掉host226)hadoop dfsadmin -refreshNodes(使include的更改生效) rm hadoop-1.1.2/conf/excludeexclude主要是使一个datanode节点安全退役删除tasktracker方式一:vi /home/hadoop/hadoop-1.1.2/conf/exclude增加待删除的节点host226在JobTracker上面执行:hadoop mradmin -refreshNodesvi hadoop-1.1.2/conf/slaves (去掉host226)vi hadoop-1.1.2/conf/include (去掉host226)hadoop mradmin -refreshNodes(使include的更改生效) rm hadoop-1.1.2/conf/exclude删除tasktracker方式二:vi /home/hadoop/hadoop-1.1.2/conf/include删除待删除的节点host226在JobTracker上面执行:hadoop mradmin -refreshNodesvi hadoop-1.1.2/conf/slaves (去掉host226)1、运行基准测试hadoop jar hadoop-test-1.1.2.jarhadoop jar hadoop-test-1.1.2.jar DFSCIOTest -write -nrFiles 12 -fileSize 100000 -resFile test hadoop jar hadoop-test-1.1.2.jar DFSCIOTest -read -nrFiles 12 -fileSize 100000 -resFile test hadoop jar hadoop-test-1.1.2.jar DFSCIOTest -clearGanglia主要是用来监控大规模分布式系统的性能,如:cpu 、内存、硬盘、负载、网络流量等。

solr语法

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分词原理,其实也不难,就是得有点儿技巧和经验。

就像咱们做菜一样,得多练练手,才能做出好吃的菜来。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如果一个field的名字没有匹配到,那么就会用动态field试图匹配定义的各种 模式。 "*"只能出现在模式的最前和最后 较长的模式会被先去做匹配 如果2个模式同时匹配上,最先定义的优先
Dynamic Fields
copyField
将多个field的数据放在一起同时搜索,提供速度 将一个field的数据拷贝到另一个,可以用2种不同的方式来建立 索引。
/blog/1664127
java -Dsolr.solr.home=solr/ -jar start.jar
Solr管理界面介绍
solr管理界面地址
http://localhost:8983/solr
Solr example
介绍solr example
hl高亮
hl.fl:用空格或逗号隔开的字段列表
hl.simple.pre:前缀 hl.simple.post:后缀
注意:要启用某个字段的高亮功能,需要保 证这个字段在schema中是store。
ቤተ መጻሕፍቲ ባይዱ
高亮需要注意的问题
对于multiValued=true的字段不要设计高 亮显示
STOP.PORT和STOP.KEY还可以去solrui界面 的java properties栏目中找
Solr启动(2)
solr命令讲解(solr-4.10.4/bin/solr)
start, stop, restart, healthcheck solr start -help solr start [-f]:启动solr,默认后台运行 solr start -p <port>:指定solr实例端口 solr start -s <dir>:指定solr的solr.solr.home solr start -d <dir>:指定solrweb项目根路径(项目根 路径下必须有webapps/solr.war) solr -p <port> -V:查看指定solr的运行基本信息 solr -i:查看有多少solr服务正在运行 solr stop -p <port>:停止运行在指定端口的solr服务 solr stop -all:停止所有solr服务
/dist/lucene/solr/4.10.4/
solr文档:
/dist/lucene/solr/ref-guide/ /solr/4_10_0/tutorial.html
Config Analysis
Schema
Caching
Solr Core
Concurrency
Update Handler
Lucene
Replicatio
8
solr的应用
Solr文档
solr官方网站
/solr/
solr下载(v4.10.4)
Solr Scheme分析
fieldType
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" /> name:标识而已,并不是java中的String
class和其他属性决定了这个fieldType的实际行为
分析solr查询界面功能
参数 q fq sort start rows fl df wt 代表query input 对q的查询结果进行过滤 排序 相当于pagenum 相当与pagesize 指定返回那些字段内容,用逗号或空格 分隔多个。 id,name 在solrconfig.xml中843行 在schema.xml中258行 可以有 xml, json... 描述 备注 id:SOLR1000 price:[0 TO 100] id desc 表示 id 降序 price desc,id desc
cd \solr-4.10.2\example\exampledocs *xml 内容查看 将*.xml上传到solr服务器
java -jar post.jar *.xml
post.sh *.xml
使用管理页面查询
Solr Scheme分析
Field
name:字段名 type:之前定义过的各种FieldType indexed:是否被索引 stored:是否被存储(如果不需要存储相应字段值,尽量设为false) multiValued:是否有多个值(对可能存在多值的字段尽量设置为true, 避免建索引时抛出错误)
solr课程
图书目录
solr简介
solr是一个基于lucene的搜索引擎,可以实现全文搜索。 它对外提供类似于Web-service的API接口,可以通过 http请求进行操作。 solr可以很方便的实现一个站内搜索功能 (/中的搜索)
Solr历史
Elasticsearch是一个采用java语言开发的,基于Lucene构造的开源, 分布式的搜索引擎.,设计用于云计算中,能够实现实时搜索。 官方主页:/
Elasticsearch
solr的特点
通过HTTP协议处理搜索和查询请求。 增加了缓存,让响应速度更快。 提供了一个基于web的管理界面 查询结果分类(facet) 支持分布式,支持大规模的部署 (solrcloud)(Solr4.0版本开始)
第二步
第三步 export
第四步
JAVA_OPTS="/usr/local/solr-tomcat/solr"
第五步
配置日志,如果不配置的话,启动会报错,无法访问solr平台,查看 localhost.2015-01-01.log日志。 把solr-4.10.4\example\lib\ext目录下的jar包都拷贝到tomcat的lib 目录下即可。
4
全文搜索的工具
Lucene
Java家族中最为出名的一个开源搜索引擎,在Java世界中已经是标 准的全文检索程序,它提供了完整的查询引擎和索引引擎,没有中 文分词引擎,需要自己去实现。
官方主页:/
solr
Solr是一个用java开发的独立的企业级搜索应用服务器,它提供 了类似于Web-service的API接口,它是基于Lucene的全文检索 服务器 官方主页:/solr/
solr启动(3)仅适用于linux
第一步
建立一个solr的运行目录 例如:在/usr/local目录下建立solr-tomcat 将下载的solr-4.10.4中的solr-4.10.4\example目录下的solr文 件夹拷贝到/usr/local/solr-tomcat目录下 把solr-4.10.4中dist目录中的solr-4.10.4.war包拷贝到tomcat 的根目录下,名字改为solr.war
Solr目录结构
solr依赖环境
必须是jdk1.7或以上
solr启动(1)
tar -zxvf solr-4.10.4.tgz cd solr-4.10.4\example java -jar start.jar 后台启动:java -DSTOP.PORT=8984 DSTOP.KEY=solr -jar start.jar --daemon & 停止:java -DSTOP.PORT=8984 DSTOP.KEY=solr -jar start.jar --stop
Solr 查询参数之 fq (Filter Query)
fq 值是一个查询,用于过滤查询结果,在负责 查询时,可以很好的提高查询效率,fq 查询的 内容会被缓存着,下次使用相同的过滤查询时, 可以从缓存中命中。 使用 fq 参数时需要注意以下几点
在一个查询中,fq 参数可以设置多次。结果中将返回 这些过滤条件的交集 过滤查询的结果将被分别缓存 使用filter query可以充分利用filter query cache,提 高检索性能。
使用solr start 命令启动,默认指定solr/目录,可 以用过-s <path> 指定配置文件目录 使用tomcat启动则需要修改solr项目的web.xml文 件或者添加JNDI文件(或者使用export命令定义 solr.solr.home,仅适用于linux环境) 设置solr.solr.home的几种方式
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
solr.TextField 允许用户通过分析器来定制索引和查询,分析器 包括 一个分词器(tokenizer)和多个过滤器(filter) positionIncrementGap:可选属性,定义在同一个文档中此 类型数据的空白间隔,避免短语匹配错误。
Lucene 架构
7
solr的架构
HTTP Request Servlet Admin Interface Update Servlet XML Update Interface
Standard Request Handler
Custom Request Handler
XML Response Writer
访问http://localhost:8080/solr/
solr.solr.home目录
solr.solr.home指solr core的配置文件的根目录 Solr启动的时候会检查solr.solr.home的Java系 统属性,如果没找到的话默认指定solr/目录 使用java -jar start 启动的时候可以通过下面方 式指定
默认的查询字段,默认是text 使用solrConfig中的df属性代替schema中 的defaultSearchField
相关文档
最新文档