ElasticSearch
Posted 司机刹一脚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch相关的知识,希望对你有一定的参考价值。
官网: https://www.elastic.co/products/elasticsearch
下载后的解压目录
bin 存放 elasticSearch 运行命令
config 存放配置文件
lib 存放 elasticSearch 运行依赖 jar 包
modules 存放 elasticSearch 模块
plugins 存放插件
运行 elasticSearch/bin/elasticsearch.bat 文件
访问 localhost:9200
ElasticSearch 插件安装 es head
%elasticsearch%/bin/plugin.bat install mobz/elasticsearch-head
访问 http://localhost:9200/_plugin/head/
ElasticSearch 基本操作入门
全文检索: 针对文本中每个词,创建词条建立索引,进行搜索。
索引对象: 存储数据的表结构 ,任何搜索数据,存放在索引对象上.
映射: 数据如何存放到索引对象上,需要有一个映射配置, 数据类型、是否存储、是否分词等
文档: 一条数据记录, 存在索引对象上
文档类型: 一个索引对象 存放多种类型数据, 数据用文档类型进行标识
建立索引对象 --- 建立映射 --- 存储数据【文档】 --- 指定文档类型进行搜索数据【文档】
新建 maven 项目
基于 maven 的 pom 导入坐标依赖
ElasticSearch 服务默认端口 9300
Web 管理平台端口 9200
建立文档, 自动创建索引(当直接在 ElasticSearch 建立文档对象时,如果索引不存在的,默认会自动创建,映射采用默认方式)
访问:http://localhost:9200/_plugin/head/后看到bolg1
自动创建索引映射
搜索文档数据
查询数据 主要依赖 QueryBuilder 对象 ,可以通过 QueryBuilders 获取
boolQuery() 布尔查询,可以用来组合多个查询条件
fuzzyQuery() 相似度查询
matchAllQuery() 查询所有数据
regexpQuery() 正则表达式查询
termQuery() 词条查询
wildcardQuery() 模糊查询
各种查询对象 Query 的使用
ElasticSearch 支持所有 Lucene 查询,并对其进行简化封装
TermQuery 词条查询
WildcardQuery 模糊查询
FuzzyQuery 相似度查询
BooleanQuery 布尔查询
1、ElasticSearch 提供 QueryBuileders.queryStringQuery(搜索内容) 查询方法,对所有字段进行分词查询
只想查询 content 里包含全文 ,使用 wildcardQuery 磨合查询 *任意字符串 ?任意单个字符
如果没有词条包含全文,就会查询不到
查询 content 词条为“搜索” 内容,使用 TermQuery
如果没有"搜索"这个词条,就会搜索不到
IK 分词器和 ElasticSearch 集成使用
ElasticSearch 默认采用分词器, 单个字分词 ,效果很差
下载 https://github.com/medcl/elasticsearch-analysis-ik/tree/2.x
解压后
进入 target/release 目录
将下列文件 ,拷贝到 %es%/plugins/analysis-ik
进入 target/release/config 目录,将所有配置文件,复制 %es%/config 下
配置 elasticsearch.yml
重启 es
访问:http://localhost:9200/_analyze?analyzer=ik&pretty=true&text=%E6%88%91%E7%88%B1java
在 ElasticSearch 没有索引情况下,插入文档,默认创建索引和索引映射 (无法使用 ik分词器)
创建索引
映射相关操作
调用 client.admin().indices().putMapping(mapping).get();
文档相关操作
建立文档
直接在 XContentBuilder 中构建 json 数据,建立文档
对一个已经存在对象,转换为 json ,建立文档
导入jackson转换开发包
<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.8.1</version> </dependency>
修改文档
直接使用 update
删除文档
查询文档分页操作
批量向数据表 插入 100 条记录
分页查询(searchRequestBuilder 的 setFrom【从 0 开始】 和 setSize【查询多少条】方法实现)
查询结果高亮显示
对结果的高亮片段做拼接处理,替换原有内容
以上是关于ElasticSearch的主要内容,如果未能解决你的问题,请参考以下文章
使用标准库Ruby将数据标记到Elasticsearch批量中
Elasticsearch:如何在 Elasticsearch 中正确使用同义词功能