Solr 功能使用 – Schema设计

合集下载

solr add copy field

solr add copy field

solr add copy field在Solr中,添加CopyField(拷贝字段)是一种常用的配置方式,用于将索引文档中的多个字段映射到一个目标字段。

这样做的好处是,在后续的查询中,可以通过查询该目标字段来实现对多个字段的检索功能。

CopyField的语法通常如下:xml复制代码<copyField source="源字段" dest="目标字段"/>其中,source属性指定要复制的源字段,而dest属性指定要将这些字段值复制到的目标字段。

举个例子,假设我们有一个名为msg_title的字段和一个名为msg_content的字段,我们想要将这两个字段的内容都复制到一个新的字段msg_all中。

那么,我们可以在Solr的schema.xml配置文件中添加如下配置:xml复制代码<copyField source="msg_title"dest="msg_all"/><copyField source="msg_content"dest="msg_all"/>这样,在添加索引文档时,Solr会自动将msg_title和msg_content字段的内容复制到msg_all字段中。

后续在进行查询时,我们就可以通过查询msg_all字段来实现对msg_title和msg_content字段的联合检索。

需要注意的是,如果目标字段由多个源字段构成,可能需要将其指定为multiValued,以支持存储多个值。

此外,使用CopyField 时不能区分各个源字段的重要度差别。

如果需要对不同字段设置不同的权重或重要度,可以考虑使用其他查询方式或字段配置来实现。

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 功能使用

Solr 功能使用

Solr 功能使用1. 准备阶段创建一个user schema,对其进行各种业务操作。

1.1. User元数据结构1.2. Solr schema设计●增加一个copyField text用于文本搜索1.3. 数据导入总共365051条记录,顺便感叹一下耗时,只花了5毫秒:2. 功能使用solr提供了多种语言的sdk,上面导入数据使用的是solrj,以下我就只用使用2.1. 基本查询http://172.16.5.2:8983/solr/user_shard2_replica1/select?q=*:*&wt=json&inden t=true&start=0&row=10&sort=followersCount+desc解释:●查询条件“*:*”,查询所有数据●格式化返回格式json:wt=json&indent=true●从0条开始,返回10条记录:start=0&row=10●按照用户粉丝量倒叙返回:sort=followersCount+desc,“+”号可使用空格代替更多的常用参数:●fq:对查询结果的二次筛选,且会把查询的结果缓存起来,下次同样的查询将直接命中缓存●fl:对返回的结果字段进行限制,例如我只想返回id更丰富的使用规范说明:https:///confluence/display/solr/Query+Syntax+and+Parsing 2.2. 权重查询DisMax以上面的schema为例,假设我需要查询所有“九江”的用户。

地区值是存放在location字段中的,也有可能用户只在location中只存放了“江西”,但是description中有可能存放了和九江相关的介绍,这样这个用户只能说有可能也是九江的,在查询是我希望确定是九江的用户排在前面。

这个时候就可以用到权重这个概念了。

上面的应用场景查询方式:http://172.16.5.2:8983/solr/user_shard2_replica1/select?q=text:%E4%B9%9D %E6%B1%9F&start=0&rows=10&wt=json&indent=true&defType=dismax&qf=l ocation^10+description^3权重查询常用参数:●defType=dismax,属于基本查询的参数,权重查询时必须是dismax●qf:权重设置,例如location^10就是location字段的权重设置,值得大小我理解是相对的,默认不设置的为1●mm:当查询条件(指的是参数个数,而非表达式个数)为多个时,设置返回最少匹配的次数另外还有很多参数,我还没有理解设计意图。

sql中schema的用法 -回复

sql中schema的用法 -回复

sql中schema的用法-回复SQL中的Schema的用法在SQL(结构化查询语言)中,Schema是一种用于组织和管理数据库对象的方式。

它定义了表、视图、索引、函数、存储过程等对象之间的逻辑关系,并为用户提供了一种沟通与协作的方式。

在本文中,我们将逐步回答关于Schema的用法,并讨论其在数据库设计和管理中的重要性。

什么是Schema?Schema(模式)是数据库中对象的集合,用于描述数据库的结构和组织。

它定义了表、视图、索引、函数、存储过程等对象的名称、属性和关系。

数据库中的每个对象都属于某个Schema,而Schema则属于数据库的逻辑容器。

一个数据库可以有一个或多个Schema,每个Schema都可以包含多个对象。

在许多数据库管理系统(DBMS)中,Schema与用户之间是一对一的关系,也就是说每个用户都有自己的Schema。

用户可以通过Schema来访问和管理自己有权限的对象,同时限制对其他用户Schema的访问。

创建Schema在创建数据库时,我们可以创建一个或多个Schema。

大多数DBMS提供了创建Schema的语句,如CREATE SCHEMA。

下面是一个常见的创建Schema的示例:CREATE SCHEMA my_schema;此语句将在数据库中创建一个名为"my_schema"的Schema。

接下来,我们可以在Schema中创建表、视图和其他对象。

创建对象在Schema中创建表和其他对象是常见的做法。

当我们创建对象时,我们可以明确指定对象所属的Schema。

下面是创建一个表的示例:CREATE TABLE my_schema.my_table (id INT,name VARCHAR(100));此语句将在"my_schema"中创建一个名为"my_table"的表,其中包含id 和name两个列。

