ElasticSearch的入门学习

什么是ElasticSearch?
ElasticSearch是一个全文搜索引擎框架,解决了Lucene的不足,ES的索引库管理支持依然是基于Apache Lucene™的开源搜索引擎。
ES即为了解决原生Lucene使用的不足,优化Lucene的调用方式,并实现了高可用的分布式集群的搜索方案
特点:①分布式的文件实时储存
②分布式的实时分析搜索引擎
③可扩展上百台服务器,处理PB级结构化和非结构化数据
ES的交互方式
①RESTful风格
ES和客户端的交互都是json数据,通过9200端口的与ES进行通信
②JavaAPI
节点客户端:以无数据的身份加入集群
传输客户端:这个更轻量的传输客户端能够发送请求到远程集群。它 自己不加入集群,只是简单转发请求给集群中的节点。
使用辅助管理工具Kibana5
GET 用来获取资源,
POST 用来新建资源(也可以用于更新资源),
PUT 用来更新资源,
DELETE 用来删除资源。
Kibana5安装非常简单,ES的服务只依赖JDK,推荐使用1.7+版本
① 下载ES安装包
官方下载地址:https://www.elastic.co/downloads/elasticsearch
② 运行ES
bin/elasticsearch.bat
③ 验证
访问:http://localhost:9200/
创建一个索引库

PUT crm/user/1
{
  "id":2,
  "name":"李四",
  "age":15  
}

删除语句DELETE crm
查询全部:GET crm/_search
GET crm/user/2/_source 不要元数据
在这里插入图片描述
批量操作bulk API
通过id获取
GET crm/user/_mget
{
“ids” : [ “2”, “1” ]
}
分页搜索
和SQL使用 LIMIT 关键字返回只有一页的结果一样,Elasticsearch接受 from 和 size 参数:
size : 每页条数,默认 10
from : 跳过开始的结果数,默认 0
例如:GET _search?size=5&from=5
DSL查询
由ES提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。
DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。
GET crm/user/_search
{
“query” : {
“match” : {
“name” : “李四”
}
}
}
DSL查询与过滤
① 全匹配(match_all)
普通搜索(匹配所有文档):
{
“query” : {
“match_all” : {}
}
}
如果需要使用过滤条件(在所有文档中过滤,红色部分默认可不写):
{
“query” : {
“bool” : {
“must” : [{
“match_all”:{}
}],
“filter”:{…}
}
}
}
② 标准查询(match和multi_match)
match查询是一个标准查询,不管你需要全文本查询还是精确查询基本上都要用到它。
multi_match 查询允许你做 match查询的基础上同时搜索多个字段:
{
“query”:{
“multi_match”: {
“query”: “Steven King”,
“fields”: [ “fullName”, “title” ]
}
}
}
③单词搜索与过滤(Term和Terms)
Terms搜索与过滤
{
“query”: {
“terms”: {
“tags”: [“jvm”, “hadoop”, “lucene”],
“minimum_match”: 2
}
}
}
组合条件搜索与过滤(Bool)
例如:查询爱好有美女,同时也有喜欢游戏或运动,且出生于1990-06-30及之后的人。
{
“query”: {
“bool”: {
“must”: [{“term”: {“hobby”: “美女”}}],
“should”: [{“term”: {“hobby”: “游戏”}},
{“term”: {“hobby”: “运动”}}
],
“must_not”: [
{“range” :{“birth_date”:{“lt”: “1990-06-30”}}}
],
“filter”: […],
“minimum_should_match”: 1
}
}
}
⑤ 范围查询与过滤(range)
range过滤允许我们按照指定范围查找一批数据:
{
“query”:{
“range”: {
“age”: {
“gte”: 20,
“lt”: 30
}
}
}
}
上例中查询年龄大于等于20并且小于30。
通配符搜索(wildcard)
使用代表0~N个,使用?代表1个。
{
“query”: {
“wildcard”: {
“fullName”: "倪
华"
}
}
}
分词和映射
映射文件Mapper
① 基本字段类型
字符串:text,keyword
text默认为全文文本,keyword默认为非全文文本
数字:long,integer,short,double,float
日期:date
逻辑:boolean
② 复杂数据类型
对象类型:object
数组类型:array
地理位置:geo_point,geo_shape
① 对象的映射与索引
{
“id” : 1,
“girl” : {
“name” : “王小花”,
“age” : 22
}
}

猜你喜欢

转载自blog.csdn.net/h993438890/article/details/83758594