山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(三十一)- 微服务(11)
12.7 DSL查询语法
查询的基本语法
GET /indexName/_search
{
"query": {
"查询类型": {
"查询条件": "条件值"
}
}
}
查询所有
GET /hotel/_search
{
"query": {
"match_all": {}
}
}
12.7.1 全文检索查询
全文检索查询,会对用户搜索内容进行分词,常用于搜索框搜索
match查询,全文检索查询的一种,会对用户输入内容进行分词,然后去倒排索引库检索
# match查询
GET /hotel/_search
{
"query": {
"match": {
"all": "外滩如家"
}
}
}
multi_match: 允许同时查询多个字段,查询字段越多,性能越差
# multi_match查询
GET /hotel/_search
{
"query": {
"multi_match": {
"query": "外滩如家",
"fields": ["brand","name","business"]
}
}
}
12.7.2 精确查询
一般是查找keyword 数值,日期,boolean类型,你不会对搜索条件分词
term: 根据词条精确查询
# 精确查询
GET /hotel/_search
{
"query": {
"term": {
"city": {
"value": "上海"
}
}
}
}
range: 根据值的范围查询:
# 范围查询
GET /hotel/_search
{
"query": {
"range": {
"price": {
"gte": 100,
"lte": 300
}
}
}
}
12.7.3 地理查询
geo_bounding_box查询 查询的是给定的两点形成的矩形区域内满足要求的文档
geo_distance 查询的是到指定中心点小于某个距离的文档值
# 地理查询geo_distance
GET /hotel/_search
{
"query": {
"geo_distance": {
"distance": "15km",
"location": "31.21 , 121.5"
}
}
}
12.7.4 复合查询
12.7.4.1 Function Score 查询
function score : 相关性算分查询,控制文档排名
例 : 给如家品牌的酒店排名考前一点
GET /hotel/_search
{
"query": {
"function_score": {
"query": {
"match": {
"all": "外滩"
}
},
"functions": [
{
"filter": {
"term": {
"brand": "如家"
}
},
"weight": 10
}
],
"boost_mode": "sum"
}
}
}
12.7.4.2 Boolean查询
布尔查询是一个或多个查询子句的集合, 子查询的组合方式有:
must : 必须匹配每个子选项 类似”与“
should : 选择性匹配 类似”或“
must_not: 必须不匹配 ,不参与算分 类似”非“
filter: 必须匹配, 不参与算分
例1:查询上海的皇冠假日或华美达酒店并且价格在500以上,并且得分不低于45分
GET /hotel/_search
{
"query": {
"bool": {
"must": [
{"term": {"city": "上海"}}
],
"should": [
{"term": {"brand": "皇冠假日"}},
{"term": {"brand": "华美达"}}
],
"must_not": [
{"range": {"price": {"lte": 500} }}
],
"filter": [
{"range": {"score": {"gte": 45}}}
]
}
}
}
例2: 查询名字包含如家 价格不高于400 坐标在31.21,121.5周围10km的酒店
GET /hotel/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"brand": "如家"
}
}
],
"must_not": [
{
"range": {"price": {"gt": 400}}
}
],
"filter": [
{
"geo_distance": {
"distance": "10km",
"location": {"lat": 31.21,"lon": 121.5}
}
}
]
}
}
}
12.7.5 搜索结果处理
12.7.5.1 排序
默认根据先关度算分来排序,可以自定义: keyword类型,数值类型,地理坐标类型,日期类型
普通字段:
GET /hotel/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"FIELD": "desc"
}
]
}
地理位置距离排序:
GET /hotel/_search
{
"query":{
"match_all": {}
},
"sort": [
{
"geo_distance": {
"FIELD": "经度,纬度",
"order": "asc",
"unit": "km"
}
}
]
}
例1: 按用户评价排序酒店,评价相同的按价格排序
GET /hotel/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"score": "desc"
},
{
"price": "asc"
}
]
}
例2: 实现对酒店数据按自己的位置距离进行升序排序
GET /hotel/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"_geo_distance": {
"location": {
"lat": 31.034661,
"lon": 121.612282
},
"order": "asc",
"unit": "km"
}
}
]
}
12.7.5.2 分页
# 分页查询
GET /hotel/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"price": "asc"
}
],
"from": 10, // 从第几条开始
"size": 10 // 每页多少条 from+size不能超过10000
}
12.7.5.3 高亮
# 高亮查询 默认情况下 ES搜索字段必须与高亮字段一致
GET /hotel/_search
{
"query": {
"match": {
"all": "如家"
}
},
"highlight": {
"fields": {
"name": {
"require_field_match": "false", // 取消默认 改为不用与搜索字段一致
"pre_tags": "",
"post_tags": ""
}
}
}
}
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!


