高性能搜索solr 学习笔记 分享
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笔记
Solr1课程计划1、站内搜索技术的选型2、什么是solr3、Solr的安装及配置,solr整合tomcat4、Solr的功能展示,后台管理界面5、Solr实现索引的维护a)文档的添加b)文档的删除c)文档修改6、索引库的查询7、Solrj客户端,实现索引库的维护及查询。
8、综合案例。
电商网站的搜索。
2站内搜索技术的选型1、Lucene:可以实现站内搜索。
Lucene是一个工具包,如果实现全文检索功能需要大量的开发工作,还需要我们自己来实现搜索的优化、索引库的优化、索引库的集群。
不推荐使用。
2、使用搜索引擎实现站内搜索,可以使用谷歌、百度实现站内搜索。
实现简单,但是索引库无法维护,受制于搜索引擎。
3、Solr:全文检索的服务器。
只需要配置不需要二次开发。
提供了完整的查询优化方案以及集群方案。
推荐使用此技术。
3什么是solr3.1 Solr的概念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的配置和运行情况。
3.2 Solr和lucene的区别Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。
solopi使用实践
solopi使用实践
Solr是一个基于Lucene的开源搜索平台,它提供了强大的全文搜索、分布式搜索、分析和高性能等特性。
SolrPi是一个基于树莓派的Solr搜索引擎应用。
它可以在树莓派上运行Solr,从而在资源受限的环境中实现搜索功能。
在实际使用中,SolrPi可以被用于各种场景。
首先,在资源受限的环境下,比如物联网设备、嵌入式系统或者边缘计算设备,SolrPi可以提供基于Lucene的强大搜索功能,满足这些设备的搜索需求。
其次,SolrPi也可以被用于教育和学习,通过在树莓派上搭建Solr搜索引擎,用户可以学习和实践搜索引擎的原理和应用。
此外,SolrPi还可以被用于个人项目或者小型组织的搜索需求,比如搭建简单的文档搜索系统或者博客搜索功能。
在使用SolrPi时,用户需要首先准备一个树莓派设备,然后安装操作系统和Java运行环境。
接着,用户可以下载并安装SolrPi 软件,进行配置和启动。
在配置过程中,用户可以根据自己的需求调整索引和搜索的相关参数,比如字段定义、分词器选择、索引策略等。
一旦配置完成,用户就可以通过SolrPi提供的API接口或者界面进行搜索功能的调用和使用。
总的来说,SolrPi是一个在资源受限的环境下实现搜索功能的利器,它可以被广泛应用于物联网设备、教育学习、个人项目等领域,通过简单的配置和操作,用户就可以在树莓派上搭建起强大的搜索引擎应用。
[镇群之宝]solr_学习笔记_v1.2
高性能搜索SOLR 学习笔记分享相应Module 学习总结开发类型Web开发文件内容本文主要介绍solr中query参数、query用法和functionQuery的基本应用,solr,query,参数,functionQuery,查询语法,函数查询!版本作者/修改人日期V1.0 全国妖防组V1.1 闲杂人等2012-12-07V1.2 依米艳2013-06-03一.Query参数1.CoreQueryParam查询的参数1)q: 查询字符串,必须的。
2)q.op: 覆盖schema.xml的defaultOperator(有空格时用"AND"还是用"OR"操作逻辑),一般默认指定。
3)df: 默认的查询字段,一般默认指定。
4)qt:query type,指定查询使用的Query Handler,默认为“standard”。
5)wt:writer type。
指定查询输出结构格式,默认为“xml”。
在solrconfig.xml中定义了查询输出格式:xml、json、python、ruby、php、phps、custom。
6)echoHandler:是否在查询结果中显示使用的Query Handler名称。
7)echoParams:是否显示查询参数。
none:不显示;explicit:只显示查询参数;all:所有,包括在solrconfig.xml定义的Query Handler参数。
8)indent - 返回的结果是否缩进,默认关闭,用indent=true|on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。
9)version - 查询语法的版本,建议不使用它,由服务器指定默认值。
monQueryParameters1)sort:排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]…。
Solr总结-吐血总结
FAILED SocketConnector@0.0.0.0:8983: .BindException: Address already in use: JVM_Bind就说明当前端口占用中.改一下就可以了.如果没有报错启动成功后就可以在浏览器中输入地址:http://localhost:8983/solr/就可以看到如下界面
例如,Field可以包含字符串、数字、布尔值或者日期,也可以包含你想添加的任何类型,只需用在solr的配置文件中进行相应的配置即可。Field可以使用大量的选项来描述,这些选项告诉Solr在索引和搜索期间如何处理内容。
现在,查看一下表1中列出的重要属性的子集:
属性名称
描述
Indexed
Indexed Field可以进行搜索和排序。你还可以在indexed Field上运行Solr分析过程,此过程可修改内容以改进或更改结果。
安装步骤请参考相应的帮助文档。
4.2
本文针对Solr4.2版本进行调研的,下文介绍内容均针对Solr4.2版本,如与Solr最新版本有出入请以官方网站内容为准。Solr官方网站下载地址:/solr/
4.3
Solr是使用Ant进行管理的源码,Ant是一种基于Java的build工具。理论上来说,它有些类似于Maven或者是C中的make。下载后解压出来后,进行环境变量设置。
Stored
stored Field内容保存在索引中。这对于检索和醒目显示内容很有用,但对于实际搜索则不是必需的。例如,很多应用程序存储指向内容位置的指针而不是存储实际的文件内容。
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搜索引擎是一个基于Lucene的搜索平台,可以提供快速、准确和可扩展的搜索功能。
在本文中,我们将探讨Solr搜索引擎的设计和实现。
一、Solr搜索引擎的概述Solr搜索引擎是一个开源的搜索平台,由Apache基金会开发和维护。
Solr搜索引擎的基础是Lucene搜索引擎,它在性能和可扩展性方面做出了大量的改进。
Solr搜索引擎可以满足不同的搜索需求,包括全文搜索、过滤搜索和数据聚合搜索等。
此外,Solr 搜索引擎还提供了丰富的管理界面和API,可以方便地配置和管理搜索应用程序。
二、Solr搜索引擎的架构Solr搜索引擎的架构由以下组件组成:1. HTTP服务器 - Solr搜索引擎基于HTTP协议实现,因此需要一个HTTP服务器来处理请求。
Solr搜索引擎提供了内置的Jetty服务器和外部Web服务器支持。
2. XML配置文件 - Solr搜索引擎的配置是通过XML文件实现的。
配置文件包括核心配置文件、请求处理器配置文件、查询解析器配置文件等。
3. Lucene索引库 - Solr搜索引擎建立在Lucene索引库的基础上,通过对Lucene索引库的扩展和优化,支持更加灵活的搜索和查询操作。
4. 请求处理器 - Solr搜索引擎的请求处理器负责处理用户提交的搜索请求。
Solr搜索引擎提供多个请求处理器,包括查询处理器、提交处理器、导入处理器和更新处理器等。
5. 查询解析器 - Solr搜索引擎的查询解析器是查询请求的重要组成部分,它负责将用户的查询请求解析为Lucene索引库的查询表达式。
6. 响应生成器 - Solr搜索引擎的响应生成器负责将查询结果转化为响应格式,包括XML、JSON和CSV等。
三、Solr搜索引擎的工作原理Solr搜索引擎的工作过程包括索引构建和搜索查询两个阶段。
solr培训
chain that handle updates Query Parser plugins —Mix and match query types in a single request —Function plugins for Function Query Text Analysis plugins: Analyzers, Tokenizers, TokenFilters ResponseWriters serialize & stream response to client
配置schema.xml
<fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> <field name ="text" type ="text_ik" indexed ="true" stored ="false" multiValued ="true"/>
其他配置
uniqueKey: 唯一键,这里配置的是上面出现的fileds,一般是id、url等不重复 的。在更新、删除的时候可以用到。 defaultSearchField:默认搜索属性,如q=solr就是默认的搜索那个字段 solrQueryParser:查询转换模式,是并且还是或者(AND/OR必须大写)
优化索引
优化Lucene 的索引文件以改进搜索性能。索引完成后执行一下优
化通常比较好。如果更新比较频繁,则应该在使用率较低的时候安
Solr学习笔记
q 关键字模糊查询q.op=OR连接连接符,AND OR NOThl=true开启高亮hl.fl=name,features设置高亮字段,默认用<em></em>包裹facet true/false 开启分组facet.field指定排序字段fqmanu:Belkin指定字段精确查找sort price asc按指定字段排序start 0 当前页开始记录索引编号,从0开始计算rows 10 每页显示几条flname,price, 查询返回结果集包含哪些字段,score字段是内置字段df text 查询字段类型wt xml 返回数据类型get方式请求:http://localhost:8983/solr/collection1/select?q=iPod&fq=manu%3ABelkin&sort=price+asc&fl=na me%2Cprice%2Cfeatures%2Cscore&df=text&wt=xml&start=0&rows=10返回的XML数据格式如下:<response><lst name="responseHeader"><int name="status">0</int><int name="QTime">47</int><lst name="params"><str name="df">text</str><str name="fl">name,price,features,score</str><str name="sort">price asc</str><str name="start">0</str><str name="q">iPod</str><str name="wt">xml</str><str name="fq">manu:Belkin</str><str name="rows">10</str></lst></lst><result name="response" numFound="0" start="0" maxScore="0.0"/></response>返回的JSON数据格式如下:{"responseHeader":{"status":0,"QTime":0,"params":{"df":"text","fl":"n ame,price,features,score","sort":"priceasc","start":"0","q":"iPod","wt":"json","fq":"manu:Belkin","rows":"10 "}},"response":{"numFound":0,"start":0,"maxScore":0.0,"docs":[]}}Query: title:(solr in action)^2.5 description:(solr in action)Solr在Tomcat下部署:Solr.war解压开,把E:\solr-4.7.2\example\lib\ext下的所有jar包copy到E:\apache-tomcat-7.0.47\webapps\solr\WEB-INF\lib下在E:\apache-tomcat-7.0.47\webapps\solr\WEB-INF\下新建classes目录,把E:\solr-4.7.2\example\resources目录下的log4j.properties配置文件copy到E:\apache-tomcat-7.0.47\webapps\solr\WEB-INF\classes下,修改E:\apache-tomcat-7.0.47\webapps\solr\WEB-INF下的web.xml配置文件,添加如下配置:<env-entry><env-entry-name>solr/home</env-entry-name><env-entry-value>C:\solrHome</env-entry-value><env-entry-type>ng.String</env-entry-type></env-entry>C:\solrHome是我配置的Solr主目录,把E:\solr-4.7.2\example下的示例copy到solrHome目录下,如上图:conf用来存放solr配置文件,data是solr用来存放索引文件和日志文件的lib是依赖的第三方jar包Schema.xml配置示例:下面这是ansj分词器和MMSeg分词器的配置:solrconfig.xml配置示例:可以从solr的example下的示例工程里copy一份,然后如图添加数据导入配置,数据导入是在data-config.xml中配置的data-config.xml配置示例:配置数据库的JDBC链接url驱动类数据库帐号密码什么的,一看就懂的,就不解释了,我的测试表结构截图如下:别忘记添加mysql 驱动包,如图:把solr的war包copy到tomcat的webapps目录下,如果需要使用IK分词器的自定义词典和停用词词典,还需要把IK的配置文件以及相关词典文件copy到web-inf/classes文件夹下,如图:IK分词器配置文件IKAnalyzer.cfg.xml配置如下:启动Tomcat,访问如下url进入solr后台: http://localhost:8080/solr/admin选择运行哪个solr实例,查询测试:deletedpkquery:增量删除,数据库标记isdeleted=1后,更新solr删除文档批量导入(full-import):http://localhost:8080/solr/dataimport?command=full-import&commit=true增量导入(delta-import):http://localhost:8080/solr/dataimport?command=delta-import&commit=true导入状态查询(status):http://localhost:8080/solr/dataimport重新装载配置文件(reload-config):http://localhost:8080/solr/dataimport?command=reload-config终止导入(abort):http://localhost:8080/solr/dataimport?command=abortclean=true 表示创建索引之前先删除原有索引。
Solr学习
发往多个搜索引擎,在接收到各个搜索引擎返回的结果后, 根据一定得排序算法重新排序后返回给用户。
串行式元搜索引擎仅提供一个搜索引擎的列表,由用户选
择使用哪个搜索引擎来进行查询,因此它可以说是“搜索 引擎的搜索引擎” ,帮助用户进行搜索引擎的选择。
开源搜索引擎Lucene家族
Nutch是以Lucene为基础的Web搜索引擎,利用它可以快
Lucene与Solr的关系
Solr是Lucene的一个子项目,
它在Lucene的基础上进行包 装,成为一个企业级搜索 服务器开发框架。
Solr与Lucene的主要区别
Solr
主控
体现在:
Solr更加贴近实际应用,
是Lucene在面向企业搜索 服务领域的扩展; Solr的缓存等机制使全文 检索获得性能上的提升; 通过配置文件的开发使 得Solr具有良好的扩展性; Solr提供了用户友好的管 理界面与查询结果界面。
相关排序
相关排序(relevance ranking)是指信息检索系统返回结果的
排序,排序结果反应了文档与查询的相关程度。在搜索引 擎领域,相关排序不仅仅考虑查询与文档的相关程度,还 应该考虑链接间的相互关系(主要指Web搜索引擎)与网站 的重要程度等等。
电子科技大学的汪文勇提出:研究搜索引擎的页面优先度
space model ,VSM)由Gerald Salton提出,该模型用于 计算文档与查询的相关程度,仅仅实用于普通文本。 Web搜索引擎的结果排序: 对于web搜索引擎,搜索 结果排序不仅仅考虑查询词与文档之间的关系,还 需要考虑查询词在网页文件中的显示位置、显示状 态以及链接和被连接关系。
索引式搜索引擎依靠一个被称作蜘蛛(Spider)或
一种增强型的SOLR校准方法
一种增强型的SOLR 校准方法随着现代信息技术的快速发展,搜索引擎已成为了人们获取信息的主要渠道之一。
SOLR 是一款开源的面向搜索引擎的Java 应用程序,它使用了Lucene 作为其核心引擎,但是SOLR 的性能和准确性需要进行校准,以提高搜索的质量。
本文将介绍一种增强型的SOLR 校准方法。
一、SOLR 校准的重要性在现代社会中,搜索引擎已经成为了人们获取信息的主要手段之一。
然而,在处理大规模数据的时候,搜索引擎常常会出现精度不高、效率不佳的问题,因此需要进行校准。
SOLR 作为一款开源的Java 应用程序,使用了Lucene 作为其核心引擎,已经成为了广泛使用的搜索引擎之一。
但是,SOLR 的性能和准确性需要进行校准,以提高搜索的质量。
尤其是在处理大规模数据时,SOLR的准确性和性能问题将显得尤为突出。
因此,对SOLR 进行校准是非常重要的。
二、SOLR 校准方法简介SOLR 校准的方法可以分为两种:1.传统的基于词频的校准方法这种方法是比较传统的校准方法,主要是通过词频来检验文本相似度。
这种方法的优势在于实现简单,运算速度快,但是存在的问题是无法进行语义分析,因此对语义相似的文本无法正确识别。
2.基于机器学习的SOLR 校准方法基于机器学习的校准方法是在传统的校准方法基础上进行升级,它采用了机器学习算法,并且结合了语义分析技术。
这种方法可以通过对已知数据进行学习和训练,来实现对未知数据的准确识别。
相对于传统的校准方法,基于机器学习的校准方法可以做到更加准确、更加自动化。
三、增强型的SOLR 校准方法基于机器学习的校准方法是SOLR 校准方法的升级版,但是它还存在一些缺陷,比如:1.模型泛化能力不强,对新的未知数据不能很好地处理。
2.训练模型需要大量的样本数据,因此需要耗费大量的时间和资源。
针对这些问题,我们提出了一种增强型的SOLR 校准方法。
该方法基于机器学习的校准方法,并且引入了一些新的技术,可以有效地解决上述问题。
Solr的应用场景分析
Solr的应用场景分析Solr是一个基于Java的搜索引擎,被广泛应用于Web搜索、文档管理、电商等各种应用场景。
本文将从Solr的特性入手,探讨其主要应用场景及其优势。
一、高效搜索引擎Solr的核心特性是高效搜索引擎,它能够处理大量的数据,并且具有快速的搜索速度。
因此,Solr适用于大型网站、Web应用程序以及企业级应用程序等各种情况下的搜索引擎。
1、电子商务在电子商务行业,Solr可以帮助电商网站提供快速、精准的搜索体验,减少用户的等待时间,促进转化率。
Solr具有高效的搜索速度以及高质量的搜索结果,可以根据用户的搜索需求,实现智能联想、拼写检查等搜索辅助功能,提高用户体验。
另外,Solr还支持基于地理位置的搜索,比如可以按照用户所在地域,展示用户附近的产品信息,大大提升用户的便利性。
2、企业应用程序在企业应用程序中,Solr也经常被用作搜索引擎,能够搜索企业内存储的各种数据,例如产品信息、客户、工程文件等。
Solr提供了高度灵活的搜索体验,用户可以通过各种搜索参数,实现快速、准确地检索所需的数据。
二、文档管理系统Solr不仅仅是一个搜索引擎,同时也是一个强大的文档管理系统,支持各种数据格式的索引和搜索。
因此,Solr可以被广泛应用于文档管理系统,帮助用户快速准确的检索所需文件。
1、数字资料库Solr可以作为数字资料库的一部分,能够实现全文检索和查询,而不仅仅是简单的关键字检索。
数字资料库包括了各种类型的文件,例如PDF文件、Microsoft Office文件、HTML文件等,Solr可以基于这些文件的内容建立索引,并实现快速准确的搜索功能。
2、知识管理系统Solr可以作为一个知识管理系统的组件,帮助企业组织内部的知识库。
当员工需要查询某种信息时,Solr可以搜索企业内多种数据源的内容,并返回相关的结果。
此外,Solr还具有自动标记、选取等功能,能够帮助企业快速实现知识共享,提高工作效率。
solr学习笔记
2.关于solr多核的问题可以参照solr。
Xml例子如下:<solr persistent="true" sharedLib="lib"><cores adminPath="/admin/cores"><core name="core0" instanceDir="core0" /><core name="core1" instanceDir="core1" /></cores></solr>这就是多核的配置。
这里的core0是solr/example/solr下的内容,即copy example/solr下的内容到core0中Any subclass of FieldType may be used as a field type class, using either its full package name, or the "solr" alias if it is in the default Solr package.fieldType中的类是全路径名或者用solr替代路径如果在默认的Solr包中的话Field types that store text (TextField, StrField) support compression of stored contents:域类型存储文本时支持存储内容压缩compression support was removed in 1.4.1 压缩支持在1.4.1中被删除了。
Recommended fields推荐域While these fields aren't strictly mandatory (Solr will run if you remove them fully), Bad Things happen in some situations if they aren't defined. We recommend that you leave these fields alone. If you don't use them, there's no appreciable penalty这些域不是严格强制要求的,如果你把他们全部删除,solr也会运行。
solr笔记
Solr全文搜索服务1课程计划1、solr介绍2、solr安装配置(重点)3、solr的基本使用(重点)4、solrj的使用(重点)5、京东案例(重点)2Solr介绍2.1什么是solrSolr也是Apache下一个项目,它是使用java开发的,它是基于Lucene的全文搜索服务器。
Solr如何进行索引和搜索索引:客户端(可以是浏览器可以是java程序)发送post请求到solr服务器,发给solr服务器一个文档(xml、json),就可以进行一个添加索引删除索引、修改索引的操作。
搜索:客户端(可以是浏览器可以是java程序)发送get请求到solr服务器,请求solr服务器给它响应一个结果文档(xml、json),程序员拿到这些文档就可以对其进行解析。
进行视图渲染。
Solr本身没有UI界面的功能。
2.2Solr和lucene的区别Lucene是一个全文检索的工具包,它是一堆jar包,不能单独运行,即不能独立对外提供服务。
Solr是一个全文搜索服务器,它可以独立运行,它能独立对外提供搜索和索引服务。
使用lucene开发站内搜索的话,程序员编写的代码量会比较大,而且在搜索和索引流程得考虑他的性能。
使用solr开发站内搜索的话,程序员只需编写少量的代码,快速的搭建出来站内搜索功能。
而且性能方面不需要程序员去考虑,solr对它已经进行了处理。
3Solr安装配置3.1Solr下载Solr和lucene的版本是同步更新的,最新的版本是5.2.1本课程使用的版本:4.10.3下载地址:/dist/lucene/solr/下载版本:4.10.3Linux下需要下载lucene-4.10.3.tgz,windows下需要下载lucene-4.10.3.zip。
Bin:solr的脚本Contrib:solr为了增强自身的功能,所添加的扩展依赖包Dist:solr build过程时产生的war包和jar包,还有它的一些依赖包Docs:文档Example:例子目录Solr:配置了solr运行时的信息,它是一个标准的solrhome目录Multicore:可以配置多个SolrCore实例Webapps:solr.war的目录Licenes:版本信息3.2SolrCore的安装配置3.2.1Solrhome和SolrCoreSolrhome是一个目录,它是solr运行的主目录,它包括多个SolrCore目录,SolrCore目录中就solr实例的运行配置文件和数据文件。
solr使用方法
solr使用方法Solr是一种开源的搜索平台,基于Apache Lucene构建而成。
它提供了强大的全文检索功能和高性能的分布式搜索能力,广泛应用于各种大型网站和企业应用中。
本文将介绍Solr的使用方法,包括安装配置、数据导入、搜索查询等方面。
一、安装配置1. 下载Solr:访问官方网站,下载最新版本的Solr压缩包。
2. 解压缩:将下载的压缩包解压到指定目录。
3. 启动Solr:进入解压后的目录,执行启动命令,等待Solr启动成功。
4. 访问Solr管理界面:打开浏览器,输入Solr的地址和端口号,进入Solr的管理界面。
二、数据导入1. 创建Core:在Solr管理界面中,创建一个Core,用于存储和管理数据。
2. 定义Schema:在Core中定义Schema,指定数据的字段类型、索引配置等。
3. 导入数据:将数据准备好,使用Solr提供的数据导入工具,将数据导入到Core中。
三、搜索查询1. 构建查询请求:使用Solr提供的查询语法,构建查询请求。
2. 发送查询请求:将查询请求发送给Solr服务器,等待返回结果。
3. 解析查询结果:解析返回的结果,获取需要的信息。
四、高级功能1. 分页查询:通过设置start和rows参数,实现分页查询功能。
2. 排序:通过设置sort参数,实现结果的排序。
3. 过滤查询:通过设置fq参数,实现对结果的过滤。
4. 高亮显示:通过设置hl参数,实现搜索关键词的高亮显示。
5. 聚合统计:通过设置facet参数,实现对搜索结果的聚合统计。
五、性能优化1. 索引优化:通过优化索引结构、字段配置等,提升索引的性能。
2. 查询优化:通过合理使用缓存、调整查询参数等,提升查询的性能。
3. 集群部署:将Solr部署到多台服务器上,实现分布式搜索,提升系统的吞吐量和可用性。
六、常见问题解决1. 乱码问题:通过设置字符集、使用适当的分词器等,解决乱码问题。
2. 性能问题:通过调整配置参数、优化查询语句等,解决性能问题。
solr 高级用法
solr 高级用法Solr是一个基于Lucene的开源搜索平台,用于实现强大的全文搜索和实时数据分析功能。
除了基本的搜索查询功能外,Solr还提供了许多高级用法,使用户能够更灵活地处理和管理搜索引擎的行为。
以下是一些Solr的高级用法。
1. 复杂查询:Solr支持复杂的查询语法,可以通过AND、OR、NOT等逻辑运算符组合多个查询条件。
此外,Solr还支持通配符、正则表达式、范围查询和模糊查询等功能,以满足各种搜索需求。
2. 排序和过滤:Solr允许用户根据某个字段对搜索结果进行排序,并支持多字段排序和自定义排序。
此外,用户还可以通过过滤查询将搜索结果限定在指定的条件范围内,以提高搜索效率。
3. 高亮显示:Solr可以将搜索结果中匹配的关键字进行高亮显示,帮助用户更快速地定位到所需信息。
通过使用Solr的高亮组件,用户可以自定义高亮标签、字段和样式等。
4. 字段映射和索引配置:Solr允许用户灵活定义字段映射规则,将文档的各个字段映射到Solr的索引中。
用户可以设置字段类型、分词器、过滤器等,以满足不同字段的需求,并提高搜索的准确性。
5. 分布式搜索和负载均衡:Solr支持分布式搜索,可以将索引和查询请求分布在多个Solr节点上。
用户可以通过Solr Cloud实现自动的负载均衡和故障恢复,提高系统的稳定性和可靠性。
6. 数据导入和实时更新:Solr提供了数据导入处理器,可以从不同的数据源(如数据库、文件等)中导入数据到Solr的索引中。
此外,Solr还支持实时更新,可以通过API接口实时添加、更新和删除索引中的文档数据。
这些仅是Solr高级用法的一部分,通过灵活运用这些功能,用户可以最大限度地提升搜索引擎的性能和效果,满足各种复杂的搜索需求。
Solr的强大功能和易用性使其成为许多企业和网站的首选搜索平台。
Solr学习笔记(一)
Solr学习笔记(⼀)最近准备为⼀个产品做⼀个站内的搜索引擎,是⼀个java产品。
由于原来做过,所以⾃然⽽然的就想到了使⽤Lucene。
在复习Lucene的过程中发现了这个和Lucene绑定在⼀起的Apache的⼦项⽬,发现这个搜索服务器正是我们想要的。
原来我们做Lucene,会把索引和搜索都放在同⼀个⽹站下,也就是在⽹站启动的时候,或定时在⽹站应⽤程序中进⾏Lucene的初始化和索引,并使⽤Lucene搜索API提供搜索服务。
这个过程,应⽤⽹站既提供了搜索内容的提供者(从数据库或⽂件提取数据给Lucene索引),也是搜索内容的索引者,⼜是⽤户搜索服务的结果提供者。
这很明显是不够理想的,特别是在分布式集群部署环境下。
Solr的出现,正好帮助我们解决了这个问题。
单⼀的搜索服务被独⽴出来,提供数据的索引和搜索,并且这个搜索服务可以⽅便的为多个应⽤进⾏服务。
余下的就是把搜索内容提供者也分离出来,形成⼀个或多个独⽴的服务。
这样服务于服务之间的耦合就降低了,业务和功能的变化,都可以在某⼀个⾓⾊服务中处理,⽽不需要影响其他的服务。
最重要的,Solr可以提供基于Http和XML的Web API,使它可以跨平台和语⾔进⾏服务。
集群和分布式部署也变的更容易、风险更低,并且会更有针对性。
新的搜索架构就会变成下图这样:solr的安装⾸先我们先来安装solr。
安装solr⽐较简单。
我的安装是在windows环境下进⾏,tomcat7 + solr 10.1。
1. 在⽹上下载solr的安装包,解压缩⽂件。
2. 找到solr.war⽂件,把⽂件复制到tomcat的webapps⽂件夹下,在这之前如果你的tomcat是运⾏着的,则先要停⽌运⾏。
3. 把example\resources\log4j.properties 复制到 $CATALINA_HOME/lib/ ⽬录下。
4. 然后把下载包中的solr-4.x.0/example/solr⽂件夹复制到你希望存储的本地⽂件夹D:\solr下,这个⽂件夹会作为solr索引⽂件的存放⽬录:$SOLR_HOME。
ApacheSolr搜索平台框架详细介绍
ApacheSolr搜索平台框架详细介绍Apache Solr搜索平台框架详细介绍Apache Solr是一个基于Apache Lucene的开源搜索平台框架,被广泛应用于全文检索、企业级搜索以及大数据分析等领域。
本文将对Apache Solr搜索平台框架进行详细介绍,包括其原理、特点以及应用场景等。
一、Apache Solr概述Apache Solr是一个高性能、分布式的全文搜索平台,它提供了强大的搜索、命中高亮、分面搜索、动态集群扩展等功能,能够满足各种规模和需求的搜索场景。
它是基于Java开发的,使用简便且易于扩展。
二、Apache Lucene原理介绍Apache Solr是基于Apache Lucene开发的,因此在介绍Solr之前,有必要先了解Lucene的原理。
Lucene是一个高性能的全文搜索引擎库,它使用倒排索引来加快搜索速度。
倒排索引是一种以词为单位构建的数据结构,通过将词映射到包含该词的文档中,可以快速定位到相关文档。
三、Solr的核心组件1. 文档处理:Solr可以处理各种格式的文档,包括文本、XML、JSON等。
它通过提供快速的索引和检索功能,支持对海量数据进行高效的搜索。
2. 检索与排序:Solr提供了丰富的检索和排序功能,包括全文检索、语法查询、范围查询、模糊查询等。
同时,Solr还支持对搜索结果的排序和分页功能,提供了灵活的结果展示方式。
3. 分词与索引:Solr使用先进的分词技术将文本切分成单词,并构建倒排索引,以便快速定位到相关文档。
同时,Solr还支持自定义分词器和过滤器,用户可以根据实际需求进行配置。
4. 高可用与容错:Solr支持集群部署,可以动态扩展和缩减节点,实现高可用和容错。
它还提供了负载均衡、故障转移和自动备份等机制,保证了系统的稳定性和可靠性。
五、Solr的应用场景1. 电子商务:Solr可以用于电商平台的商品搜索和推荐,通过分析用户的搜索行为和购买记录,提供个性化的搜索结果和推荐商品。
Solr 学习笔记
Solr笔记Solr 是一种可供企业使用的、基于Lucene 的搜索服务器,它支持层面搜索、命中醒目显示和多种输出格式。
在这篇分两部分的文章中,Lucene Java™ 的提交人Grant Ingersoll 将介绍Solr 并向您展示如何轻松地将其表现优异的全文本搜索功能加入到Web 应用程序中。
一旦用户需要某种信息,就可以立即搜索到这些信息,这种要求再也不是可有可无的了。
随着Go ogle 和类似的复杂搜索引擎的出现,用户希望得到高质量的搜索结果,帮助他们快速、轻易地找到所需的信息。
经理对您的在线购物站点同样抱有很高的期望,要求它能够提供一个可伸缩、高度可用且易于维护的搜索解决方案,并且安装这个解决方案不应太昂贵。
对于您而言,只是希望事业进步,让老板和客户满意,以及保持头脑清醒。
使用Apache Solr 可以满足所有的这些要求,它是一种开放源码的、基于Lucene Java 的搜索服务器,易于加入到Web 应用程序中。
Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON 格式)。
它易于安装和配置,而且附带了一个基于HTTP 的管理界面。
您可以坚持使用Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。
Solr 还拥有一个活跃的开发者群体,如有需要,您可以随时向他们寻求帮助。
Solr 的历史Solr 最初由CNET Networks 开发,2006 年初,Apache Software Foundation 在Lucene 顶级项目的支持下得到了Solr。
Solr 于2007 年 1 月酝酿成熟,在整个项目孵化期间,Solr 稳步地积累各种特性并吸引了一个稳定的用户群体、贡献者和提交人。
Solr 现在是Lucene(Apache 的基于J ava 的全文本搜索引擎库)的一个子项目。
安装和配置要开始使用Solr,需安装以下软件:Java 1.5 或更高版本。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高性能搜索SOLR 学习笔记分享一.Query参数1.CoreQueryParam查询的参数1)q: 查询字符串,必须的。
2)q.op: 覆盖schema.xml的defaultOperator(有空格时用"AND"还是用"OR"操作逻辑),一般默认指定。
3)df: 默认的查询字段,一般默认指定。
4)qt:query type,指定查询使用的Query Handler,默认为“standard”。
5)wt:writer type。
指定查询输出结构格式,默认为“xml”。
在solrconfig.xml中定义了查询输出格式:xml、json、python、ruby、php、phps、custom。
6)echoHandler:是否在查询结果中显示使用的Query Handler名称。
7)echoParams:是否显示查询参数。
none:不显示;explicit:只显示查询参数;all:所有,包括在solrconfig.xml定义的Query Handler参数。
8)indent - 返回的结果是否缩进,默认关闭,用indent=true|on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。
9)version - 查询语法的版本,建议不使用它,由服务器指定默认值。
monQueryParameters1)sort:排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]…。
示例:(inStock desc, price asc)表示先“inStock”降序, 再“price”升序,默认是相关性降序。
2)start:用于分页定义结果起始记录数,默认为0。
3)rows:用于分页定义结果每页返回记录数,默认为10。
4)fq:filter query。
使用Filter Query可以充分利用Filter Query Cache,提高检索性能。
作用:在q查询符合结果中同时是fq查询符合的,例如:q=mm&fq=date_time:[20081001 TO 20091031],找关键字mm,并且date_time是20081001到20091031之间的。
5)fl:field list。
指定返回结果字段。
以空格“ ”或逗号“,”分隔。
6)debugQuery:设置返回结果是否显示Debug信息。
7)explainOther:设置当debugQuery=true时,显示其他的查询说明。
8)defType:设置查询解析器名称。
9)timeAllowed:设置查询超时时间。
10)omitHeader:设置是否忽略查询结果返回头信息,默认为“false”。
二.查询语法1.匹配所有文档:*:*2.强制、阻止和可选查询:1)Mandatory:查询结果中必须包括的(for example, only entry name containing theword make)Solr/Lucene Statement:+make, +make +up ,+make +up +kiss2)prohibited:(for example, all documents except those with word believe)Solr/Lucene Statement:+make +up -kiss3)optional:Solr/Lucene Statement:+make +up kiss3.布尔操作:AND、OR和NOT布尔操作(必须大写)与Mandatory、optional和prohibited相似。
1)make AND up =+make +up :AND左右两边的操作都是mandatory2)make || up =make OR up=make up :OR左右两边的操作都是optional3)+make +up NOT kiss =+make +up –kiss4)make AND up OR french AND Kiss不可以达到期望的结果,因为AND两边的操作都是mandatory的。
4.子表达式查询(子查询):可以使用“()”构造子查询。
For ex:(make AND up) OR (french AND Kiss)5.子表达式查询中阻止查询的限制:For ex:make (-up):只能取得make的查询结果;要使用make (-up *:*)查询make或者不包括up的结果。
6.多字段fields查询:通过字段名加上分号的方式(fieldName:query)来进行查询For ex:entryNm:make AND entryId:3cdc86e8e0fb4da8ab17caed42f6760c7.通配符查询(wildCard Query):1)通配符?和*:“*”表示匹配任意字符;“?”表示匹配出现的位置。
For ex:ma?*(ma后面的一个位置匹配),ma??*(ma后面两个位置都匹配)2)查询字符必须要小写:+Ma +be**可以搜索到结果;+Ma +Be**没有搜索结果3)查询速度较慢,尤其是通配符在首位:主要原因一是需要迭代查询字段中的每个term,判断是否匹配;二是匹配上的term被加到内部的查询,当terms数量达到1024的时候,查询会失败。
4)Solr中默认通配符不能出现在首位(可以修改QueryParser,设置setAllowLeadingWildcard为true)5)set setAllowLeadingWildcard to true.8.模糊查询、相似查询:不是精确的查询,通过对查询的字段进行重新插入、删除和转换来取得得分较高的查询解决(由Levenstein Distance Algorithm算法支持)。
1)一般模糊查询:for ex:make-believ~2)门槛模糊查询:对模糊查询可以设置查询门槛,门槛是0~1之间的数值,门槛越高表面相似度越高。
For ex:make-believ~0.5、make-believ~0.8、make-believ~0.99.范围查询(Range Query):Lucene支持对数字、日期甚至文本的范围查询。
结束的范围可以使用“*”通配符。
For ex:1)日期范围(ISO-8601 时间GMT):sa_type:2 AND a_begin_date:[1990-01-01T00:00:00.000Z TO1999-12-31T24:59:99.999Z]2)数字:salary:[2000 TO *]3)文本:entryNm:[a TO a]10.日期匹配:YEAR, MONTH, DAY, DATE (synonymous with DAY) HOUR, MINUTE, SECOND,MILLISECOND, and MILLI (synonymous with MILLISECOND)可以被标志成日期。
For ex:1)r_event_date:[* TO NOW-2YEAR]:2年前的现在这个时间2)r_event_date:[* TO NOW/DAY-2YEAR]:2年前前一天的这个时间三.函数查询(Function Query)函数查询可以利用numeric域的值或者与域相关的的某个特定的值的函数,来对文档进行评分。
1.使用函数查询的方法这里主要有三种方法可以使用函数查询,这三种s方法都是通过solr http接口的。
1)使用FunctionQParserPlugin。
ie: q={!func}log(foo)2)使用“_val_”内嵌方法内嵌在正常的solr查询表达式中。
即,将函数查询写在q这个参数中,这时候,我们使用“_val_”将函数与其他的查询加以区别。
ie:entryNm:make && _val_:ord(entryNm)3)使用dismax中的bf参数使用明确为函数查询的参数,比如说dismax中的bf(boost function)这个参数。
注意:bf这个参数是可以接受多个函数查询的,它们之间用空格隔开,它们还可以带上权重。
所以,当我们使用bf这个参数的时候,我们必须保证单个函数中是没有空格出现的,不然程序有可能会以为是两个函数。
For ex:q=dismax&bf="ord(popularity)^0.5 recip(rord(price),1,1000,1000)^0.32.函数的格式(Function Query Syntax)目前,function query 并不支持a+b 这样的形式,我们得把它写成一个方法形式,这就是sum(a,b).3.使用函数查询注意事项1) 用于函数查询的field必须是被索引的;2) 字段不可以是多值的(multi-value)4.可以利用的函数(available function)1) constant:支持有小数点的常量;例如:1.5 ;SolrQuerySyntax:_val_:1.52) fieldvalue:这个函数将会返回numeric field的值,这个域必须是indexd的,非multiValued的。
格式很简单,就是该域的名字。
如果这个域中没有这样的值,那么将会返回0。
3) ord:对于一个域,它所有的值都将会按照字典顺序排列,这个函数返回你要查询的那个特定的值在这个顺序中的排名。
这个域,必须是非multiValued的,当没有值存在的时候,将返回0。
例如:某个特定的域只能去三个值,“apple”、“banana”、“pear”,那么ord(“apple”)=1,ord(“banana”)=2,ord(“pear”)=3.需要注意的是,ord()这个函数,依赖于值在索引中的位置,所以当有文档被删除、或者添加的时候,ord()的值就会发生变化。
当你使用MultiSearcher的时候,这个值也就是不定的了。
4) rord:这个函数将会返回与ord相对应的倒排序的排名。
格式: rord(myIndexedField)。
5) sum:这个函数的意思就显而易见啦,它就是表示“和”啦。
格式:sum(x,1) 、sum(x,y)、sum(sqrt(x),log(y),z,0.5)6) product:product(x,y,...)将会返回多个函数的乘积。
格式:product(x,2)、product(x,y)7) div:div(x,y)表示x除以y的值,格式:div(1,x)、div(sum(x,100),max(y,1))8) pow:pow表示幂值。