solr搜索引擎原理(全文搜索引擎有那些、)
本文目录
- 全文搜索引擎有那些、
- 搜索引擎相关问题
- 全文索引的原理
- solr怎么建立索引
- Solr的提交方式
- lucene,solr有什么区别
- 搜索引擎的学习
- 全文搜索引擎与目标索引类搜索引擎有什么区别
- solr 增量索引 怎么没执行
- 搜索引擎,solr
全文搜索引擎有那些、
百度、 谷歌就是典型的全文搜索引擎。它们都是通过从互联网上提取的各个网站的信息而建立的数据库中,检索与用户查询条件匹配的相关记录,然后按一定的排列顺序将结果返回给用户。
1、简单查询。在搜索引擎中输入关键词,然后点击“搜索”就行了,系统很快会返回查询结果,这是最简单的查询方法,使用方便,但是查询的结果却不准确,可能包含着许多无用的信息。
2、使用双引号用(" ")。给要查询的关键词加上双引号(半角,以下要加的其它符号同此),可以实现精确的查询,这种方法要求查询结果要精确匹配,不包括演变形式。例如在搜索引擎的文字框中输入“电传”,它就会返回网页中有“电传”这个关键字的网址,而不会返回诸如“电话传真”之类网页。
3、使用加号(+)。在关键词的前面使用加号,也就等于告诉搜索引擎该单词必须出现在搜索结果中的网页上,例如,在搜索引擎中输入“+电脑+电话+传真”就表示要查找的内容必须要同时包含“电脑、电话、传真”这三个关键词。
4、使用减号(-)。在关键词的前面使用减号,也就意味着在查询结果中不能出现该关键词,例如,在搜索引擎中输入“电视台-中央电视台”,它就表示最后的查询结果中一定不包含“中央电视台”。
5、使用通配符(*和?)。通配符包括星号(*)和问号(?),前者表示匹配的数量不受限制,后者匹配的字符数要受到限制,主要用在英文搜索引擎中。例如输入“computer*”,就可以找到“computer、computers、computerised、computerized”等单词,而输入“comp?ter”,则只能找到“computer、compater、compete 等单词。
搜索引擎相关问题
这块你可能还不知道搜索引擎是怎么回事 搜索引擎抓取两种渠道 服务器直接抓取/网页域名或链接向下渗透抓取 然后把相应的网页存入搜索引擎自己的服务器 是为快照 (这个快照是搜索引擎整合转化后的网页 而不是网络资源的原始网页) 然后通过搜索出来各种网络信息 其实就是数据库调用的 模糊或者精准调用自己的数据库信息 加上相应的网页实际url 点击跳转 搜索功能都是数据库调用自己的数据库展现服务器上存储的信息 不存在本地和网络一说 一个搜索引擎 有自己的排名规则 和单独的数据库服务器空间 各种抓取网页蜘蛛
全文索引的原理
原理是先定义一个词库,然后在文章中查找每个词条(term)出现的频率和位置,把这样的频率和位置信息按照词库的顺序归纳,这样就相当于对文件建立了一个以词库为目录的索引,这样查找某个词的时候就能很快的定位到该词出现的位置。问题在处理英文文档的时候显然这样的方式是非常好的,因为英文自然的被空格分成若干词,只要我们有足够大的词汇库就能很好的处理。但是亚洲文字因为没有空格作为断词标志,所以就很难判断一个词,而且人们使用的词汇在不断的变化,而维护一个可扩展的词汇库的成本是很高的,所以问题出现了。解决出现这样的问题使“分词”成为全文索引的关键技术。目前有两种基本的方法:二元法 它把所有有可能的每两两汉字的组合看为一个词组,这样就没有维护词库的开销。词库法 它使使用词库中的词作为切分的标准,这样也出现了词库跟不上词汇发展的问题,除非你维护词库。实际上现在很多著名的搜索引擎都使用了多种分词的办法,比如“正向最大匹配”+“逆向最大匹配”,基于统计学的新词识别,自动维护词库等技术,但是显然这样的技术还没有做到完美。
solr怎么建立索引
对数据库中的数据建立倒排索引
1. 启动本机的mysql数据库
我新建test数据库,并在其中新建test表,表有两个字段,ID与Val。ID表示文档编号,Val表示文档内容,这是一个最简单的数据源。
2. 在Solr中配置数据源
在\webapps\solr\conf\multicore\core0\conf\db-data-config.xml中作如下配置:
view plain copy
《dataConfig》
《dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="root" password="XXXXXX" /》
《document name="messages"》
《entity name="message" transformer="ClobTransformer" query="select * from test1"》
《field column="ID" name="id" /》
《field column="Val" name="complex" /》
《/entity》
《/document》
《/dataConfig》
此处的complex应与schema中的field name相对应。
3. 重启tomcat,建索引:
4. 测试查询:
我们此处选择返回查询结果列表的形式是JSON
至此,solr的最简单的一次配置完成了。我们可以看出其中的数据源是怎么变为倒排索引,实现快速查询。企业或网站在数据量极大时,可以使用这种方式建立自己的搜索引擎。接下来我们可以让Nutch和Solr配合,做自己的搜索引擎。
Solr的提交方式
网上的解释真的不能看,全是错的,因为生产中遇到的一次问题对该原理研究了3天,查看了大量书籍,官方文档终于有了较为深刻的认识 Solr的提交方式只有两种,标准提交(硬提交,hard commit)和软提交(soft commit),说三种的错误
1.默认的提交即硬提交,commit之后会立刻将文档同步到硬盘,在开启新搜索器之前会阻塞,直到同步完成 2.默认情况下commit后会开启一个新搜索器(newSearcher),然后进行预热,预热完成后顶替旧搜索器,使旧缓存失效,但是开启新searcher及预热的过程(IO消耗)耗费资源过大,且可能被阻塞,所以应尽量避免在高峰期开启newsearcher,搜索器同一时间只能有一个处于active状态 3.为了避免频繁commit,solr提供了autocommit功能,可以设置每隔多久提交一次,或者待提交文档量达到阀值提交一次,并且可定义是否在提交后开启新的搜索器,若不开启,则缓存不能够被刷新,新更新文档不能够被实时读取到
1.软提交是将文档提交到内存,并不实时写入硬盘,减少了耗时的I/O操作 2.为了保证实时搜索,solr在软提交基础上引入了近实时搜索(NRT),NRT并不会被文档更新所阻塞,也不会等待文档合并完成再打开一个搜索器(以下摘自官方文档)
3.在lucene4.x 之前,solr采用NRTManager实现NRT,之后使用ControlledRealTimeReopenThread实现,它通过IndexWriter对象来监控内存中的文档变化,从而得到最新的文档信息,该过程既不需要高耗时的I/O操作,也不需要刷新搜索器,所以非常之快,耗费资源很少 4.所以 近实时搜索(NRT)是软提交的一个特性 5.同样的软提交也支持自动提交的方式,配置如下
5.这 两种提交方式并不冲突 ,试想我们程序使用了软提交,但何时可以把数据真正同步到磁盘呢?这时候就可以两者结合达到目的
我们设置每隔5000ms进行一次软提交,文档存入了内存,也可以实时搜索,然后每隔300000ms又会进行进行一次硬提交,同步到磁盘,无需刷新Searcher,如此两者兼顾 6.在配置文件中配置后,在客户端就不需要维护提交方式和提交时间了
1.很多人说由于软提交不及时写入硬盘,所以在jvm崩溃时会丢失部分数据,但其实不会,因为软提交和硬提交在commit时都会记录下操作log,若发生崩溃,会在重启时会从log恢复,这点很像mysql的事务日志操作 2.若maxDocs和maxTime都配置了,则那个条件先到就按那个执行,官方建议使用maxTime,因为solr文档较多,通常更新量也大,使用maxTime可能更能减少提交的频次,但在此建议根据实际情况来决定 3.commit操作后,可执行optimize操作,该操作会合并索引碎片,合并后索引性能会有所提升,但该操作消耗较大,每晚定时操作一次即可
lucene,solr有什么区别
Lucene是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎.***隐藏网址***Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专注于搜索底层的建设,而Solr专注于企业应用。Lucene不负责支撑搜索服务所必须的管理,而Solr负责。所以说,一句话概括Solr: Solr是Lucene面向企业搜索应用的扩展
搜索引擎的学习
你好,想做搜索引擎有俩个开源的基础框架用的比较多,Heritrix前端爬虫和Lucene后端检索,这俩个结合起来开发使用绝对可以开发出一个简单的搜索引擎。推荐书籍 人民邮电出版社 邱哲编写的 基于Lucene与Heritrix的搜索引擎这本书介绍了爬虫的配置使用,源文件的解析(即网页数据的获取),索引文件的建立,索引的优化和用户的搜索等多种功能,完全能满足开发的需要,如果想深入学习的话,需要查看Lucene的API来学习。搜索引擎原理比较复杂,涉及到离散数学,编译原理,分词技术,聚类技术,信息检索和抽取技术,如果深入研究的话,分别看这几方面的书籍就可以了。如果想做分布式搜索引擎,可以看看solr,我最近也在研究solr,欢迎交流
全文搜索引擎与目标索引类搜索引擎有什么区别
一、指代不同
1、全文搜索引擎:通过从互联网上提取的各个网站的信息(以网页文字为主)而建立的数据库中,检索与用户查询条件匹配的相关记录,然后按一定的排列顺序将结果返回给用户。
2、目标索引类搜索引擎:是以网页形式提供查找网络资源的一种网络信息检索工具。
二、特点不同
1、全文搜索引擎:以各类数据如文本、声音、图像等为对象,提供按数据的内容而不是外在特征来进行的信息检索,其特点是能对海量的数据进行有效管理和快速检索。
2、目标索引类搜索引擎:使用自动索引软件来搜集和标记网页资源,并将这些资源存入数据库。当用户输入检索的关键词后,它在数据库中找出与该词匹配的记录,并按相关程序排序后显示输出。
三、影响不同
1、全文搜索引擎:是搜索引擎的核心技术,同时也是电子商务网站的支撑技术。全文检索技术可应用于企业信息网站、媒体网站、政府站点、商业网站、数字图书馆和搜索引擎中。
2、目标索引类搜索引擎:由自动索引软件生成数据库,所收录的网络资源范围广、速度快、更新及时,但因缺乏人工干预,准确性较差。这类检索工具适用于查找特定的信息以及专指性强或不易明确分类的具体问题,例如百度搜索引擎。
solr 增量索引 怎么没执行
一、增量索引之删除 昨天已经说过,增量索引其实就是SOLR对上次做过(增量或者全量)索引之后到这次做索引之间的这段时间数据库发生变化的数据进行创建索引,昨天我们说了增加一条数据或者修改一条数据之后创建增量索引,现在来说删除数据的增量索引。 其实这里所说的删除是假删除,什么意思呢?就是并不是说在数据库中把某些数据给彻底删除掉,而是说给你不想创建索引的数据一个标识符,然后告诉solr,有这个标识符的数据你就不要给我创建索引了,我不需要,然后solr创建索引的时候就会忽视这些有特殊标识符的数据,大概的原理就是这样的,那么怎么实现的呢?下面来看: 1.1数据库新增字段 昨天做新增的增量索引的时候需要在数据库添加一个字段,今天做删除的,还是需要一个字段,然后用这个字段来标示数据是否需要创建索引,字段如下所示: 字段名称大家可以自己看着定,类型给个int就行,至于长度也随意,我的是0表示需要创建索引的数据,1表示不需要创建索引的数据,也就是我所说的假删除的数据。 1.2修改配置文件 同样,需要将该字段配置到data-config.xml和schema.xml文件中,如下所示: data-config.xml 注意圈起来的三个地方,首先肯定是需要把isdelete字段变成一个file标签,其次,需要query语句需要添加上where条件,查询出数据库中所有的需要创建索引的数据,然后再添加一个deletedPKQuery语句,这条语句和deltaQuery与deltaImportQuery语句一样,都是只有在做增量索引的时候起作用,deletedPKQuery是查询出所有假删除的数据的ID,然后由deltaImportQuery查询出这些ID对应的记录的全部数据,然后在已经创建的索引中删除掉这一部分索引。 schema.xml schema.xml文件中倒是没有什么大的变化,只需要把isdelete字段添加进来即可: 1.3查看效果按照上面的配置即可,然后我们来看一下效果,首先是数据库:还是昨天的17条数据。SOLR已经创建好的索引:索引也是17条,和数据库的数据是对应的,下面我把数据库中的其中两条数据的isdelet字段修改成1,然后创建一个增量索引,方法和昨天一样,我就不再截图了,首先还是修改数据库:把发哥跟梁朝伟的isdelete修改成1,执行增量索引后的结果如下:可以看到此时的索引少了2条,那到底少的是不是我变成1的两个人呢?我们可以查找一下,找不到的话就对了:可以看到此时查找周润发,但是只找到了星爷,这个原因还是分词器的问题,昨天已经说过了,下面再查一下梁朝伟:可以看到查找结果是空的。 通过上面的两条查询,说明我们对假删除所做的增量索引时成功的。二、定时增量索引***隐藏网址*** 首先,需要引入一个JAR包,这个JAR包我已经发在了第一篇文章最后的DEMO里面了,解压之后就可以看到,但是我要说一点的是,我发出的JAR包是修改过源码的JAR包,很多地方给出的JAR包是apache-solr-dataimportscheduler-1.0.jar这***隐藏网址***/list,但是这个jar包放入tomcat下的solr项目的lib包后会出错,其实也不是出错,而是出现下面的问题:***隐藏网址***这个问题上周六折腾了我一天的时间,快被郁闷死了,后来在网上查资料的时候看到了别人的一篇文章,也才得以解决,一会儿我会把那个文章地址也发出来,这是***隐藏网址******隐藏网址***/article/details/43152307,里面讲的很详细,还有另外的一个问题,大家可以看一下,好了,把这个jar包引入solr的lib包之后进行下一步。 第二步就是在solr的web.xml文件中添加如下代码: 第三步,解压apache-solr-dataimportscheduler-1.0.jar文件,从解压出来的文件夹中找出dataimport.properties文件,然后复制该文件到你的SOLR_HOME目录下的conf文件夹中,注意,这个conf文件夹并不是SOLR_HOME\collection1下的conf,而是SOLR_HOME\conf文件夹,以前是不存在的,需要你自己创建。 、 第四步,打开dataimport.properties文件,修改该文件内容,修改后的文件内容如下所示: ################################################## ## dataimport scheduler properties ## ################################################### to sync or not to sync# 1 - active; anything else - inactivesyncEnabled=1# which cores to schedule# in a multi-core environment you can decide which cores you want syncronized# leave empty or comment it out if using single-core deploymentsyncCores=collection1# solr server name or ip address# server=localhost# solr server port# port=8080# application name/context# webapp=solr# URL params # remainder of URLparams=/dataimport?command=delta-import&clean=false&commit=true&wt=json&optimize=false # schedule interval# number of minutes between two runs# interval=1# 重做索引的时间间隔,单位分钟,默认7200,即1天; # 为空,为0,或者注释掉:表示永不重做索引reBuildIndexInterval=7200# 重做索引的参数reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true# 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;# 两种格式:2012-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期reBuildIndexBeginTime=03:10:00 注意: 1.syncCores=collection1表示对collection1这个core定时创建索引,如果不设置的话,默认也是对collection1创建索引,如果用到了multicore,那么使用逗号隔开即可。 2.server=localhost,port=8080改成你自己的容器地址和端口号即可; 3.interval=1表示定时增量索引的时间间隔,单位是分钟; 4.其他的按照上面的注释配置即可,也没什么难理解的;
搜索引擎,solr
在搜索结果页的链接最后添加&wt=xslt&tr=example.xsl,然后重新载入该查询结果的页面,该页面就被转换成相应的网页结构形式了。例如:ubuntu:8983/solr/select/?q=163%0D%0A&version=2.2&start=0&rows=10&indent=on这是原查询结果页面链接,添加后就是ubuntu:8983/solr/select/?q=163%0D%0A&version=2.2&start=0&rows=10&indent=on&wt=xslt&tr=example.xsl,然后回车载入,就可以以类似html结构的形式显示了。那个solr自带的example.xsl文件在{solr_home}/example/solr/conf/xslt下面。如果你需要显示的更加漂亮结构的话,得需要自己制作相应的xsl文件的,这需要掌握xml相关的知识。你可以修改solr自带的example.xsl,也可以自己重新制作一个xsl文件,只要把最后的&wt=xslt&tr=example.xsl替换成&wt=xslt&tr=自己制作的xsl文件名.xsl即可。
更多文章:
thinkpad p70(thinkpad p70带色彩矫正器吗)
2024年7月9日 10:03