大家好,今天小编来为大家解答以下的问题,关于搜索应用服务器Solr解析,这个很多人还不知道,现在让我们一起来看看吧!
Lucene 是一个高效的、基于Java 的全文搜索库。
所以在了解Lucene之前,需要花一些时间了解全文搜索。
那么什么是全文检索呢?这要从我们生活中的数据开始。
我们生活中的数据一般分为两类:结构化数据和非结构化数据。
· 结构化数据:指具有固定格式或有限长度的数据,如数据库、元数据等。
· 非结构化数据:指长度可变或无固定格式的数据,如电子邮件、word文档等。
当然,有些地方提到了第三种,半结构化数据,如XML、HTML等,可以根据需要作为结构化数据处理,也可以提取纯文本作为非结构化数据处理。
非结构化数据也称为全文数据。
根据数据的分类,搜索也分为两种:
· 搜索结构化数据:例如搜索数据库,使用SQL语句。再比如元数据的搜索,比如使用Windows搜索来搜索文件名、类型、修改时间等。
· 搜索非结构化数据:例如可以使用Windows搜索搜索文件内容,Linux下的grep命令,以及Google和百度搜索大量内容数据。
搜索非结构化数据即全文数据主要有两种方法:
一种是顺序扫描方式(Serial Scanning):所谓顺序扫描,比如要查找包含某个字符串的文件,就一次看一个文件。对于每个文档,请从头到尾阅读。如果这个文档包含这个字符串,那么这个文档就是我们要找的文件,然后再看下一个文件,直到所有文件都扫描完毕。例如,您也可以使用Windows搜索来搜索文件内容,但速度相当慢。如果你有一个80G的硬盘,想要找到上面包含某个字符串的文件,你可能不花几个小时就办不到。 Linux下的grep命令也是这样工作的。你可能觉得这个方法比较原始,但是对于数据量较小的文件来说,这个方法还是最直接、最方便的。但对于大量文件来说,这种方法非常慢。
有人可能会说,非结构化数据的顺序扫描很慢,但是结构化数据的搜索相对比较快(因为结构化数据有一定的结构,可以使用一定的搜索算法来加快速度),那么我们的非结构化数据就不会’将数据转换成某种结构就足够了吗?
这个思想很自然,但却形成了全文检索的基本思想,就是从非结构化数据中提取出部分信息,重新组织,使其具有一定的结构,然后搜索具有一定结构的数据。结构。以达到比较快速搜索的目的。
从非结构化数据中提取出来然后重新组织的这部分信息称为索引。
这个说法比较抽象。举几个例子就很容易理解了。例如,在一本词典中,词典的拼音表和部首查词表就相当于词典的索引。每个词的解释都是非结构化的。如果词典没有音节表和部首查表,要在茫茫词海中查找一个单词只能顺序扫描。然而,可以提取单词的一些信息进行结构化处理。比如发音比较结构化,分为声母和韵母。每一种只有几种,可以一一列出,所以把发音取出来,按一定的顺序排列。每个项目的发音都指向该单词详细解释的页面。我们搜索的时候,根据结构化的拼音去搜索发音,然后根据它指向的页码,就可以找到我们的非结构化数据——,也就是这个词的解释。
这种先建立索引,然后搜索索引的过程称为全文检索。
全文检索大致分为两个过程,索引创建和搜索索引
1. 索引创建:从现实世界中的所有结构化和非结构化数据中提取信息并创建索引的过程。
2、索引index :是获取用户查询请求,搜索创建的索引,然后返回结果的过程。
因此,全文检索存在三个重要问题:
1. 索引中到底存储了什么?
2.如何创建索引?
3、如何搜索索引?
下面我们按顺序研究每个问题。
2. 索引中到底存储了什么?
索引中到底需要存储什么?
首先我们来看看为什么顺序扫描慢:
事实上,这是由于我们要搜索的信息与非结构化数据中存储的信息不一致造成的。
非结构化数据存储的信息是每个文件包含哪些字符串,即已知文件。获取字符串是比较容易的,即文件到字符串的映射。我们要搜索的信息是哪些文件包含这个字符串,即已知的字符串,以及想要的文件,即字符串到文件的映射。两者恰恰相反。所以如果索引能够始终保存字符串到文件的映射,那么搜索速度将会大大提高。
由于从字符串到文件的映射是从文件到字符串映射的逆过程,因此保存此信息的索引称为倒排索引。
反向索引存储的信息一般如下:
假设我的文档集中有100 个文档。为了方便起见,我们将文档从1到100编号,得到以下结构
左边保存的是一系列字符串,称为字典。
每个字符串都指向包含该字符串的文档的链接列表。这个链接的文档列表称为发布列表。
有了索引,保存的信息与要搜索的信息是一致的,可以大大加快搜索速度。
例如,如果我们要查找同时包含字符串“lucene”和字符串“solr”的文档,只需要以下步骤:
1. 获取包含字符串“lucene”的文档列表。
2. 获取包含字符串“solr”的文档列表。
3.通过合并链表查找同时包含“lucene”和“solr”的文件。
看到这里,可能有人会说,全文检索确实加快了检索速度,但是加上索引过程,两者相加并不一定比顺序扫描快很多。事实上,通过索引过程,全文检索并不一定比顺序扫描更快,尤其是当数据量较小时。为大量数据创建索引也是一个非常缓慢的过程。
然而,两者之间仍然存在差异。顺序扫描需要每次扫描,而创建索引的过程只需要一次,一劳永逸。每次搜索时,您不必经历创建索引的过程。您只搜索创建的索引。就是这样。
这也是全文检索相对于顺序扫描的优势之一:索引一次,使用多次。
3. 如何创建索引
全文检索的索引创建过程一般有以下步骤:
第一步:对一些原始文档进行索引。
为了方便说明索引创建过程,特意用两个文件作为例子:
文件1:允许学生与朋友外出,但不允许喝啤酒。
文件2:我的朋友杰瑞去学校看望他的学生,却发现他们喝醉了,这是不允许的。
步骤2:将原始文档传递给子组件(Tokenizer)。
分词组件(Tokenizer)会做以下事情(这个过程称为Tokenize):
1. 将文档拆分为单独的单词。
2. 删除标点符号。
3. 删除停用词。
所谓的停用词是语言中最常见的一些单词。由于它们没有特殊含义,因此大多数情况下不能用作搜索关键字。因此,在创建索引时,会删除此类词,以减少索引。尺寸。
英语中的停用词包括:“the”、“a”、“this”等。
对于每种语言的分词组件(Tokenizer),都有一组停用词。
分词器(Tokenizer)后得到的结果称为令牌(Token)。
在我们的示例中,我们得到以下标记:
“学生”、“允许”、“去”、“他们的”、“朋友”、“允许”、“喝”、“啤酒”、“我的”、“朋友”、“杰瑞”、“去了”、“学校” ”、“看到”、“他的”、“学生”、“发现”、“他们”、“喝醉”、“允许”。
步骤3:将获得的令牌(Token)传递给语言处理组件(Linguistic Processor)。
语言处理组件(语言处理器)主要对获得的token进行一些语言相关的处理。
对于英语来说,语言处理组件(Linguistic Processor)一般会做以下事情:
1. 改为小写(Lowercase)。
2. 将单词还原为其词根形式,例如将“cars”还原为“car”等。此操作称为词干提取。
3、将单词转换成它的词根形式,比如“drove”变成“drive”等,这个操作称为:词形还原
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/117080.html
用户评论
灼痛
终于找到一篇关于Solr解析的入门文章了! 对于像我这样对搜索引擎架构比较好奇的小白来说非常有用。讲解比较清晰,通俗易懂,图文并茂也方便理解。感觉作者经验丰富,能从基础打起一步步带人深入了解,期待后续还能看到更多Solr方面的干货分享。
有8位网友表示赞同!
玻璃渣子
对Solr一直很有兴趣,但总觉得学习门槛比较高。看了这篇文章后感觉希望看到了!解析了Solr的核心功能原理以及一些常用的配置和操作,希望能进一步实践,将Solr应用到实际项目中。
有18位网友表示赞同!
暖栀
文章写的不错,不过我觉得对于已经熟悉Solr的人来说或许不太有帮助了,因为内容过于基础了,缺少深入的讲解和实战案例。 还是期待更多针对高级用户或者特定场景应用的分享。
有13位网友表示赞同!
棃海
学习搜索引擎技术真是太难了!solr解析一直是我头疼的问题,这篇文章虽然讲解比较深入,但我还是没完全看懂。希望作者能后续补充一些代码示例,这样更容易理解和实践。
有9位网友表示赞同!
娇眉恨
Solr确实是一个强大的搜索应用服务器,但配置起来的确有点门槛。 文章对Solr的解析非常精辟,特别是关于数据索引和查询策略的部分,让我受益匪浅!
有10位网友表示赞同!
身影
Solr的强大之处在于其灵活性和效率,这篇文章很好地展示了这些特点。 希望作者能分享更多Solr在实际项目中的应用案例,例如电商平台搜索、知识图谱构建等等,更加直观地展现Solr的潜力!
有17位网友表示赞同!
长裙绿衣
我觉得文章缺失了一些关于Solr与Elasticsearch的区别对比, 作为比较流行的两套技术栈,很多开发者都会在这两者之间徘徊, 希望能增加这一方面的内容。
有9位网友表示赞同!
孤城暮雨
文章说的很好,通俗易懂 非常适合新手学习! 我之前也尝试过搜索应用服务器, 但觉得复杂度太高, 这篇文章让我重新燃起了学习的热情! 希望作者能够继续分享Solr的其他高级知识点。
有20位网友表示赞同!
∞◆暯小萱◆
Solr解析确实很有挑战,这篇文章讲解得还不错,但也有些地方比较深奥,需要结合官方文档进一步学习。希望作者可以多分享一些实践经验和具体的代码示例,更容易理解和操作 。
有11位网友表示赞同!
伱德柔情是我的痛。
作为一名开发人员,对搜索引擎技术有着强烈的兴趣,Solr一直是我的学习目标。这篇文章对我来说是一份极好的宝藏,清晰的讲解和生动的例子让我对Solr的功能和应用有了更深入的了解!
有16位网友表示赞同!
我一个人
这篇博文虽然能解释Solr的基本原理,但缺少一些实践操作指南和代码示例,对于想要快速上手的人来说可能不够实用。 希望作者能够补充更多实用的内容。
有15位网友表示赞同!
不要冷战i
我觉得文章的标题有点偏,“解析”感觉太窄了, 其实Solr不仅仅局限于文本解析,它的应用范围非常广泛,比如支持多种数据类型、丰富的查询语言等等。 可以考虑用更广义的词来概括solr的功能 。
有6位网友表示赞同!
箜明
对于已经熟悉一些搜索引擎概念的人来说,这篇文章的讲解可能有点基础,但是对于完全新手而言还是很不错的入门文章。 希望能看到更多针对实战案例或者特定场景应用的讲解,对提升Solr的使用能力更具帮助。
有13位网友表示赞同!
别伤我i
我之前也尝试过学习Solr, 但总是卡在一些关键知识点上. 这篇文章的讲解很深入, 特别是关于数据映射和自定义查询逻辑的部分, 让我受益匪浅!
有5位网友表示赞同!
花海
虽然文章解释得不错,但我觉得图示部分可以更详细一些,例如展示Solr的数据存储结构、请求处理流程等等。 更直观的展现可以帮助读者更快理解Solr的机制。
有15位网友表示赞同!
孤者何惧
Solr是一个非常强大的搜索应用服务器,但是学习曲线确实比较陡峭。 这篇文章是不错的入门资源,希望作者能关注到初学者的难点,提供更多易于理解和操作的学习材料
有18位网友表示赞同!
冷风谷离殇
这篇文章让我对Solr有了更深入的认识, 它的优势在于其高性能、灵活性和可扩展性, 在大规模数据处理方面非常实用。期待看到更多关于Solr的案例分析和实战经验分享!
有9位网友表示赞同!