1.Java语言全文检索技术简介
什么是lucene?
Lucene是一套 “全文检索” 编程API ,基于Lucene对数据建立索引,进行查询。
很多框架对lucene进行了封装。
什么是ElasticSearch ?
现在企业开发中,更常用是的solr搜索服务器和ElasticSearch搜索服务器
如果大家使用过 Apache Lucene 或 Apache Solr,就会知道它们的使用体验非常有趣。尤其在你需要扩展基于 Lucene 或 Solr 的解决方案时,你就会了解 Elasticsearch 项目背后的动机。Elasticsearch(构建于 Lucene 之上)在一个容易管理的包中提供了高性能的全文搜索功能,支持开箱即用地集群化扩展。你可以通过标准的 REST API 或从特定于编程语言的客户端库与 Elasticsearch 进行交互。
本教程将展示 Elasticsearch 的实际工作原理。首先了解命令行访问该 REST API 来了解它的基本信息。然后设置一个本地 Elasticsearch 服务器,并使用Java 应用程序与它交互。
2.ElasticSearch 安装配置使用入门
对于 Java 示例,还需要安装 Eclipse 和 Apache Maven。如果你的系统上还没有它们,请下载和安装它们。
官网: https://www.elastic.co/products/elasticsearch
Window系统下载zip版本,linux系统下载tar版本
下载后的页面
bin 存放elasticSearch 运行命令
config 存放配置文件
lib 存放elasticSearch运行依赖jar包
modules 存放elasticSearch 模块
plugins 存放插件
运行elasticSearch/bin/elasticsearch.bat 文件
配置JAVA_HOME环境变量
安装elasticSearch成功
将Elasticsearch注册到windows的服务上,不用每次启动Elasticsearch
安装:install
启动:start
停止:stop
卸载:remove
管理:manager
配置:查找jdk的绝对路径
3. ElasticSearch 插件安装 es head
es head:
elasticsearch-head插件
插件安装方法:
方案一:联网的情况下,可以使用plugin命令。
1.elasticsearch/bin/plugin.bat -install mobz/elasticsearch-head
2.运行es
3.打开http://localhost:9200/_plugin/head/
方案二:可以直接在git上下载源码到本地运行。
在地址栏输入es服务器的ip地址和端口,点connect就可以连接到集群。下面是连接后的视图。这是主界面,在这里可以看到es集群的基本信息(如:节点情况,索引情况)
【方案一】:联网下载
%elasticsearch%/bin/plugin.bat install mobz/elasticsearch-head
下载插件:
访问 http://localhost:9200/_plugin/head/
【方案二】:下载解压
1、插件下载地址
https://github.com/mobz/elasticsearch-head
2、安装方法:
将下载下的zip文件,解压缩到plugins/head目录下
目录路径如下:elasticsearch-2.4.0/plugins/head/
3、启动es bin/elasticsearch
4、访问集群
浏览器地址栏输入http://localhost:9200/_plugin/head/
5. 显示结果如下图
4. ElasticSearch 基本操作入门
推荐书籍 :
《Elasticsearch服务器开发(第2版).pdf 》
《Elasticsearch权威指南(中文版).pdf》
全文检索: 针对文本中每个词,创建词条建立索引,进行搜索。
倒排索引:
也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。
倒排列表:
倒排列表用来记录有哪些文档包含了某个单词。一般在文档集合里会有很多文档包含某个单词,每个文档会记录文档编号(DocID),单词在这个文档中出现的次数(TF)及单词在文档中哪些位置出现过等信息,这样与一个文档相关的信息被称做倒排索引项(Posting),包含这个单词的一系列倒排索引项形成了列表结构,这就是某个单词对应的倒排列表。
ElasticSearch 操作服务器上的数据,通过 Rest API 操作数据
Elasticsearch可以作为一个独立的单个搜索服务器。不过,为了能够处理大型数据集,实现容错和高可用性,Elasticsearch可以运行在许多互相合作的服务器上。这些服务器称为集群(cluster),形成集群的每个服务器称为节点(node)。
如果操作Elasticsearch上数据,访问提供Rest API的URL地址,传递json数据给服务器
4.1 ElasticSearch 基础 数据架构的主要概念
索引对象(blob): 存储数据的表结构 ,任何搜索数据,存放在索引对象上 。
映射(mapping): 数据如何存放到索引对象上,需要有一个映射配置, 包括:数据类型、是否存储、是否分词 … 等。
文档(document): 一条数据记录, 存在索引对象上
文档类型(type): 一个索引对象 存放多种类型数据,数据用文档类型进行标识
【后续编程】:
第一步:建立索引对象
第二步:建立映射
第三步:存储数据【文档】
第四步:指定文档类型进行搜索数据【文档】
4.2 Elasticsearch与Mysql对比
Elasticsearch 集群可以包含多个索引(Index),每个索引可以包含多个类型(Type),每个类型可以包含多个文档(Document),每个文档可以包含多个字段(Field)。以下是 MySQL 和 Elasticsearch 的术语类比图,帮助理解:
就像使用 MySQL 必须指定 Database 一样,要使用 Elasticsearch 首先需要创建 Index:
client.indices.create({index : 'blog'});
这样就创建了一个名为 blog的 Index。Type 不用单独创建,在创建 Mapping 时指定就可以。Mapping 用来定义 Document 中每个字段的类型,即所使用的 analyzer、是否索引等属性,非常关键等。创建 Mapping 的代码示例如下:
client.indices.putMapping({
index : 'blog',
type : 'article',
body : {
article: {
properties: {
id: {
type: 'string',
analyzer: 'ik',
search_analyzer: 'ik',
},
title: {
type: 'string',
analyzer: 'ik',
search_analyzer: 'ik',
},
content: {
type: 'string',
analyzer: 'ik',
search_analyzer: 'ik',
}
}
}
}
});
5. CURL命令操作执行REST命令
要理解本教程的所有示例,需要在你的系统上安装 Elasticsearch。下载针对你的平台的 最新 Elastic Search 程序包。将该包解压到一个方便的位置。
在 Windows 上,运行elastic-search-dir/bin/elasticsearch.bat
5.1 Windows安装CURL
第一步:工具下载:
在官网处下载工具包:http://curl.haxx.se/download.html
下载后:
为了方便运行,不出现中文路径。
第二步:安装
【使用方式一】:在curl.exe目录中使用
解压下载后的压缩文件,通过cmd命令进入到curl.exe所在的目录。
进入到该目录后,执行curl --help测试:
【使用方式二】:放置在system32中
解压下载好的文件,拷贝curl.exe文件到C:\Windows\System32
然后就可以在DOS窗口中任意位置,使用curl命令了。
【使用方式三】:配置环境变量(推荐)
在系统高级环境变量中,配置
CURL_HOME ----- "你的curl目录位置"
path ---- 末尾添加 “;%CURL_HOME%;”
这样与上面方式二的效果相同。
可以对 Elasticsearch 发出 CURL 请求,这样很容易从命令行 shell 体验该框架。
Elasticsearch 是无模式的,这意味着它可以接受你提供的任何命令,并处理它以供以后查询。Elasticsearch 中的所有内容都被存储为文档,所以你的第一个练习是存储一个包含博客的文档。首先创建一个索引,它是你的所有文档类型的容器 — 类似于 MySQL 等关系数据库中的数据库。然后,将一个文档插入该索引中,以便可以查询该文档的数据。
5.2 创建一个索引
Elasticsearch 命令的一般格式是:REST VERBHOST:9200/index/doc-type— 其中 REST VERB 是 PUT、GET 或DELETE。(使用 curlL -X 动词前缀来明确指定 HTTP 方法。)
要创建一个索引,可在你的 shell 中运行以下命令:
curl -XPUT "http://localhost:9200/blog01/"