对象的限定名称当我们引用Schema中的对象时,通常需要使用限定名称来指定对象所属的Schema。

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使用教程目录一、软件版本 (2)二、安装教程 (2)1、Solr安装教程 (2)2、solr环境搭建 (4)3、业务字段的实际配置 (7)4、dataimport 导入数据库数据 (8)5、solrj的使用 (10)6、电商平台的应用 (14)一、软件版本Solr版本号:solr-5.5.5jdk版本号:jdk1.8以上Tomcat版本号:Tomcat8.0以上二、安装教程1、Solr安装教程1.创建solrhome以及solrcore(mysolrhome、mycore 名字可以任意指定)1.1在指定的目录下新建文件夹solrhome如:D:\mysolrhome1.2将solr-5.5.4\server\solr\solr.xml拷贝至D:\mysolrhome1.3在solrhome下新建文件夹solrcore如D:\mysolrhome\mycore1.4将solr-5.5.4\server\solr\configsets\basic_configs\conf完整目录拷贝至D:\mysolrhome\mycore\下2.部署到Tomcat2.1将solr-5.5.4\server\solr-webapp\webapp 完整目录复制到Apache Tomcat 8.0.27\webapps下并重命名为solr2.2在Apache Tomcat 8.0.27\webapps\solr\WEB-INF下新建classes文件夹2.3将solr-5.5.4/server/resource/log4j.properties 拷贝至上一步创建的classes2.4把solr-5.5.4/server/lib/ext/目录下的所有jar文件复制到Apache Tomcat 8.0.27/webapp/solr/WEB-INF/lib/中3.配置solrcore3.1修改Apache Tomcat 8.0.27-solr\webapps\solr\WEB-INF\web.xml 新增<env-entry>标签,将你的solrhome配置进去。

Solr文档

Solr文档

Solr全文检索服务1企业站内搜索技术选型在一些大型门户网站、电子商务网站等都需要站内搜索功能,使用传统的数据库查询方式实现搜索无法满足一些高级的搜索需求,比如:搜索速度要快、搜索结果按相关度排序、搜索内容格式不固定等,这里就需要使用全文检索技术实现搜索功能。

1.1单独使用Lucene实现单独使用Lucene实现站内搜索需要开发的工作量较大,主要表现在:索引维护、索引性能优化、搜索性能优化等,因此不建议采用。

1.2使用Google或Baidu接口通过第三方搜索引擎提供的接口实现站内搜索,这样和第三方引擎系统依赖紧密,不方便扩展,不建议采用。

1.3使用Solr实现基于Solr实现站内搜索扩展性较好并且可以减少程序员的工作量,因为S olr提供了较为完备的搜索引擎解决方案,因此在门户、论坛等系统中常用此方案。

2什么是Solr什么是SolrSolr是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的配置和运行情况。

Solr与Lucene的区别Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。

solrconfig.xml配置详解

solrconfig.xml配置详解

solrconfig.xml配置详解solrconfig.xml包含了solr中大部分的配置信息。

Solrconfig.xml, schema.xml 和所有的配置文件都在solr的conf目录下,都是可以编辑的,除了admin UI。

编辑admin ui请参加【编辑solr的admin ui配置文件.doc】。

Solrconfig.xml中的简单注释可以源代码中找到。

lib<lib>指令可以在你的solrconfig.xml中指定。

dataDir parameter除了默认目录外,指定索引存放位置,默认索引数据放在slor home下,如果使用replication ,这应该可以匹配replication 配置,如果此目录并不是绝对的,那么它是相对于你的目录中,是从您启动Solr的位置开始寻找。

说明:solr4.0以后,改变<dataDir>的值后,通过reload重新载入。

codecFactory编解码器的工厂允许你使用自定义编解码器架构。

例如:如果你想定义每indexConfig 组件这些设置控制低层次的行为的索引。

详细信息请参阅示例中的solrconf.xml注释。

说明:在solr4.0以后,这个组件也是活的装置,通过reload可动态加载。

注意:在3.6版本之前,有两个不同的部分叫< indexdefaults >和<mainindex >,而现在这一段代替 <indexconfig >。

你仍然可以使用旧的配置为在3.6和4。

x,但需要迁移时,撞lucenematchversion。

迁移的最简单的办法是先例<indexconfig >部分都有注释,使用缺省值,然后自定义如果必要的话。

Update Handler 组件“update”相关的事件监听在更新处理部分,您可以定义特定的“更新”相关的事件的听众:“postcommit”和“postoptimize”。

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语法的主要内容,通过合理使用这些语法可以帮助用户更加准确地搜索到所需要的数据。

银河麒麟服务器操作系统 V4 solr 软件适配手册说明书

银河麒麟服务器操作系统 V4 solr 软件适配手册说明书

