Elasticsearch DSL入门

Elasticsearch DSL入门

目录

Elasticsearch DSL入门

DSL结构

 准备数据

简单查询

分页查询

条件顺序匹配查询

多属性查询

布尔查询

加权查询

过滤器

排序

高亮查询

模糊匹配

定义返回属性


DSL结构

  • bool模块

    • 一下3者可以同时存在,结果集沉淀的方式继续匹配,如果只需要其中一个模块则可以省略外包bool的写法

    • must:必然的,匹配的

    • must_not:不是必然的,不匹配的

    • should:有可能,或者

  • from:分页数据第几页

  • size:每页显示的数据总数,默认为10

  • sort:排序模块

POST    http://192.168.213.158:9200/index_car/_search
{
    "query": {
        "bool": {
            "must": [
                {
                    "match_all": { }
                }
            ],
            "must_not": [ ],
            "should": [ ]
        }
    },
    "from": 0,
    "size": 10,
    "sort": [ ]
}

 准备数据

简单查询

  • 查询desc属性中包含比亚迪或者2.0T的车
    • match模块允许将条件拆分,对条件“比亚迪”和“2.0T”也会进行拆分,所以会查出很多数据
    • 下面两种方法对于desc条件都是键值对对象,单一属性默认为“query”多属性需要罗列出来,如果把第2个方法中的“operator”属性换成“or”,则两者表达的意思完全一样
POST    http://192.168.213.158:9200/index_car/_search

{
    "query": {
        "match": {
            "desc": "比亚迪 2.0T"
        }
    }
}



----------------------------------------------------------------------------

{
    "query": {
        "match": {
	        "desc": {
                "query":"比亚迪 2.0T",
                "operator":"and"
            }
	    }
    }
}
  •  查询属性在索引中是否存在,存在会返回结果集,否则空结果集
POST    http://192.168.213.158:9200/index_car/_search

{
    "query": {
        "exists": {
	        "field": "cc"
	    }
    }
}
  •  term模块,要将条件看作是一个整体,不允许拆分
POST    http://192.168.213.158:9200/index_car/_search
{
    "query": {
        "term": {
	        "desc": "凯迪拉克"
	    }
    }
}

分页查询

  • 分页查询,每页显示3条数据,分页2+1页
POS    http://192.168.213.158:9200/index_car/_search

{
    "query": {
        "match": {
	        "desc": "比亚迪 2.0T"
	    }
    },
    "from":2,
    "size":3
}

条件顺序匹配查询

  • desc属性中必须同时包含“凯迪拉克”和“2.0T”,而且是按顺序满足,中间非匹配字段最大允许跳过10个
POST    http://192.168.213.158:9200/index_car/_search
{
    "query": {
        "match_phrase": {
	        "desc": {
                "query":"凯迪拉克 2.0T",
                "slop":10
            }
	    }
    }
}

多属性查询

  • “multi_match”多重匹配,在“fields”属性中指定参加匹配的属性
  • 第2个方法中用到了“^”,表示提升desc属性的打分,会改变结果集中desc命中后的分值
POST    http://192.168.213.158:9200/index_car/_search

{
    "query": {
        "multi_match": {
	        "query": "大众",
            "fields":["name","desc"]
	    }
    }
}

-----------------------------------------------------------------

{
    "query": {
        "multi_match": {
	        "query": "大众",
            "fields":["name","desc^20"]
	    }
    }
}

布尔查询

  • bool模块中条件
    • must匹配
      • “name”和“desc”属性中包含“大众”,条件“大众”允许拆分
      • “name”属性中必须包含“奥迪”,条件“奥迪”作为一个整体,不允许拆分
    • must_not不匹配(与must平级属性)
      • “name”属性中包含“奔驰”,条件“奔驰”作为一个整体,不允许拆分
      • 结合“must_not”,解释为“name”属性中不允许包含“奔驰”,条件“奔驰”作为一个整体,不允许拆分
POST    http://192.168.213.158:9200/index_car/_search

{
    "query": {
        "bool": {
	        "must":[
                {
                "multi_match":{
                    "query":"大众",
                    "fields":["name","desc^10"]
                }
            },
            {
                "term":{
                    "name":"奥迪"
                }
            }
            ],
            "must_not":[{
                "term":{
                    "name":"奔驰"
                }
            }]
	    }
    }
}

加权查询

  • 下面有两种加权方式,增加打分的结果都是一样的
    • “fields”属性中“^”加权
    • 属性模块中“boost”加权
POST    http://192.168.213.158:9200/index_car/_search

{
    "query": {
        "bool": {
	        "should":[
                {
                    "multi_match":{
                        "query":"大众",
                        "fields":["name","desc^10"]
                    }
                },
                {
                    "match":{
                        "name":{
                            "query":"奥迪",
                            "boost":20
                        }
                    }
                }
            ]            
	    }
    }
}

过滤器

  • “post_filter”与“query”是平级模块
  • “range”范围过滤,“num”属性大于等于200且小于等于123456
POST    http://192.168.213.158:9200/index_car/_search

{
    "query": {
        "match":{
            "desc":"大众"
        }
    },
    "post_filter":{
        "range":{
            "num":{
                "gte":200,
                "lte":123456
            }
        }
    }
}

排序

  • “sort”与“query”平级模块
  • 主要根据“num”属性升序排列
  • 次要条件,当“num”部分数据无法完成排序,根据“price”倒序排列
POST    http://192.168.213.158:9200/index_car/_search

{
    "query": {
        "match":{
            "desc":"比亚迪"
        }
    },
    "post_filter":{
        "range":{
            "num":{
                "gte":200,
                "lte":123456
            }
        }
    },
    "sort":[
        {
            "num":"asc"
        },
        {
            "price":"desc"
        }
    ]
}

高亮查询

  • “highlight”与“query”平级模块
  • “pre_tags”与“post_tags”定义关键字的标签,默认为“<em></em>”标签
  • 注意“fields”定义的属性要与“query”定义的属性保持一致,否则结果无法被标记为高亮
POST    http://192.168.213.158:9200/index_car/_search

{
    "query": {
        "multi_match":{
            "query":"比亚迪",
            "fields":["name","desc"]
        }
    },
    "highlight":{
        "pre_tags": ["<span>"],
        "post_tags": ["</span>"],
        "fields":[
            {
                "desc":{}
            },
            {
                "name":{}
            }
        ]
    }
}

模糊匹配

  • 纠错查询
    • 第一个查询为自动纠错,更倾向于第一个
    • 第二个查询为纠错位数,对中文不是很友好
POST    http://192.168.213.158:9200/index_car/_search

{
    "query": {
        "fuzzy":{
            "desc":"比亚滴"
        }
    }
}

---------------------------------------------------------

{
    "query": {
        "multi_match":{
            "query":"比亚滴",
            "fields":["name","desc"],
            "fuzziness":"1"
        }
    }
}
  • 前缀查询
POST    http://192.168.213.158:9200/index_car/_search

{
    "query": {
        "prefix":{
            "desc":"比"
        }
    }
}
  • 通配符查询,对中文不是很友好

    • “?”表示1个不确定因素
    • “*”表示1个或者多个不确定因素
POST    http://192.168.213.158:9200/index_car/_search

{
    "query": {
        "wildcard":{
            "desc":"*an"
        }
    }
}

-----------------------------------------------------------------

{
    "query": {
        "wildcard":{
            "desc":"d?g"
        }
    }
}

定义返回属性

{
    "query": {
        "match":{
            "name":"长安"
        }
    },
    "_source":["id","desc"]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值