solr全文搜索知识介绍

1.简介

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

Solr是一个高性能,采用Java5开发,

Solr Solr

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

2.solr的安装

官网下载 https://lucene.apache.org/solr/downloads.html下载 对应为zip的windows环境下的压缩包

solr的启动,停止,命令:

1.solr start 启动服务 然后可以 http://localhost:8983/solr 地址访问,内嵌服务器为jetty

2.solr status 查看solr服务状态

3.solr stop -all 关闭solr服务

但是我们开发一般用的是tomcat服务器。

3.配置Tomcat 运行环境

https://blog.csdn.net/zjcjava/article/details/56845453

https://blog.csdn.net/weixin_42613538/article/details/89516198

1.solr的特点

Apache solr是一种具体额NoSQl技术 。被用来解决特定问题。

可扩展性:solr通过集群中多台服务器的分布式运行来进行扩展。

开箱即用:solr是开源的,易于安装和配置

为搜索优化:solr速度很快,以亚秒级速度快速执行复杂查询。

大规模文档 :solr可以处理包含数百万级文档的检索

以文本为中心:solr针对自然语言文本搜索进行优化,如电子邮件,网页等

根据相关度对结果进行排序 :可以将结果以排序的方式显示。

2.功能概述

1.用户体验功能

分页和排序,分面,自动建议,拼写检查,搜索结果高亮,地理空间搜索

2.数据建模功能:

结果分组,灵活的查询支持,连接,文档聚类,导入各种文档格式,如PDF,word

从关系型数据库导入数据,多语种支持

3.solr新功能

近实时搜索,原子更新与乐观并发,实现get功能 ,使用事务日志实现写持续性,使用zookeepeer实现简易分片和复制

3.solr主目录

solr的内核由配置文件,Lucene索引文件和solr事务日志组成。jetty上运行一台solr服务器可以控制多个内核。如房地产搜索应用,它拥有两个内核,一个是房屋信息的内核,一个是土地列表的内核。

对结果进行高亮处理

1.Analysis分析词项

分析域的值和选择域的类型。

2.Dataimport做数据的导入

3.Documents 文档

通过这个功能对我们的solr索引库进行增删改查的操作,一般我们不通过页面进行操作,而是通过java代码来实现

 

3.solr理论知识

1.何为文档:

solr是一个文档储存和检索引擎,提交给solr处理的每一份数据都是文档,文档可以是一篇新闻报道,一份简历,甚至是一本书,每个文档包含一个或者多个字段,每个字段被赋予具体的字段类型:字符串,标记化文本,布尔值,日期,经纬度等等。

2.基本搜索问题:

对于传统 数据库搜索方式,当我们在输入框中输入 buy a home,执行的最lowSQL查询的方式 为

select * form books where name like '%buy a home%' 

或者更加模糊一点的查询为 select * form books where name like '%buying%' and name like '%a%' and name like '%home%';

(查询还是过于严格,很多相关的图书没有找到)

再或者 select * form books where name like '%buying%' or name like '%a%' or name like '%home%';

(这样查询太模糊了,查询到了很多无关的书籍)

3.倒排索引

在传统的数据库中,多个文档的表征是一个文档ID对应一个或者多个内容字段,这些字段包含文档中出现单词或者词项,但是

倒排索引是将这个模式颠倒过来了,将库中的每个单词与他们出现的文档对应起来。

倒排索引中的词项是按照字典顺序升序排列

4.词项,短语与布尔逻辑

了解了Lucene倒排索引结构后,下面分析查询中如何使用索引找到匹配的文档 。

必备词汇

  • 搜索两个不同的词项,new 和house ,要求两者都被匹配到

使用solr默认的查询解析器编写该查询   +new +house或者new AND house

可选词汇

  • 搜索两个不同的词项,new和house,要求匹配一项即可

new OR house 或者 new house

排除词汇

  • 搜索短语 new house,要求精确匹配

new house -rental 或者 new house NOT rental

 短语

solr还支持单个词汇搜索,还支持短语搜索,确保多个词汇按特定顺序出现。

“new house” or “new home”

“new house” and  “new home”

组合表达式

4.如何找到文档集

new or home  或者 new house  并集

new and home  或者 +new +house 交集

new -home 包含new的结果,排除所有包含home项

5.术语位置

查询了new AND home

其中solr会确保被匹配的查询词出现在每一个文档的一个位置上,并且允许在各自的文档中重新构建索引词项的初始位置,使其在查询阶段可以搜索特定的短语。

6.模糊匹配

  • 通配符搜索

只适合单个词项的搜索

  • 区间搜索

created:[2019年6月29日11:28:04 to 2019年6月29日11:28:20]