银河麒麟服务器操作系统V4 solr软件适配手册天津麒麟信息技术有限公司2019年6月目录目录 (I)1概述 (2)1.1系统概述 (2)1.2环境概述 (2)1.3SOLR软件简介 (2)1.4SOLR优点 (2)1.5SOLR架构及原理 (3)1.5.1全文检索 (3)1.5.2索引创建和搜索过程 (3)2SOLR软件适配 (4)1)下载并解压SOLR (4)2)下载TOMCAT (4)3)准备依赖包 (4)4)配置SOLRHOME (5)5)配置TOMCAT (5)3验证SOLR部署 (6)1概述1.1系统概述银河麒麟服务器操作系统主要面向军队综合电子信息系统、金融系统以及电力系统等国家关键行业的服务器应用领域,突出高安全性、高可用性、高效数据处理、虚拟化等关键技术优势,针对关键业务构建的丰富高效、安全可靠的功能特性,兼容适配长城、联想、浪潮、华为、曙光等国内主流厂商的服务器整机产品,以及达梦、金仓、神通、南大通用等主要国产数据库和中创、金蝶、东方通等国产中间件,满足虚拟化、云计算和大数据时代,服务器业务对操作系统在性能、安全性及可扩展性等方面的需求,是一款具有高安全、高可用、高可靠、高性能的自主可控服务器操作系统。

1.2环境概述服务器型号长城信安擎天DF720服务器CPU类型飞腾2000+处理器操作系统版本Kylin-4.0.2-server-sp2-2000-19050910.Z1内核版本 4.4.131solr版本7.7.21.3solr软件简介Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service 的API接口。

用户可以通过http请求,向搜索引擎服务器提交一定格式的XML 文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。

同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

solr multivalued 字段定义

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字段具有很好的扩展性,可以与其他数据类型和功能进行集成。

sorl的使用

sorl的使用

sorl的使⽤Sorl定义:sorl是独⽴的企业级搜索服务器,它对外提供类似于Web-service的API接⼝。

⽤户可以通过http请求,向搜索引擎服务器提交⼀定格式的xml ⽂件,⽣成索引。

同时也可以通过Http Get操作提出查询请求,并以xml返回查询结果特点:sorl采⽤java5开发的基于Lucene的全⽂服务器。

同时对其进⾏了扩展,提供了⽐Lucene更为丰富的查询语⾔,同时实现了可配置、可扩展并对查询性能进⾏了优化,并且提供了⼀个完善的功能管理界⾯,是⼀款⾮常优秀的。

⼯作⽅式:⽂档通过Http利⽤XML 加到⼀个搜索集合中。

查询该集合也是通过http收到⼀个XML/JSON响应来实现。

它的主要特性包括:⾼效、灵活的缓存功能,垂直搜索功能,⾼亮显⽰搜索结果,通过索引复制来提⾼可⽤性,提供⼀套强⼤Data Schema来定义字段,类型和设置,提供基于Web的管理界⾯等。

全⽂检索引擎Solr系列—–全⽂检索基本原理全⽂检索可以归纳为两个过程:1、索引创建(indexing)2、搜索索引(search)Solr/Lucene采⽤的是⼀种反向索引,所谓反向索引:就是从关键字到⽂档的映射过程,保存这种映射这种信息的索引称为反向索引索引创建:1)把原始⽂档交给分词组件(Tokenizer)把⽂档分解为⼀个个单词去除标点符号去除停词2)词汇单元(Token)传给语⾔处理组件(Linguistic Processor)变为⼩写将单词缩减为词根形式将单词转变为词根形式3)得到的词(Term)传给索引组件(Indexer)搜索过程1)对查询内容进⾏语法分析、词法分析、语⾔处理2)搜索索引,得到符合语法树的⽂档集合3)根据查询语句与⽂档的相关性,对结果进⾏排序Sorl的安装因为Solr是java开发。

所以需要安装jdk,安装环境Linux,需要安装Tomcat。

全⽂检索引擎Solr系列——Solr核⼼概念、配置⽂件DocumentDocument是Solr索引(动词,indexing)和搜索的最基本单元,它类似于关系数据库表中的⼀条记录,可以包含⼀个或多个字段(Field),每个字段包含⼀个name和⽂本值。

SOLR的应用教程

SOLR的应用教程

