elasticsearch8-坐标查询和复合查询

请添加图片描述
个人名片:

博主:酒徒ᝰ.
个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志三人行,必有我师焉。

请添加图片描述
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看

目录

  • 一、DSL查询文档
    • 4. 地理坐标查询
    • 5. 复合查询
      • 1. 算分函数查询
      • 2. 布尔查询

一、DSL查询文档

4. 地理坐标查询

所谓的地理坐标查询,其实就是根据经纬度查询。

常见的使用场景包括:
携程:搜索我附近的酒店
滴滴:搜索我附近的出租车
微信:搜索我附近的人

矩形范围查询

矩形范围查询,也就是geo_bounding_box查询,查询坐标落在某个矩形范围的所有文档:
语法如下:

// geo_bounding_box查询
GET /indexName/_search
{
  "query": {
    "geo_bounding_box": {
      "FIELD": {
        "top_left": { // 左上点
          "lat": 31.1,
          "lon": 121.5
        },
        "bottom_right": { // 右下点
          "lat": 30.9,
          "lon": 121.7
        }
      }
    }
  }
}

示例:
elasticsearch8-坐标查询和复合查询_第1张图片

附近查询

附近查询,也叫做距离查询(geo_distance):查询到指定中心点小于某个距离值的所有文档。

语法说明:

// geo_distance 查询
GET /indexName/_search
{
  "query": {
    "geo_distance": {
      "distance": "15km", // 半径
      "FIELD": "31.21,121.5" // 圆心
    }
  }
}

示例:
elasticsearch8-坐标查询和复合查询_第2张图片

5. 复合查询

复合查询:复合查询可以将其它简单查询组合起来,实现更复杂的搜索逻辑。常见的有两种:

  • fuction score:算分函数查询,可以控制文档相关性算分,控制文档排名
  • bool query:布尔查询,利用逻辑关系组合多个其它的查询,实现复杂搜索

相关性算分

当我们利用match查询时,文档结果会根据与搜索词条的关联度打分(_score),返回结果时按照分值降序排列。

相关性打分算法
TF-IDF:在elasticsearch5.0之前,会随着词频增加而越来越大
BM25:在elasticsearch5.0之后,会随着词频增加而增大,但增长曲线会趋于水平

1. 算分函数查询

使用 function score query,可以修改文档的相关性算分(query score),根据新得到的算分排序。

案例:给“如家”这个品牌的酒店排名靠前一些

GET /hotel/_search
{
  "query": {
    "function_score": {
      "query": {  .... }, // 原始查询,可以是任意条件
      "functions": [ // 算分函数
        {
          "filter": { // 满足的条件,品牌必须是如家
            "term": {
              "brand": "如家"
            }
          },
          "weight": 2 // 算分权重为2
        }
      ],
      "boost_mode": "sum" // 加权模式,求和
    }
  }
}

示例:
elasticsearch8-坐标查询和复合查询_第3张图片

小结

function score query定义的三要素是什么?
过滤条件:哪些文档要加分
算分函数:如何计算function score
加权方式:function score 与 query score如何运算

2. 布尔查询

布尔查询是一个或多个查询子句的组合。
子查询的组合方式有:
must:必须匹配每个子查询,类似“与”
should:选择性匹配子查询,类似“或”
must_not:必须不匹配,不参与算分,类似“非”
filter:必须匹配,不参与算分
基本语法:

GET /indexName/_search
{
  "query": {
    "bool": {
      "must": [
        {}
      ],
      "should": [
        {}
      ],
      "must_not": [
        {}
      ],
      "filter": [
        {}
      ]
    }
  }
}

案例:搜索名字包含“如家”,价格不高于400,在坐标31.21,121.5周围10km范围内的酒店。
elasticsearch8-坐标查询和复合查询_第4张图片

你可能感兴趣的:(#,elasticsearch,elasticsearch,搜索引擎)