课程笔记:《狂神聊Elasticsearch》

全文搜索属于最常见的需求,开源的 Elasticsearch 是目前全文搜索引擎的首选。


一、Elasticsearch概述

官方介绍:Elasticsearch 是一个分布式RESTful风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。

Elasticsearch 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。

ELK:Elasticsearch、Logstash、Kibana

二、核心概念

物理设计

在后台把每个索引划分成多个分片

逻辑设计

索引

相当于数据库中的表

类型

mapping

文档

相当于数据库的一条记录

倒排索引


三、IK分词器

分词:即把一段中文划分为词

Elasticsearch的一个插件

提供了两个分词算法:ik_smartik_max-word,其中ik_smart是最小划分,ik_max-word是最细粒度划分

GET _analyze
{
	"analyzer":"ik_smart",
	"text":"超级喜欢狂神说Java"
}

ik分词器增加自己的配置字典

四、Rest风格操作

methodurl地址描述
PUT/索引名称/类型文档/文档id创建文档(指定文档id)

索引的基本操作

创建索引

PUT /test1/type1/1
{
	"name": "狂神说",
	"age": 3
}

指定类型

PUT /test2
{
	"mapping": {
		"properties": {
			"name": {
				"type": "text"
			},
		}
	}
}

如何文档字段没有指定类型,es会给我们默认配置字段类型

获得集群信息

GET _cat/

修改文档信息

POST /test3/_doc/1/_update
{
	"doc": {
		"name": "法外狂徒张三"
	}
}

加_update的好处是不传的参数不会被覆盖

删除索引

DELETE test1

文档的基本操作

简单的条件查询

GET /kuangshen/user/_search?q=name:狂神说

复杂查询

GET kuangshen/user/_search
{
	"query": {
		"match": {
			"name": "狂神"
		}
	}
}

指定字段,结果过滤

GET kuangshen/user/_search
{
	"query": {
		"match": {
			"name": "狂神"
		}
	},
	"_source": ["name", "desc"]
}

排序

GET kuangshen/user/_search
{
	"query": {
		"match": {
			"name": "狂神"
		}
	},
	"sort": [
		{
			"age": {
				"order": "asc"
			}
		}
	]
}

分页查询

from:从第几个数据开始
size:返回多少条数据(单页面的数据)

GET kuangshen/user/_search
{
	"query": {
		"match": {
			"name": "狂神"
		}
	},
	"sort": [
		{
			"age": {
				"order": "asc"
			}
		}
	],
	"from": 0,
	"size": 1
}

多条件精确查询

must:所有的条件都要符合,对应于数据库中的and
should:只要有一个条件符合
must_not:对应not

GET kuangshen/user/_search
{
	"query": {
		"bool": {
			"must": [
				{
					"match": {
						"name": "狂神说"
					},
					"match": {
						"age": 23
					}
				}
			]
		}
	},
	"_source": ["name", "desc"]
}

过滤操作

GET kuangshen/user/_search
{
	"query": {
		"bool": {
			"must": [
				{
					"match": {
						"name": "狂神说"
					}
				}
			],
			"filter": {
				"range": {
					"age": {
						"gte": 10,
						"lt": 25
					}
				}
			}
		}
	},
}

匹配条件查询

GET kuangshen/user/_search
{
	"query": {
		"match": {
			"tags": "男 技术"
		}
	},
}

精确查询

term:直接精确查询(倒排索引)

match:会使用分词器解析(先分析文档,然后通过分析的文档进行查询)

keyword类型不会被分词器解析,text类型会被分词器解析

GET testdb/_search
{
	"query": {
		"term": {
			"name": "狂"
		}
	}
}

高亮查询

GET kuangshan/user/_search
{
	"query": {
		"match": {
			"name": "狂神"
		}
	},
	"highlight": {
		"pre_tags": "<p class='key' style='color:red'>",
		"post_tags": "</p>",
		"fields": {
			"name": {}
		}
	}
}

五、参考文献

狂神聊Elasticsearch

全文搜索引擎 Elasticsearch 入门教程

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值