开源企业搜索引擎SOLR的应用教程2010-10目录1概述 (4)1.1企业搜索引擎方案选型 (4)1.2Solr的特性 (4)1.2.1Solr使用Lucene并且进行了扩展 (4)1.2.2Schema(模式) (5)1.2.3查询 (5)1.2.4核心 (5)1.2.5缓存 (5)1.2.6复制 (6)1.2.7管理接口 (6)1.3Solr服务原理 (6)1.3.1索引 (6)1.3.2搜索 (7)1.4源码结构 (8)1.4.1目录结构说明 (8)1.4.2Solr home说明 (9)1.4.3solr的各包的说明 (10)1.5版本说明 (11)1.5.1 1.3版本 (11)1.5.2 1.4版本 (12)1.6分布式和复制Solr 架构 (12)2Solr的安装与配置 (13)2.1在Tomcat下Solr安装 (13)2.1.1安装准备 (13)2.1.2安装过程 (13)2.1.3验证安装 (14)2.2中文分词配置 (15)2.2.1mmseg4j (15)2.2.2paoding (19)2.3多核(MultiCore)配置 (22)2.3.1MultiCore的配置方法 (22)2.3.2为何使用多core ? (23)2.4配置文件说明 (23)2.4.1schema.xml (24)2.4.2solrconfig.xml (25)3Solr的应用 (29)3.1SOLR应用概述 (29)3.1.1Solr的应用模式 (29)3.1.2SOLR的使用过程说明 (30)3.2一个简单的例子 (30)3.2.1Solr Schema 设计 (30)3.2.2构建索引 (30)3.2.3搜索测试 (31)3.3搜索引擎的规划设计 (32)3.3.1定义业务模型 (32)3.3.2定制索引服务 (34)3.3.3定制搜索服务 (34)3.4搜索引擎配置 (34)3.4.1Solr Schema 设计(如何定制索引的结构?) (34)3.5如何进行索引操作? (36)3.5.1基本索引操作 (36)3.5.2批量索引操作 (37)3.6如何进行搜索 (39)3.6.1搜索语法 (39)3.6.2排序 (42)3.6.3字段增加权重 (42)3.6.4Solr分词器、过滤器、分析器 (42)3.6.5Solr高亮使用 (46)4SolrJ的用法 (46)4.1搜索接口的调用实例 (46)4.2Solrj的使用说明 (47)4.2.1Adding Data to Solr (47)4.2.2Directly adding POJOs to Solr (49)4.2.3Reading Data from Solr (51)4.3创建查询 (51)4.4使用SolrJ 创建索引 (52)4.5Solrj包的结构说明 (53)4.5.1CommonsHttpSolrServer (53)4.5.2Setting XMLResponseParser (53)4.5.3Changing other Connection Settings (53)4.5.4EmbeddedSolrServer (54)5Solr的实际应用测试报告 (54)5.1线下压力测试报告 (54)5.2线上环境运行报告 (54)6solr性能调优 (55)6.1Schema Design Considerations (55)6.1.1indexed fields (55)6.1.2stored fields (55)6.2Configuration Considerations (55)6.2.1mergeFactor (55)6.2.2mergeFactor Tradeoffs (56)6.3Cache autoWarm Count Considerations (56)6.4Cache hit rate(缓存命中率) (56)6.5Explicit Warming of Sort Fields (56)6.6Optimization Considerations (56)6.7Updates and Commit Frequency Tradeoffs (56)6.8Query Response Compression (57)6.9Embedded vs HTTP Post (57)6.10RAM Usage Considerations(内存方面的考虑) (57)6.10.1OutOfMemoryErrors (57)6.10.2Memory allocated to the Java VM (57)7FAQ (58)7.1出现乱码或者查不到结果的排查方法: (58)1 概述1.1 企业搜索引擎方案选型由于搜索引擎功能在门户社区中对提高用户体验有着重在门户社区中涉及大量需要搜索引擎的功能需求,目前在实现搜索引擎的方案上有集中方案可供选择:1)基于Lucene自己进行封装实现站内搜索。

solr 3.5 配置及应用

solr 3.5 配置及应用

solr 3.5 配置及应用(一)人个博客:/yuanermen一、solr 的简介Apache Solr 是一个开源的搜索服务器。

Solr 使用Java 语言开发,主要基于HTTP 和Apache Lucene 实现。

Apache Solr 中存储的资源是以Document 为对象进行存储的。

每个文档由一系列的Field 构成,每个Field 表示资源的一个属性。

Solr 中的每个Document 需要有能唯一标识其自身的属性,默认情况下这个属性的名字是id,在Schema 配置文件中使用:<uniqueKey>id</uniqueKey>进行描述。

Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。

文档通过Http利用XML加到一个搜索集合中。

查询该集合也是通过http收到一个XML/JSON响应来实现。

它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提供一套强大Data Schema来定义字段,类型和设置文本分析,提供基于Web的管理界面等。

二、solr 3.5 的下载solr 3.5下载地址:/dist//lucene/solr/tomcat tomcat-7.0.26 下载:/apache/tomcat/tomcat-7/v7.0.26/bin/apache-tomcat-7.0.26.zip三、solr 3.5的安装1、解压tomcat-7.0.26 到e:\tomcat-7.0.26\下2、打开tomcat-7.0.26\conf 修改server.xml 文件<Connector port="8080"protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443"URIEncoding="UTF-8"/>复制代码修改默认端口8080,可以不修改,添加字符编码URIEncoding="UTF-8" 否则中文会乱码3、在apache-solr-3.5.0\dist目录下找到apache-solr-3.5.0.war把重命名为solr.war 并上传到tomcat-7.0.26/webapps下。

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. 性能问题:通过调整配置参数、优化查询语句等,解决性能问题。

solrj suggest用法

solrj suggest用法

Solrj suggest用法一、介绍Solrj是Apache Solr的Java客户端,用于与Solr服务器进行交互。

Solr是一个开源的搜索平台,它提供了强大的全文搜索和实时分析功能。

Solrj则是通过Java 代码来使用Solr的工具,它提供了一系列的API和方法,使得开发者能够方便地与Solr进行通信和操作。

在Solr中,有一个非常实用的功能是suggest(建议)功能。

它可以根据用户的输入,提供相关的搜索建议,帮助用户更快地找到他们想要的内容。

Solrj提供了一些方法来使用suggest功能,本文将详细介绍这些用法。

二、Solrj suggest用法2.1 添加suggester要使用Solrj的suggest功能,首先需要在Solr中添加一个suggester。

