Elasticsearch(七)——DSL语法

DSL特点

  1. Domain Specific Language
  2. 特定领域语言
  3. 基于JSON格式的数据查询
  4. 查询更灵活,有利于复杂查询
# 查询
POST     /索引/_doc/_search
{
    "query": {
        "match": {
            "desc": "Elasticsearch"//查询条件 Desc字段中带有Elasticsearch的会查询出来
        }
    }
}
# 判断某个字段是否存在
{
    "query": {
        "exists": {
	        "field": "desc"
	    }
    }
}

注意:语法法格式为一个json object,内容都是key-value键值对,json可以嵌套。key可以是一些es的关键字,也可以是某个field字段。

查询索引中所有的文档
POST     /索引/_doc/_search
{
    "query": {
        "match_all": {}
    },
    "_source": ["id", "nickname", "age"]
}

分页查询

默认查询是只有10条记录,可以通过分页来展示

POST     /索引/_doc/_search
{
    "query": {
        "match_all": {}
    },
    "from": 0,
    "size": 10
}

{
	"query": {
		"match_all": {}
	},
	"_source": [
		"id",
		"nickname",
		"age"
	],
	"from": 5,
	"size": 5
}

term精确搜索与match分词搜索

  1. match会对中华人民共和国先进行分词(其实就是全文检索),在查询。
  2. 而term则不会,直接把中华人民共和国作为一个整的词汇去搜索。
POST     /索引/_doc/_search
{
    "query": {
        "term": {
            "desc": "中华人民共和国"
        }
    }
}
对比
{
    "query": {
        "match": {
            "desc": "中华人民共和国"
        }
    }
}

terms多个词语匹配检索

相当于是tag标签查询。

POST     /索引/_doc/_search
{
    "query": {
        "terms": {
            "desc": ["中华人", "人民", "共和国"]
        }
    }
}

match_phrase短语匹配

match:分词后只要有匹配就返回,match_phrase :分词结果必须在text字段分词中都包含,而且顺序必须相同,而且必须都是连续的。(搜索比较严格)

slop :允许词语间跳过的数量

POST     /shop/_doc/_search
{
    "query": {
        "match_phrase": {
            "desc": {
            	"query": "中华 人民 共和国",
            	"slop": 2
            }
        }
    }
}

根据文档主键ids搜索

POST     /索引/_doc/_search

{
    "query": {
        "ids": {
            "type": "_doc",
            "values": ["1001", "1010", "1008"]
        }
    }
}

operator

  1. or:搜索内容分词后,只要存在一个词语匹配就展示结果
  2. and:搜索内容分词后,都要满足词语匹配
{
    "query": {
        "match": {
            "desc": {
                "query": "中华人民",
                "operator": "or"
            }
        }
    }
}
# 相当于 select * from 索引 where desc='中华' or|and desc='人民'
  1. mininmum_should_match:最低匹配精度,至少有分词后的词语个数x百分百,得出一个数据值取整。举个例子∶当前属性设置为70,若一个用户查询检索内容分词后有10个词语,那么匹配度按照10X7O%=7,则desc中至少需要有7个词语匹配,就展示;若分词后有8个,则8x70%=5.5,则desc中至少需要有5个词语匹配,就展示。
  2. minimum_should_match也能设置具体的数字,表示个数
POST     /索引/_doc/_search
{
    "query": {
        "match": {
            "desc": {
                "query": "中华人民共和国",
                "minimum_should_match": "60%"
            }
        }
    }
}

multi_match

满足使用match在多个字段中进行查询的需求

POST     /索引/_doc/_search
{
    "query": {
        "multi_match": {
                "query": "中华人民共和国",//查询内容
                "fields": ["desc", "nickname"]//需要在哪些字段中chax

        }
    }
}

boost

权重,为某个字段设置权重,权重越高,文档相关性得分就越高。通畅来说搜索商品名称要比商品简介的权重更高.

POST     /索引/_doc/_search
{
    "query": {
        "multi_match": {
                "query": "中华人民共和国",
                "fields": ["desc", "nickname^10"]

        }
    }
}

注意:nickname^10代表搜索提升1倍相关性,也就是说用户搜索的时候其实以这个nickname为主,desc为辅, nickoame的匹配相关度当然要提高权重比例了。

boost为指定词语加权重

POST     /索引/_doc/_search
{
    "query": {
        "bool": {
            "should": [
            	{
            		"match": {
            			"desc": {
            				"query": "中华",
            				"boost": 18
            			}
            		}
            	},
            	{
            		"match": {
            			"desc": {
            				"query": "人民",
            				"boost": 2
            			}
            		}
            	}
            ]
        }
    }
}

post_filter 过滤器

对搜索出来的结果进行数据过滤。不会到es库里去搜,不会去计算文档的相关度分数,所以过滤的性能会比较高,过滤器可以和全文搜索结合在一起使用。
post_filter 元素是一个顶层元素,只会对搜索结果进行过滤。不会计算数据的匹配度相关性分数,不会相据分数去排序,query则相反,会计算分数,也会按照分数去排序。

  1. query:根据用户搜索条件检索匹配记录

  2. post_filter :用于查询后,对结果数据的筛选

  3. gte :大于等于

  4. lte : 小于等于

  5. gt:大于

  6. lt:小于

POST     /索引/_doc/_search

{
	"query": {
		"match": {
			"desc": "苹果手机"
		}	
    },
    "post_filter": {
		"range": {
			"money": {
				"gt": 4000,
				"lt": 8000
			}
		}
	}	
}

高亮highlight

POST     /索引/_doc/_search
{
    "query": {
        "match": {
            "desc": "中华人民共和国"
        }
    },
    "highlight": {
        "pre_tags": ["<tag>"],//自定义高亮标签-开始
        "post_tags": ["</tag>"],//自定义高亮标签-结束
        "fields": {
            "desc": {}
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值