各位知道,搜索程序一般由索引链及搜索组件组成。
索引链功能的实现需要按照几个独立的步骤依次完成:检索原始内容、根据原始内容来创建对应的文档、对创建的文档进行索引。
搜索组件用于接收用户的查询请求并返回相应结果,一般由用户接口、构建可编程查询语句的方法、查询语句执行引擎及结果展示组件组成。
著名的开源程序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有点酷炫:
数据搜索直观易使用:
索引列表看得比较清楚:
这个 SQL查询语句转 ES的Json查询格式的小工具挺厉害的:
Dejavu
Dejavu 也是一个 Elasticsearch的 Web UI 工具,其 UI界面更符合当下主流的前端页面风格,因此使用起来很方便。
**项目地址:**https://github.com/appbaseio/dejavu/
Docker安装方式:
docker run -p 1358:1358 -d appbaseio/dejavu
启动访问:
使用效果:
这个数据预览页面非常直观,索引/类型/文档 看得一清二楚
查询功能也不错
好了,朋友们,今天的分享就先到这里吧。感谢大家的时间。这些内容是我用来讲课的讲义精练出的内容,用于微信的方式分享可能显得过于啰嗦,请大家将就着看啦。
原文出处:CodeSheep