可以通过以下代码来完成:SolrClient solrClient = new HttpSolrClient.Builder("").build(); SchemaRequest.AddField fieldRequest = new SchemaRequest.AddField("suggest_fiel d");fieldRequest.addType("text_general");solrClient.request(fieldRequest);SchemaRequest.AddCopyField copyFieldRequest = new SchemaRequest.AddCopyField(" content", "suggest_field");solrClient.request(copyFieldRequest);SchemaRequest.ConfigRequest configRequest = new SchemaRequest.ConfigRequest(); configRequest.setAction(SchemaRequest.ConfigAction.UPDATE);solrClient.request(configRequest);上述代码中,首先创建了一个SolrClient对象,指定了Solr服务器的地址。

Solr入门实战(4)--Java操作Solr

Solr入门实战(4)--Java操作Solr

Solr⼊门实战(4)--Java操作Solr本⽂主要介绍使⽤ Java 来操作 Solr,⽂中所使⽤到的软件版本:Java 1.8.0_191、Solr 8.9.0。

1、定义 Schema 信息假设⼀个描述诗⼈信息的⽂档包含如下字段:字段描述id唯⼀主键age年龄name姓名poems诗歌about简介success成就定义的 schema 信息如下:<field name="about" type="text_ik" uninvertible="true" indexed="true" stored="true"/><field name="age" type="pint" uninvertible="true" indexed="true" stored="true"/><field name="content" type="text_ik" uninvertible="true" indexed="true" stored="true" multiValued="true"/><field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/><field name="name" type="text_ik" uninvertible="true" indexed="true" stored="true"/><field name="poems" type="text_ik" uninvertible="true" indexed="true" stored="true"/><field name="success" type="text_ik" uninvertible="true" indexed="true" stored="true"/>2、Java 操作 Solr2.1、引⼊依赖<dependency><groupId>org.apache.solr</groupId><artifactId>solr-solrj</artifactId><version>8.9.0</version></dependency><dependency><groupId>org.apache.solr</groupId><artifactId>solr-core</artifactId><version>8.9.0</version></dependency>2.2、编写 demo2.2.1、增加/更新⽂档@Testpublic void update() throws IOException, SolrServerException {SolrInputDocument document = new SolrInputDocument();document.addField("id", "123456");document.addField("age", 30);document.addField("name", "李⽩2");document.addField("poems", "望庐⼭瀑布");document.addField("about", "字太⽩");document.addField("success", "创造了古代浪漫主义⽂学⾼峰、歌⾏体和七绝达到后⼈难及的⾼度");SolrInputDocument document2 = new SolrInputDocument();document2.addField("id", "123457");document2.addField("age", 31);document2.addField("name", "杜甫");document2.addField("poems", "望岳");document2.addField("about", "字⼦美");document2.addField("success", "唐代伟⼤的现实主义⽂学作家,唐诗思想艺术的集⼤成者");solrClient.add(coreName, document);solrClient.add(coreName, document2);mit(coreName, true,true);}还可以通过实体类来增加/更新⽂档:@Testpublic void update2() throws IOException, SolrServerException {PoetInfo info = new PoetInfo("123456", 40, "李⽩", "望庐⼭瀑布", "字太⽩", "创造了古代浪漫主义⽂学⾼峰、歌⾏体和七绝达到后⼈难及的⾼度"); solrClient.addBean(coreName, info);mit(coreName, true,true);}2.2.2、查询⽂档/*** 通过 MapSolrParams 查询*/@Testpublic void query() throws IOException, SolrServerException {Map<String, String> map = new HashMap<>();//查询条件map.put("q", "*:*");//要显⽰的内容map.put("fl", "id,age,name,poems");//排序⽅式map.put("sort", "id asc");MapSolrParams solrParams = new MapSolrParams(map);QueryResponse queryResponse = solrClient.query(coreName, solrParams); SolrDocumentList documents = queryResponse.getResults();("查询到{}个⽂档!", documents.getNumFound());for (SolrDocument document : documents) {String id = (String)document.getFieldValue("id");Integer age = (Integer)document.getFieldValue("age");String name = (String)document.getFieldValue("name");String poems = (String)document.getFieldValue("poems");("id={},age={},name={},poems={}", id, age, name, poems);}}/*** 通过 solrQuery 查询*/@Testpublic void query2() throws IOException, SolrServerException {SolrQuery solrQuery = new SolrQuery("*:*");solrQuery.addField("id");solrQuery.addField("age");solrQuery.addField("name");solrQuery.addField("poems");solrQuery.addSort("id", SolrQuery.ORDER.asc);//设置返回的⾏数solrQuery.setRows(10);QueryResponse queryResponse = solrClient.query(coreName, solrQuery); SolrDocumentList documents = queryResponse.getResults();("查询到{}个⽂档!", documents.getNumFound());for (SolrDocument document : documents) {String id = (String)document.getFieldValue("id");Integer age = (Integer)document.getFieldValue("age");String name = (String)document.getFieldValue("name");String poems = (String)document.getFieldValue("poems");("id={},age={},name={},poems={}", id, age, name, poems);}}/*** 查询返回实例类对象*/@Testpublic void query3() throws IOException, SolrServerException {SolrQuery solrQuery = new SolrQuery("*:*");solrQuery.addField("id");solrQuery.addField("age");solrQuery.addField("name");solrQuery.addField("poems");solrQuery.addField("about");solrQuery.addField("success");solrQuery.addSort("id", SolrQuery.ORDER.asc);//设置返回的⾏数solrQuery.setRows(10);QueryResponse queryResponse = solrClient.query(coreName, solrQuery); List<PoetInfo> list = queryResponse.getBeans(PoetInfo.class);("查询到{}个⽂档!", list.size());for (PoetInfo info : list) {(info.toString());}}2.2.3、删除⽂档/*** 根据id删除⽂档*/@Testpublic void delete() throws IOException, SolrServerException {solrClient.deleteById(coreName, "123456");mit(coreName, true,true);}/*** 根据查询删除⽂档*/@Testpublic void delete2() throws IOException, SolrServerException {solrClient.deleteByQuery(coreName, "name:杜甫");mit(coreName, true,true);}2.2.4、完整代码package com.abc.demo.general.solr;import org.apache.solr.client.solrj.beans.Field;public class PoetInfo {@Fieldprivate String id;@Fieldprivate Integer age;@Fieldprivate String name;@Fieldprivate String poems;@Fieldprivate String about;@Fieldprivate String success;public PoetInfo() {}public PoetInfo(String id, Integer age, String name, String poems, String about, String success) { this.id = id;this.age = age; = name;this.poems = poems;this.about = about;this.success = success;}@Overridepublic String toString() {return "Info{" +"id='" + id + '\'' +", age=" + age +", name='" + name + '\'' +", poems='" + poems + '\'' +", about='" + about + '\'' +", success='" + success + '\'' +'}';}public String getId() {return id;}public void setId(String id) {this.id = id;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getName() {return name;}public void setName(String name) { = name;}public String getAbout() {return about;}public void setAbout(String about) {this.about = about;}public String getSuccess() {return success;}public void setSuccess(String success) {this.success = success;}}PoetInfopackage com.abc.demo.general.solr;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrServerException;import org.apache.solr.client.solrj.impl.HttpSolrClient;import org.apache.solr.client.solrj.response.QueryResponse;import mon.SolrDocument;import mon.SolrDocumentList;import mon.SolrInputDocument;import mon.params.MapSolrParams;import org.junit.After;import org.junit.Before;import org.junit.Test;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.IOException;import java.util.HashMap;import java.util.List;import java.util.Map;public class SolrCase {private static Logger logger = LoggerFactory.getLogger(SolrCase.class);private HttpSolrClient solrClient;private String coreName = "new_core";@Beforepublic void before() {solrClient = new HttpSolrClient.Builder("http://10.40.100.69:8983/solr").withConnectionTimeout(10000).withSocketTimeout(60000).build();}@Afterpublic void after() throws IOException {solrClient.close();}@Testpublic void update() throws IOException, SolrServerException {SolrInputDocument document = new SolrInputDocument();document.addField("id", "123456");document.addField("age", 30);document.addField("name", "李⽩2");document.addField("poems", "望庐⼭瀑布");document.addField("about", "字太⽩");document.addField("success", "创造了古代浪漫主义⽂学⾼峰、歌⾏体和七绝达到后⼈难及的⾼度"); SolrInputDocument document2 = new SolrInputDocument();document2.addField("id", "123457");document2.addField("age", 31);document2.addField("name", "杜甫");document2.addField("poems", "望岳");document2.addField("about", "字⼦美");document2.addField("success", "唐代伟⼤的现实主义⽂学作家,唐诗思想艺术的集⼤成者");solrClient.add(coreName, document);solrClient.add(coreName, document2);mit(coreName, true,true);}@Testpublic void update2() throws IOException, SolrServerException {PoetInfo info = new PoetInfo("123456", 40, "李⽩", "望庐⼭瀑布", "字太⽩", "创造了古代浪漫主义⽂学⾼峰、歌⾏体和七绝达到后⼈难及的⾼度"); solrClient.addBean(coreName, info);mit(coreName, true,true);}/*** 通过 MapSolrParams 查询*/@Testpublic void query() throws IOException, SolrServerException {Map<String, String> map = new HashMap<>();//查询条件map.put("q", "*:*");//要显⽰的内容map.put("fl", "id,age,name,poems");//排序⽅式map.put("sort", "id asc");MapSolrParams solrParams = new MapSolrParams(map);QueryResponse queryResponse = solrClient.query(coreName, solrParams);SolrDocumentList documents = queryResponse.getResults();("查询到{}个⽂档!", documents.getNumFound());for (SolrDocument document : documents) {String id = (String)document.getFieldValue("id");Integer age = (Integer)document.getFieldValue("age");String name = (String)document.getFieldValue("name");String poems = (String)document.getFieldValue("poems");("id={},age={},name={},poems={}", id, age, name, poems);}}/*** 通过 solrQuery 查询*/@Testpublic void query2() throws IOException, SolrServerException {SolrQuery solrQuery = new SolrQuery("*:*");solrQuery.addField("id");solrQuery.addField("age");solrQuery.addField("name");solrQuery.addField("poems");solrQuery.addSort("id", SolrQuery.ORDER.asc);//设置返回的⾏数solrQuery.setRows(10);QueryResponse queryResponse = solrClient.query(coreName, solrQuery);SolrDocumentList documents = queryResponse.getResults();("查询到{}个⽂档!", documents.getNumFound());for (SolrDocument document : documents) {String id = (String)document.getFieldValue("id");Integer age = (Integer)document.getFieldValue("age");String name = (String)document.getFieldValue("name");String poems = (String)document.getFieldValue("poems");("id={},age={},name={},poems={}", id, age, name, poems);}}/*** 查询返回实例类对象*/@Testpublic void query3() throws IOException, SolrServerException {SolrQuery solrQuery = new SolrQuery("*:*");solrQuery.addField("id");solrQuery.addField("age");solrQuery.addField("name");solrQuery.addField("poems");solrQuery.addField("about");solrQuery.addField("success");solrQuery.addSort("id", SolrQuery.ORDER.asc);//设置返回的⾏数solrQuery.setRows(10);QueryResponse queryResponse = solrClient.query(coreName, solrQuery);List<PoetInfo> list = queryResponse.getBeans(PoetInfo.class);("查询到{}个⽂档!", list.size());for (PoetInfo info : list) {(info.toString());}}/*** 根据id删除⽂档*/@Testpublic void delete() throws IOException, SolrServerException {solrClient.deleteById(coreName, "123456");mit(coreName, true,true);}/*** 根据查询删除⽂档*/@Testpublic void delete2() throws IOException, SolrServerException {solrClient.deleteByQuery(coreName, "name:杜甫");mit(coreName, true,true);}}SolrCase3、Java 操作 SolrCloudJava 操作 SolrCloud 与 Java 操作 Solr 很类似,主要区别有:1、连接使⽤的类不同,连接 Solr 使⽤的是 HttpSolrClient,连接 SolrColud 使⽤的是 CloudHttp2SolrClient。

solr时间排序用法

solr时间排序用法

solr时间排序用法Solr时间排序用法:Solr是一个开源的全文搜索平台,它提供了强大的排序功能,包括时间排序。

在Solr中,可以使用字段类型和查询参数来实现时间排序。

首先,我们需要在Schema.xml中定义一个适合存储时间的字段类型。

常见的选择是使用"TrieDateField",它可以将日期存储为整数,便于排序和范围查询。

例如:```xml<fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"><analyzer><tokenizer class="solr.StandardTokenizerFactory"/></analyzer></fieldType>```接下来,在Schema.xml中定义一个字段来存储时间数据,并将其类型设置为之前定义的日期类型。

例如:```xml<field name="timestamp" type="date" indexed="true" stored="true" multiValued="false"/>```在提交数据时,确保将时间戳数据正确地转换为Solr所期望的格式,然后将其添加到"timestamp"字段中。

要按时间排序查询结果,可以使用Solr的排序参数。

在查询参数中,添加"sort"参数来指定排序的字段和排序顺序。

例如,要按时间降序排序,可以设置"sort=timestamp desc"。

solr query函数

solr query函数

Solr Query函数是Solr搜索平台中的一个重要功能,它允许用户在Solr索引中执行查询操作,并返回与查询条件匹配的结果集。

以下是关于Solr Query函数的简要介绍和800字左右的说明:Solr Query函数概述Solr Query函数是一种用于执行搜索查询的函数,它允许用户在Solr索引中快速查找和检索数据。

通过使用Query函数,用户可以在Solr搜索平台上执行各种类型的查询,如全文搜索、基于字段的搜索、范围搜索等。

这些查询可以根据用户的需求进行定制,以提供精确和高效的搜索结果。

主要功能和应用场景Solr Query函数的主要功能包括执行各种类型的搜索查询、处理查询结果、返回匹配项和相关文档。

这些查询可以针对单个字段或多个字段进行,支持各种搜索运算符,如AND、OR、NOT等。

通过使用Query函数,用户可以在各种应用场景中快速找到所需数据,如网站搜索、内容管理系统、电子商务平台等。

优化和性能考虑在执行Solr Query函数时,需要注意优化查询性能和稳定性。

可以通过使用合适的查询语句、调整索引配置、优化硬件配置等手段来提高查询性能。

同时,还应该注意查询结果的准确性和可靠性,确保返回的匹配项和相关文档符合预期。

与其他工具和技术的集成Solr Query函数可以与其他工具和技术进行集成,以实现更高效和灵活的搜索解决方案。

例如,可以与其他搜索引擎平台(如Elasticsearch)进行集成,以实现跨平台的数据搜索和协作。

还可以与其他数据处理和分析工具(如Python、R语言等)结合使用,对搜索结果进行进一步的处理和分析。

总结Solr Query函数是Solr搜索平台中一个重要的功能,它允许用户在Solr索引中执行各种类型的查询操作,并返回与查询条件匹配的结果集。

通过使用Query函数,用户可以在各种应用场景中快速找到所需数据,并优化查询性能和稳定性。

与其他工具和技术的集成,可以实现更高效和灵活的搜索解决方案。

solr post用法

solr post用法

Solr Post用法
Solr是一个基于Lucene的开源搜索服务器,它提供了强大的全文搜索功能和灵活的查询方式。

Solr Post是一种向Solr服务器发送查询请求的方法,它可以用于搜索和检索文档。

Solr Post用法如下:
1.准备查询参数:在发送POST请求之前,您需要准备查询参数。

这些参数包
括要搜索的字段、查询字符串、过滤条件等。

您可以使用JSON格式来定义查询参数。

例如:
在上面的示例中,"q"表示要搜索的查询字符串,"fq"表示过滤条件,"start"表示要返回的结果的起始位置,"rows"表示要返回的结果的数量。

2.发送POST请求:一旦您准备好了查询参数,就可以使用HTTP POST请求将
它们发送到Solr服务器。

您可以使用任何支持HTTP POST请求的编程语言或工具来完成此操作。

例如,如果您使用Python,可以使用requests库来发送POST请求:
在上面的示例中,我们使用requests库发送POST请求到Solr服务器的"/sel ect"端点,并将查询参数作为JSON数据发送。

响应将包含Solr服务器返回的结果。

3.处理响应:一旦您接收到响应,就可以处理它以获取搜索结果。

响应将包含
一个JSON对象,其中包含有关搜索结果的信息,例如匹配的文档数量、每个文档的字段值等。

您可以根据需要解析和处理响应数据。

例如,如果您使用Python,可以使用json库来解析响应:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Solr 功能使用– Schema设计
书接上文:/view/29e29196aeaad1f346933faf
1. 基本概念
Solr将数据以结构化的方式存入系统中,存储的过程中可以对数据建立索引,这个结构的定义就是通过schema.xml来配置的。

Solr的schema配置是非常灵活和丰富。

2. 创建schema
创建solr collection至少需要包含两个文件,schema.xml和solrconfig.xml,其它的文件大多是schema.xml调用所以来的。

2.1. 基本的schema配置
相关的配置,elevate的功能有点类似著名百度竞价排名,以后有应用场景的话我会单独研究一番。

2.2. 常规Field设置
Field即结构化中得某一个字段,field属性说明:
●name:属性的名称,这里有个特殊的属性“_version_”是必须添加的。

●type:字段的数据结构类型,所用到的类型需要在fieldType中设置。

●default:默认值。

●indexed:是否创建索引
●stored:是否存储原始数据
●docValues:建立正排索引,可以使类似排序、facet等操作速度得到提高●solrMissingFirst/solrMissingLast:查询结果排序的过程中,如果发现这个
字段的值不存在,则排在前面/后面,忽略排序的条件
●multValued:是否为多值列,比如说一个用户的所有好友id
●omitNorms:在搜索结果计分算法时,忽略这个字段,一般应用在全文分词
索引中
●required:添加文档时,该字段必须存在,类似mysql的not null
2.3. 常规Field Type设置
field type是对field类型的详细描述:
●name:类型的名称,对应field中的type
●class:类型对应的java对象,solr默认提供大概20多种类型
●positionIncrementGap:当field设置multValued为true时,用来分隔多个
值之间的间隙大小
●autoGeneratePhraseQueries:有点类似找近义词或者自动纠错的设置,例如
可以将wi fi自动转为wifi或wi-fi,如果不设置这个属性则需要在查询时强制加上引号,例如‘wi fi’
其它还没搞清楚的设置:
●docValuesFormat:大致是正排索引的结构
●postingsFormat:大致倒排索引的结构
2.4. 分词器analyzer设置
solr/lucene主要用途就是用来管理索引的,而分词索引则是目前solr大受欢迎的主要原因。

只有solr.TextField类型的field type才支持分词,分词器则可以用户自定义设置。

有两个应用场景可以用到分词,分别是index(创建索引时)和query(查询时)。

●分词器核心模块:solr.StandardTokenizerFactory,这里可以使用用户自定义
的分词器
●设置过滤器:
⏹停词过滤器:
<filter class="solr.StopFilterFactory" ignoreCase="true"
words="stopwords.txt" />
⏹同义词过滤器:
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
ignoreCase="true" expand="true"/>
⏹过滤HTML、XML代码过滤器:
<charFilter class="solr.HTMLStripCharFilterFactory"/>
⏹还有更多的过滤器可以关注的,我还没有学到家
2.5. 动态字段dynamicField
solr允许用户使用没有在schema.xml中配置的字段,例如一张用户表中不包含“微信号”字段,你可以随时定义一个weixin_No并对这个字段进行读写操作,这算是solr号称flexible有力的证明。

定义方式和普通field类似,程序操作中的使用方式和普通field完全一致:
可能读到此处,有些人会有疑问:有了动态字段,是不是就可以不定义普通字段了?恩。

我也有这个感觉,不过这种做法可能不利于schema的维护,机器识别完全没有问题,但是当你的系统需要交接给其它人得时候,没有完整的schema则比较麻烦。

2.6. 冗余复制字段copyField
假如有一个文章schema,一开始业务系统搜索的时候主要是搜索文章的内容,后来我希望搜索的时候能同时去搜索文章的标题,有两种方式来实现:1). 修改业务系统,增加搜索覆盖的字段;2). 使用copyField,将标题和内容冗余为一个字段。

3. 中文分词器
我了解的两个中文分词器:
1.IK-Analyzer:相对比较活跃,用的人很多
/wltea/IK-Analyzer-2012FF/tree/master/dist
2.庖丁解牛:不太活跃,早期用的人很多
/svn/trunk/paoding-analysis/
下载jar包:
/wltea/IK-Analyzer-2012FF/blob/master/dist/IKAnalyzer 2012_FF.jar (支持solr4.x版本)
复制到server/solr-webapp/webapp/WEB-INF/lib/下,重启solr之后就可以创建使用IK-analyzer的schema了。

3.1. 中文分词测试
注意:已经确认IK-Analyzer不支持solr5.0!
图中的演示效果是solr4.4.0,并且做了特殊处理(把每个中文单个字也切分了):。

相关文档
最新文档