yearsOld:[18 TO 21] 从18到20

title:[boat TO boulde] 匹配boat boil book boulde的标题

  • 模糊/编辑距离搜索

当拼写错误的时候,solr通过~表示模糊编译距离搜索

admin~          admin~1匹配一个以内的编辑距离    admin~3 匹配三个以内的编辑距离

  • 邻近搜索

我想搜索一个 公司员工档案中的高管,利用“chief AND officer”可以查询到所有高管

但是,我们可能会查询到很多无关的文档,这时候利用 “chief AND officer”~1

表示了两个词项最多相隔一个词汇。

7.配置solr

在创建核心以后,solr核心将会为我们创建很多文件,其中包含很多配置文件。

主要配置为:

  • solr.xml 定义管理,日志,分片和solrcloud的有关属性
  • solrconfig.xml 定义solr内核的主要配置
  • schema.xml 定义索引结构,包括字段及其数据类型
  • core.propertise中主要配置了内核自动发现配置参数,solr通过这个文件来发现内核

core.properties文件在例子collections1 core包括只包括所需的名称参数。但是你也可以设置一些可选的参数来调整一个autodiscovered核心的定义。表4.1显示了参数可以指定的核心。属性定义一个autodiscovered核心。

(1)配置属性使用core.properties autodiscovered核心

参数        描述

name    Core的名称,必须的

config    指定配置文件的名称,默认为solrconfig.xml。

dataDir    指定的路径目录包含索引文件和更新日志(tlog);默认数据实例目录下。

ulogDir    指定的路径包含更新日志的目录(tlog)。

schema    集模式文档的名称,默认为schema.xml。

shard    设置core这个核心的碎片ID;有关更多信息,请参见12和13章分片。

collection    称SolrCloud收集这个核心属于;集合是第13章。

loadOnStartup    如果是true,这个核心Solr的初始化过程中加载和核心的新搜索器打开。

transient    表明该核心可以自动卸载如果Solr的达到transientCacheSize阈值(高级选项)。

现在,你不需要担心任何的属性列在表4.1中,当我们在本章中主要的关注点是solrconfig。collections1的例子包括核心的xml文件。重要的是要理解,Solr可以使用core.properties autodiscover内核在启动期间。一旦发现一个核心,Solr solrconfig定位。xml文件下SOLR_HOME / instanceDir / conf / solrconfig美元。xml,$ instanceDir /目录包含的核心。属性文件。Solr使用solrconfig。xml文件来初始化的核心

(2)solrconfig.xml文件概述,当你通过solrconfig. xml工作。,您会遇到常见的xml元素,Solr用来表示各种数据结构和类型。

<arr>命名的对象有序数组

<arr name="last-components">

   <str>spellcheck</str>

 </arr>

<lst>命名的键值对有序列表

<lst name="defaults">

 <str name="omitHeader">true</str>

 <str name="wt">json</str>

 </lst>

<bool>布尔值<bool>true</bool>
<str>字符串<str>spellcheck</str>或者<str name=zht>check</str>
<int>整数<int>1</int>
<long>长整数<long>1359936000000</long>
<float>Float value<float>3.14</float>
<double>Double value<double>3.14159265359</double>

(3)其他配置

4.1.2。应用配置更改

学习配置不是最令人兴奋的任务,这样帮助你保持兴趣,我们建议你尝试配置更改这一章。您的更改不会应用,直到你重新加载Solr核心,然而。Solr solrconfig并不看变化。xml和应用自动;你必须采取一个明确的行动应用配置更改。目前,应用配置更改的最简单方法是使用重载按钮从管理控制台的核心管理页面。

重新加载一个核心应用配置更改从核心管理页面。

 如果你在本地运行Solr,点击刷新按钮的collection1核心包括验证功能。在本章结束时,我们会看到另一种方式重新加载内核编程,使用核心管理API。

4.1.3。各种各样的设置

现在我们已经介绍了一些配置的背景,让我们开始我们的solrconfig之旅solrconfg.xml通过观察杂项Solr服务器的设置。下一个清单显示了配置设置在本节我们将讨论。

清单4.3。全局设置的顶部附近

 Lucene版本

Lucene和Solr认真对待向后兼容性。< luceneMatchVersion >元素控制Lucene索引是基于的版本。如果你开始,然后使用版本,在例子中指定服务器,如:

<luceneMatchVersion>4.7</luceneMatchVersion>

现在想象一下,经过几个月的运行Solr和索引数以百万计的文件,你决定,你需要升级到最新的版本的Solr。当你开始更新的Solr服务器,它使用< luceneMatchVersion >明白你的指数是基于哪个版本,是否禁用Lucene的特性,取决于后面的版本比指定。

 

