文档操作(ES 系列详解 - 重点)

本贴最后更新于 1639 天前,其中的信息可能已经时移世异

搜索

GET /yscxy/user/_search?q=name:"野生程序员2"

image.png

image.png分值越高,也就意味着匹配度越高!也就是权重

复杂查询

GET /yscxy/user/_search { "query":{ "match": { "name": "野生小子" } }, "_source":["name","tags"] #自定义查询参数 }

排序

GET /yscxy/user/_search { "query":{ "match": { "name": "野生小子" } }, "_source":["name","age"], "sort":[ #通过哪个字段进行排序 { "age":"asc" } ] }

分页

GET /yscxy/user/_search { "query":{ "match": { "name": "野生小子" } }, "_source":["name","age"], "sort":[ { "age":"asc" } ], "from":0, #从第几条开始 "size":1 #返回多少条数据 }

image.png

当然数据的下标也是从 0 开始的

布尔值查询

mast 命令,类似 mysql 中的 and

GET /yscxy/user/_search { "query":{ "bool":{ "must": [ { "match": { "name": "野生程序员" } }, { "match": { "age": 3 } } ] } } }

image.png

上面也就是多条件查询!

should 相当于 or,两个条件满足一个就好了

GET /yscxy/user/_search { "query":{ "bool":{ "should": [ { "match": { "name": "野生程序员" } }, { "match": { "age": 3 } } ] } } }

must_not 也就是非 相当于 not

GET /yscxy/user/_search { "query":{ "bool":{ "must_not": [ { "match": { "age": 23 } } ] } } }

过滤器

在查询的时候可以,可以使用 filter 进行数据过滤

GET /yscxy/user/_search { "query":{ "bool":{ "must": [ { "match": { "name": "野生" } } ], "filter": [ { "range":{ "age":{ "gte":20 } } } ] } } }

当然也可以这样查询

GET /yscxy/user/_search { "query":{ "match": { "tags": "男 旅游" #多个条件直接用空格隔离开 } } }

精确查询

term 也就是指定词语进行精确查询,这样性能,效率更加快速

term 直接查询精确的

match 会使用分词器进行解析(先分析,再通过分析的文档进行查询,利用倒排索引)

两个类型,一个是 text,另一个是 keyword ,keyword 不会被分词器解析的,而 text 会

下面我们创建文档进行测试

PUT testbdb { "mappings": { "properties": { "name":{ "type": "text" }, "desc":{ "type": "keyword" } } } } PUT testbdb/_doc/1 { "name":"野生程序", "desc":"java desc" } PUT testbdb/_doc/2 { "name":"野生程序", "desc":"java desc2" } GET testbdb/_search { "query": { "term": { "desc": "java desc" } } }

image.png

可以看到,类型为 keeyword 的字段并没有被分词器进行解析

高亮查询

GET /yscxy/user/_search { "query":{ "match": { "name": "野生" } }, "highlight":{ "fields": { "name": {} } } }

查询结果

image.png

自定义样式

GET /yscxy/user/_search { "query":{ "match": { "name": "野生" } }, "highlight":{ "pre_tags": "<p class-'key' style-'color:red'> ", "post_tags": "</p>", "fields": { "name": {} } } }

image.png

  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 203 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...