山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(三十一)- 微服务(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": "<em>",
            "post_tags": "</em>"
        }
      }
    }
  }
相关推荐
羊小猪~~1 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
假装我不帅26 分钟前
asp.net framework从webform开始创建mvc项目
后端·asp.net·mvc
神仙别闹29 分钟前
基于ASP.NET+SQL Server实现简单小说网站(包括PC版本和移动版本)
后端·asp.net
放飞自我的Coder30 分钟前
【python ROUGE BLEU jiaba.cut NLP常用的指标计算】
python·自然语言处理·bleu·rouge·jieba分词
正义的彬彬侠1 小时前
【scikit-learn 1.2版本后】sklearn.datasets中load_boston报错 使用 fetch_openml 函数来加载波士顿房价
python·机器学习·sklearn
计算机-秋大田1 小时前
基于Spring Boot的船舶监造系统的设计与实现,LW+源码+讲解
java·论文阅读·spring boot·后端·vue
张小生1801 小时前
PyCharm中 argparse 库 的使用方法
python·pycharm
秃头佛爷1 小时前
Python使用PDF相关组件案例详解
python
Dxy12393102161 小时前
python下载pdf
数据库·python·pdf
叶知安1 小时前
如何用pycharm连接sagemath?
ide·python·pycharm