美文网首页程序员
ElasticSearch基本查询(入门级)

ElasticSearch基本查询(入门级)

作者: Randolph555 | 来源:发表于2018-12-19 17:09 被阅读0次

小白入口ElasticSearch官网  ElasticSearch GitHub地址

为了方便理解es中的关系,es的index、type可以看做为mysql的database、table

在介绍语法之前大家先要搞清楚es里的分词

在百度输入关键字 “中分分词” ,第3个红色标记圈内出现了 “汉语分词”

我们输入中文分词能搜索到汉语分词,是因为百度搜索引擎使用分词搜索中文分词器。

QA:

什么是分词器?

es默认英文分词,如果需中文分词,安装分词器:中文分词器、IK分词器或自建词库。

什么是分词搜索?

语句:今天中午吃什么。      分词:今天、中午、吃、什么、吃什么。

通过es检索关键词来检索到排分最高词频最接近的语句。

什么是倒排索引?

正排索引 我们把索引看做是一本书的目录,通过目录找到对应页码,是key寻找value,而倒排索引是通过value寻找key,当然仅仅只是对倒排索引的一点点认识和理解,ES的存储方式是面向文档的,下面来看图:

词汇1存在文档1文档4、词汇2存在文档2文档3..

下面我们来介绍解基本语法:

MYSQL

1.直接搜索

SELECT * FROM USER 

2. 条件查询

SELECT * FROM USER WHERE NAME = '张三学'

3.多条件AND查询,OR查询

SELECT * FROM USER WHERE NAME = '张三学' AND SCORE = 70

SELECT * FROM USER WHERE GENDER = '男' OR SCORE = 70

4.使用区间查询

SELECT * FROM USER SCODE >= 10 AND SCODE <= 100

5. 使用 in查询

SELECT * FROM USER WHERE SCODE IN (60,61,62)

6.使用like查询

张后面模糊 SELECT * FROM USER WHERE NAME LIKE 张%

前后模糊 SELECT * FROM USER WHERE NAME LIKE %张%

7.分页排序

SELECT * FROM USER ORDER BY ID DESC LIMIT 0,10

ES-DSL

ElasticSearch 5.0以后,移除了string类型,string字段被拆分成两种新的数据类型: text用于全文搜索的,而keyword用于关键词搜索。

Text :分词、支持模糊、精确查询、不支持聚合

keywordText:不分词、支持模糊、精确查询、支持聚合

1.直接搜索

{"query": {"match_all": {} } }

2.条件查询

2.1.matchQuery 分词搜索

{ "query": { "match": { "name": "张三学" } }}

相关张三丰、张三、张无忌、三观、学习的都可以搜索到。

2.2.termQuery 不分词搜索

{ "query": { "term": { "name": "张三学" } }}

只能搜索到张三学,是==的关系,PS:如果name被分词了,就无法搜索到结果!

3.多条件AND查询

多条件查询时使用bool 可以用来合并多个过滤条件查询结果的布尔逻辑.

must :: 多个查询条件的完全匹配,相当于 and。

must_not :: 多个查询条件的相反匹配,相当于 not。

should :: 至少有一个查询条件匹配, 相当于 or。

must : { "query": { "bool": { "must": [ { "match": { "name": "张三学" } }, { "match": { "score": 70 } } ] } }}

filter: { "query": { "bool": { "filter": { "match": { "name": "张三学" } }, "must": [ { "term": { "score": "70" } } ] } }}

ES中索引的数据都会存储一个_score分值,分值越高就代表越匹配,filter会自动的缓存过滤器的内容,这对于查询来说,不参与计算分值,会提高很多性能。

should:{ "query": { "bool": { "should": [ { "term": { "score": "70" } }, { "match": { "name": "张三学" } } ] } }}

4.使用区间查询

range:{ "query": { "range": { "score": { "gte": 10, "lte": 100 } } } }

5.使用in查询

terms:{ "query": { "terms": { "score": [ 60,61,62 ] } } }

6.使用like查询

前缀prefix:{ "query": { "prefix": { "name": { "value": "张" } } } }

模糊fuzzy:{ "query": { "fuzzy": { "name": { "value": "张" } } } }

7.分页排序

{ "from": 0, "size": 10, "sort": [ { "id": { "order": "desc" } } ], "query": { "match_all": {} } }

下面在是kibana上执行查询的使用

相关文章

网友评论

    本文标题:ElasticSearch基本查询(入门级)

    本文链接:https://www.haomeiwen.com/subject/dcblkqtx.html