ES DSL语法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES DSL语法相关的知识,希望对你有一定的参考价值。

参考技术A ES 查询主要分为两大类:词条查询(term)和全文查询(match)
参考: https://www.cnblogs.com/ljhdo/p/4577065.html
词条查询和全文查询的主要区别:前者对搜索关键词不分析(分词)直接构建查询,match类则会将搜索关键词分析后在构建查询
词条查询的语法有:term terms prefix wildcard regexp
全文查询的语法主要是match类:match match_phrase match_phrase_prefix multi_match

特别关注的语法解释:
wildcard 相当于 mysql的like,机械式匹配,效率慢,支持的通配符只有两个:*:0个或多个任意字符 , ?:任意单个字符
fuzzy 字符的相似度-编辑距离,通过算法匹配,和普通需求想法可能结果不一样
match_phrase 和match_phrase_prefix phrase (短语)除了要匹配短语分词外,并且保证各个分词的相对位置不变

查询语法另一种分类,也是和传统SQL对比
参考: https://www.cnblogs.com/shoufeng/p/11103913.html
1 term query - 索引词检索
1.1 term query - 不分词检索 =
1.2 terms query - in检索
2 prefix query - 前缀检索
3 wildcard query - 通配符检索 like
4 regexp query - 正则检索
5 fuzzy query - 纠错检索
6.其他复杂检索

_bulk

create:id不能为空,必须指定id,id相同时报错

index:id可以为空,不指定id时自动生成,id相同时覆盖

update :需要用doc 包括起来

"update":"_index": "bi_stat_order","_type": "type","_id": "mW2zxnEBerbeohH8xPZT"

"doc":"date": 1588118400000,"total": 160

两行之间不使用分号分隔

可以直接指定index 和type ,省去每一行都要写index和type

POST bi_stat_order/type/_bulk

"index":

"date": 1588118400000,"total": 179

ES(elasticsearch) query DSL 查询语法

"query_string": {
      "default_field": "name",
      "query": "被检索的字符串"
    }

"term": {
    "name": "被检索的字符串"
}

"terms": {
    "name": [
        "被检索的字符串1",
        "被检索的字符串2"
    ]
}

"multi_match": {
    "query": "被检索的字符串",
    "fields": [
        "name", "city"
    ]
}

"match": {
    "name": "name 是字段名,这段话是要检索的文本"
}
  
"match_phrase": {
    "name": "完整匹配"
}
  
"range": {
    "age": {
        "gte": 10,
        "lte": 20
    }
}

"bool": {
    "must_not": {
        "term": {
            "name": {
                "value": "被检索的字符串"
            }
        }
    },
    "filter": {
        "exists": {
            "field": "被检查的字段名"
        }
    }
}

 

以上是关于ES DSL语法的主要内容,如果未能解决你的问题,请参考以下文章

ES 使用指北

ES-DSL基本使用

es 搜索功能简介

Elastic Search | 记一次Kibana执行ES-DSL脚本实战思考过程

Elastic Search | 记一次Kibana执行ES-DSL脚本实战思考过程

Elastic Search | 记一次Kibana执行ES-DSL脚本实战思考过程