你将能够运行Solr的升级版本与你的大index,但在某些时候你可能需要提高< luceneMatchVersion >利用Lucene的新功能和错误修正。在这种情况下,你可以重建索引文件,或者使用Lucene的内置index-upgrade工具。[1],因为对未来的问题,我们会参考你的JavaDoc指令如何运行升级工具。

加载依赖JAR文件

<lib>元素允许您添加JAR文件Solr的运行时类路径,这样就可以找到插件类。让我们来看看几个<lib>元素的solrconfig.xml示例。看到<lib>元素是如何工作的。

<lib dir="../../../contrib/langid/lib/" regex=".*\.jar" />

<lib dir="../../../dist/" regex="solr-langid-\d.*\.jar" />

每个<lib>元素识别一个目录和一个正则表达式匹配的目录中的文件。注意,dir属性使用相对路径,评估从核心目录根,通常被称为核心instanceDir。对于collection1核心服务器的示例中,包括instanceDir SOLR_INSTALL$/ / solr /collection/包括例子;记住,$ SOLR_INSTALL /的变量名称的目录提取solr分布存档。因此,先前的两个示例<lib>元素导致以下JAR文件被添加到Solr的类路径:

 

jsonic-1.2.7.jar (from contrib/langid/lib/)

• langdetect-1.1-20120112.jar (from contrib/langid/lib/)

• apache-solr-langid-4.7.0.jar (from dist/)

 

注意,apache-solr-langid。jar的版本号文件可能不同,这取决于您正在使用哪个版本的Solr 4。或者,您可以使用路径属性来识别一个JAR文件,等

<lib path="../../../dist/solr-langid-4.7.0.jar" />

You can also put JAR files for plugins in the $SOLR_HOME/lib/ directory, such as $SOLR_INSTALL/example/solr/lib/.

启用JMX

< jmx >元素激活Solr的mbean允许系统管理员监控和管理核心Solr组件从流行的系统监视工具,比如Nagios。简而言之,一个MBean是一个Java对象,使配置属性和统计使用Java管理扩展(JMX)API。mbean可以autodiscovered和自检JMX-compliant工具。这允许Solr集成到您的现有system-administration基础设施。我们将讨论如何启用外部监测Solr在12章更详细地通过JMX。

 

你不需要一个外部JMX-enabled监控工具看到Solr的mbean。Solr管理控制台提供访问所有Solr的mbean。图4.3是一个文物核心包括截图的MBean。

图4.3。检查插件的SolrCore MBean /collection1核心包括统计页面

8.查询请求处理

solr的主要功能是搜索,所以搜索请求的处理是solr最重要的处理之一,本节介绍solr搜索请求处理框架,以及如何让自定义请求处理器更适合特殊搜索请求处理的操作方法。

对solr发起请求需要通过http请求。如果是查询请求的话,则为http GET 请求 ,如果是索引请求的话,则为HTTP POST请求。

9.缓存管理

1.缓存原理:

solr提供了一系列的内置缓存来优化查询性能。

  • 缓存大小及缓存置换法
  • 缓存命中率与缓存回收
  • 缓存对象失效
  • 自动预热新缓存

(1)缓存大小

不能将缓存大小设置的太大,否者他会消耗jvm中所有内存,solr将所有缓存的对象都保存在内存中,而不会溢出到硬盘上,而这种情况在其他缓存框架中有可能发生,为了控制缓存大小,solr要求为每一个缓存都设置一个缓存对象的数量上限。

(2)缓存命中率缓存回收

缓存命中率是指用户请求中的缓存请求占用户所有请求数量的比例。缓存命中率表明了缓存对应用程序的性能优化所起到的作用。开发者当然希望缓存命中率尽量接近1

缓存回收数是表明有多少缓存对象根据缓存置换法被回收了,

(3)缓存对象失效

对象失效在搜索器关闭后立即失效,所以不用担心是否会返回过时的数据

(4)自动预热新的缓存

solr在每次提交请求后都会创建一个新的搜索器,并且直到新搜索器完成预热,才会关闭旧的搜索器。solr利用即将关闭的旧搜索器的部分缓存内容构建新搜索器的缓存,这个过程被成为自动预热新的缓存。

2.过滤器缓存

fq=manu:Belkin当我们通过这样一个过滤条件查询时,solr将会帮我们将过滤后的结果进行缓存,当下次我们搜索q=USB的时候,加上相同的过滤条件,这样solr将会直接在过滤器缓存中查找结果集,提高效率。

3.查询结果缓存

4.文档缓存

5.字段值缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值