概述
DSL(Domain Specific Language):
简单来说,DSL就是ES的一种查询方式,DSL基于JSON实现了直观简单的结构化查询功能。由于DSL查询是JSON格式的,所以更加的灵活,而且可以同时包含查询和过滤器,咱们可以很轻松的构造出复杂的查询功能。
基于Restful风格
基于这种风格是软件操作更简洁、更有层次、更易于实现缓存等。
基本Rest命令说明
POST
- 创建文档(随机文档id)
url地址:localhost:9200/索引名称/类型名称
描述:创建文档(随机文档id) - 创建文档(指定文档id)
url地址:localhost:9200/索引名称/类型名称/文档id
描述:创建文档(指定文档id) - 修改文档
url地址:localhost:9200/索引名称/文档id/_update
描述:修改文档 - 查询所有文档
url:localhost:9200/索引名称/类型名称/_search
描述:查询所有文档数据
PUT
- 修改/创建文档(指定文档id)
url地址:localhost:9200/索引名称/类型名称/文档id
描述:修改/创建文档(指定文档id)
DELETE
- 删除文档
url:localhost:9200/索引名称/类型名称/文档id
描述:删除文档
GET
- 查询文档通过文档id
url:localhost:9200/索引名称/类型名称/文档id
描述:查询文档通过文档Id
添加文档
PUT/POST /索引名/类型名/文档id
{请求体}
- 注意ES7xxx版本之后,不建议是自定义类型,类型名称可以写死为:_doc;
- 使用上面的语法,如果索引不存在,ES会自动添加索引、Map,我们也可以收到创建索引、Map;
PUT /test2/_doc/3
{
"name":"王老五",
"age":24,
"dees":"砖石王老五",
"tags":["有钱","单身"]
}
# 或者
POST /test2/_doc/6
{
"name":"王老五",
"age":24,
"dees":"砖石王老五",
"tags":["有钱","单身"]
}
# 或者不指定文档id
POST /test2/_doc
{
"name":"王老五",
"age":24,
"dees":"砖石王老五",
"tags":["有钱","单身"]
}
更新文档
全量更新
PUT /索引名称/_doc/文档id
局部更新
POST /索引名称/_update/文档id
或者
POST /索引名称/_doc/文档id/_update
只会更新name字段值,其他的字段值不会修改。
示例:
POST /test2/_update/3
{
"doc":{
"name":"王老三"
}
}
删除文档
根据文档id删除
DELETE /索引名称/_doc/文档id
示例:
DELETE /test2/_doc/1
查询文档
指定文档Id获取文档记录
GET /索引名称/_doc/文档id
示例:
简单条件搜索
- 根据简单条件查询索引中的文档
GET /索引名称/_search?q=字段名:字段值
注意:逻辑符必须大写,比如AND 而不是and。
示例:
GET /article/_search?q=id:3 OR title:"test1"
- 查询索引中的全部文档
GET /索引名称/_search
全局查询:
复杂条件搜索(类似MySql的select(排序、分页、高亮、模糊、精准))
查询的参数体使用JSON结构,输出结果有匹配总数,最高匹配度等。
GET /索引名称/_search
{
body
}
示例:
嵌套查询
GET /test/_search
{
"query": {
"bool": {
"must": [
{
"terms": {
"customerId": [
"fdafda"
]
}
},
{
"nested": {
"path": "face",
"query": {
"terms": {
"face.name": [
"ttt"
]
}
}
}
}
]
}
}
}
指定输出的字段
针对某个字段进行排序
示例:
GET /test2/_search
{
"query":{
"match":{
"name":"王老五"
}
},
"_source":["name","age"],
"sort":[
{
"age":{
"order":"desc"
}
}
]
}
分页查询
from:起始,size:查询个数
布尔查询
must(类似于and)
所有条件都要符合 where id = 1 and name =xxx
should(类似or)
所有条件都要符合 where id = 1 or name = xx
must_not(即not)
所有条件满足where name is not xxx
过滤器filter,对数据进行过滤
gt:大于; gte:大于等于; lt:小于; lte:小于等于
示例:
匹配多个条件
输入多个条件,用空格隔开。
结果按照匹配度排序。
比如,对tags字段匹配 钱 、单身两个条件
精确查询
term查询:直接通过倒排索引指定的词条进行精确查询(完全匹配)。
match查询:会使用分词器解析(先分析文档,然后再通过分析的文档进行查询)。
多值匹配精确查询
嵌套查询
GET /company_data_index/_search
{
"query": {
"nested": {
"path": "all_year_credit_info", #path为路径
"query": {
"bool": {
"must": [
{ "term": { "all_year_credit_info.year": 1577808000 }},
{ "term": { "all_year_credit_info.level": 1 }}
]
}
}
}
}
}
高亮查询
参考
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/100183.html