2018-10-30 11:41

  各位知道,搜索程序一般由索引链及搜索组件组成。

  索引链功能的实现需要按照几个独立的步骤依次完成:检索原始内容、根据原始内容来创建对应的文档、对创建的文档进行索引。

  搜索组件用于接收用户的查询请求并返回相应结果,一般由用户接口、构建可编程查询语句的方法、查询语句执行引擎及结果展示组件组成。

  著名的开源程序Lucene是为索引组件,它提供了搜索程序的核心索引和搜索模块,例如图中的“Index”及下面的部分;而ElasticSearch则更像一款搜索组件,它利用Lucene进行文档索引,并向用户提供搜索组件,例如“Index”上面的部分。二者结合起来组成了一个完整的搜索引擎。

  二、索引组件

  索引是一种数据结构,它允许对存储在其中的单词进行快速随机访问。当需要从大量文本中快速检索文本目标时,必须首先将文本内容转换成能够进行快速搜索的格式,以建立针对文本的索引数据结构,此即为索引过程。

  它通常由逻辑上互不相关的几个步骤组成。

  第一步:获取内容。

  过网络爬虫或蜘蛛程序等来搜集及界定需要索引的内容。Lucene并不提供任何获取内容的组件,因此,需要由其它应用程序负责完成这一功能,例如著名的开源爬虫程序Solr、Nutch、Grub及Aperture等。必要时,还可以自行开发相关程序以高效获取自有的特定环境中的数据。获取到的内容需要建立为小数据块,即文档(Document)。

  第二步:建立文档。

  获取的原始内容需要转换成专用部件(文档)才能供搜索引擎使用。

  一般来说,一个网页、一个PDF文档、一封邮件或一条日志信息可以作为一个文档。文档由带“值(Value)”的“域(Field)”组成,例如标题(Title)、正文(body)、摘要(abstract)、作者(Author)和链接(url)等。不过,二进制格式的文档处理起来要麻烦一些,例如PDF文件。

  对于建立文档的过程来说有一个常见操作:向单个的文档和域中插入加权值,以便在搜索结果中对其进行排序。权值可在索引操作前静态生成,也可在搜索期间才动态生成。权值决定了其搜索相关度。

  第三步:文档分析。

  搜索引擎不能直接对文本进行索引,确切地说,必须首先将文本分割成一系列被称为语汇单元(token)的独立原子元素,此过程即为文档分析。每个token大致能与自然语言中的“单词”对应起来,文档分析就是用于确定文档中的文本域如何分割成token序列。

  此即为切词,或分词。

  文档分析中要解决的问题包括如何处理连接一体的各个单词、是否需要语法修正(例如原始内容存在错别字)、是否需要向原始token中插入同义词(例如laptop和notebook)、是否需要将大写字符统一转换为小写字符,以及是否将单数和复数格式的单词合并成同一个token等。这通常需要词干分析器等来完成此类工作,Lucene提供了大量内嵌的分析器,也支持用户自定义分析器,甚至联合Lucene的token工具和过滤器创建自定义的分析链。

  第四步:文档索引

  在索引步骤中,文档将被加入到索引列表。事实上,Lucene为此仅提供了一个非常简单的API,而后自行内生地完成了此步骤的所有功能。

  本文内容脑图如下:

  本文内容脑图


  elasticsearch-head

  直接安装方式:此处不赘述,在我的前文《CentOS-7上Elasticsearch安装填坑记》中已经记录过,可以前去查看

  Docker安装方式:

  docker run -d -p 9100:9100 docker.io/mobz/elasticsearch-head:5

  启动访问:

  查询页面


  使用效果:

  ( 算了,这个简直上古时期的UI真心不想多看一眼,下面就凑合放两张图意思下吧。

  ElasticHD

  ElasticHD 支持 ES监控、实时搜索,Index template快捷替换修改,索引列表信息查看, SQL converts to DSL工具等,体验下来感觉还是比较强大的!

  **项目地址:**https://github.com/360EntSecGroup-Skylar/ElasticHD

  直接安装方式:

  1. 首先下载zip压缩包:

  2. 修改权限:chmod -R 777 ElasticHD

  3. 运行: ./ElasticHD -p 127.0.0.1:9800

  Docker安装方式:

  docker run -p 9200:9200 -d --name elasticsearch elasticsearch

  docker run -p 9800:9800 -d --link elasticsearch:demo containerize/elastichd

  启动访问:

  使用效果:

  这个 Dashboard有点酷炫:

 Dashboard


  数据搜索直观易使用:

  数据搜索


  索引列表看得比较清楚:

  索引列表


  这个 SQL查询语句转 ES的Json查询格式的小工具挺厉害的:

  工具箱


  Dejavu

  Dejavu 也是一个 Elasticsearch的 Web UI 工具,其 UI界面更符合当下主流的前端页面风格,因此使用起来很方便。

  **项目地址:**https://github.com/appbaseio/dejavu/

  Docker安装方式:

  docker run -p 1358:1358 -d appbaseio/dejavu

  启动访问:

  使用效果:

  这个数据预览页面非常直观,索引/类型/文档 看得一清二楚

  数据预览页面


  查询功能也不错

  数据查询


  数据查询


  好了,朋友们,今天的分享就先到这里吧。感谢大家的时间。这些内容是我用来讲课的讲义精练出的内容,用于微信的方式分享可能显得过于啰嗦,请大家将就着看啦。

       原文出处:CodeSheep


评论

kvc636757024

#1

kvc636757024

http://v.qq.com/x/search/?q=%E5%8D%8E%E7%BA%B3%E5%BC%80%E6%88%B7%E7%83%AD%E7%BA%BF_18183615678
2020/06/26 14:02回复