• 分布式搜索引擎面试题(一)


    1.Lucene是什么?

    Lucene是一套用于全文检索和搜索的开放源代码程序库。实际上lucene的功能很单一,说到底,就是你给它若干个字符串,然后它为你提供一个全文搜索服务,告诉你你要搜索的关键词出现在哪里。

    2.全文检索是什么?

    全文检索首先将要查询的目标文档中的词提取出来,组成索引,通过查询索引达到搜索目标文档的目的。这种先建立索引,再对索引进行搜索的过程就叫全文检索。

    全文检索大体分两个过程,索引创建(Indexing)搜索索引(Search)索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。搜索索引:通过用户的查询请求搜索创建的索引,然后返回查询结果的过程。

    说到结构化和非结构化数据,而我们生活中的数据分为结构化数据非结构化数据

    • 结构化数据:具有固定格式或有限长度的数据,可以用二维表结构来逻辑表达实现的,如数据库,元数据等。

    • 非结构化数据:指不定长或无固定格式的数据,如办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等。也叫全文数据。

    对于结构化数据的搜索:如对数据库的搜索,用 SQL 语句。再如对元数据的搜索,如利用windows 搜索对文件名,类型,修改时间进行搜索等。对非结构化数据的搜索:如利用 windows 的搜索也可以搜索文件内容,Linux 下的 grep命令,在如用 Google 和百度可以搜索大量内容数据。

    对非结构化数据也即对全文数据的搜索主要有两种方法:

    1.顺序扫描法:从头到尾的去找,直到扫描项目里面的所有文件。window 的搜索文件内容,linux 的 grep 命令就是如此的。小数据量的文件还可以接受,如果对于大量的文件,方法就很慢了。

    2.索引:把非结构化数据重新设计成有一定的结构,利用结构化的数据采取一定的搜索算法加快速度。把非结构化数据中提取出的然后重新组织的信息,称之为索引。比如字典,字典的拼音表和部首检字表就是相当于字典的索引,对每一个字的解释就是非结构化的,如果字典没有音节表和部首检字表,在茫茫辞海中找一个字只能顺序扫描。然而字的某些信息可以提取出来进行结构化处理,比如读音,就比较结构化,分声母和韵母,分别只有几种可以一一列举,于是将读音拿出来按一定的顺序排列,每一项读音都指向此字的详细解释的页数。我们搜索时按结构化的拼音搜到读音,然后按其指向的页数,便可找到我们的非结构化数据——也即对字的解释。

    索引的目的可以理解为把非结构化的数据按某些特性抽离出,形成结构化的数据,然后再使用抽离出的结构化的数据,使用一定的检索方法去快速查询非结构的话数据。

    3.Lucene和sola

    形象的来说Solr和Lucene之间关系的方式是汽车和引擎,你不能驾驶一台发动机,但可以开一辆汽车。同样,Lucene是一个程序化库,不能按原样使用,而Solr是一个完整的应用程序,可以立即使用它

    4.lucene的底层原理 / 什么是倒排索引

    倒排索引。由item查询key的过程,是倒排索引。对于网页搜索,倒排索引可以理解为Map<item, list>,能够由查询词快速(时间复杂度O(1))找到包含这个查询词的网页的数据结构。

    举个例子,假设有3个网页:

    url1 -> “我是中国人”

    url2 -> “我是程序员”

    url3 -> “我爱敲代码”

    这是一个正排索引Map<url, page_content>。

    分词之后:

    url1 -> {我,是,中国人}

    url2 -> {我,是,程序员}

    url3 -> {我,爱,敲代码}

    这是一个分词后的正排索引Map<url, list>。

    分词后倒排索引:

    我 -> {url1, url2,, url3}

    是 -> {url1, url2}

    爱 -> {url3}

    中国人 -> {url1}

    程序员 -> {url2}

    敲代码 -> {url3}

    由检索词item快速找到包含这个查询词的网页Map<item, list>就是倒排索引。

    5.什么是正排索引

    由key查询实体的过程,是正排索引。

    用户表:t_user(id, name, passwd, age, sex),由id查询整行的过程,就是正排索引查询。

    网页库:t_web_page(url, page_content),由url查询整个网页的过程,也是正排索引查询。

    网页内容分词后,page_content会对应一个分词后的集合list。

    简易的,正排索引可以理解为Map<url, list>,能够由网页快速(时间复杂度O(1))找到内容的一个数据结构。

    640?wx_fmt=png

  • 相关阅读:
    IOS 开发 网络发展史(基础知识)
    加密详解
    IOS对接支付的流程
    App混合开发浅谈
    swift语法100
    2015年最新Android基础入门教程目录第二章:Android UI(User Interface)详解(已完结 40/40)
    2015年最新Android基础入门教程目录第一章:环境搭建与开发相关(已完结 10/10)
    Reactive开发
    tensorflow 安装
    Mask RCNN笔记
  • 原文地址:https://www.cnblogs.com/felordcn/p/12142548.html
Copyright © 2020-2023  润新知