ElasticSearch DSL查询语法

2023-03-28  本文已影响0人  舞鹤Roc

ES中的查询分为URI Search、Request Body Search,DSL语句就是基于Request Body Search查询类型的。

查询索引相关的用法

DSL查询

基础语法

GET /indexName/_search
{
  "query": {
    "查询类型": {
      "查询条件": "条件值"
    }
  }
}

全文检索查询

match查询:全文检索的一种,会对用户输入的内容分词,然后去倒排索引库检索

GET /indexName/_search
{
  "query": {
    "match": {
      "FIELD": "TEXT"
    }
  }
}

精确查询

// term查询
GET /indexName/_search
{
  "query": {
    "term": {
      "FIELD": {
        "value": "VALUE"
      }
    }
  }
}
// range查询
GET /indexName/_search
{
  "query": {
    "range": {
      "FIELD": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

布尔查询

布尔查询是一个或者多个查询子句的组合

#布尔查询
GET /hotel/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "如家"
          }
        }
      ],
      "must_not": [
        {
          "range": {
            "price": {
              "gt": 400
            }
          }
        }
      ],
      "filter": [
        {
          "geo_distance": {
            "distance": "10km",
            "location": "31.21,121.51"
          }
        }
      ]
    }
  }
}

排序查询

#通过评分和价格排序
GET /hotel/_search
{
 "query": {
   "match_all": {}
 },
 "sort": [
   {
     "score": {
       "order": "desc"
     },
     "price": {
       "order": "asc"
     }
   }
 ]
}

分页查询

#分页
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  //起始记录数
  "from": 0,
  //获取文档总数
  "size": 20
}

搜索结果高亮

#高亮显示
GET /hotel/_search
{
  "query": {
    "match": {
      "all": "如家"
    }
  },
  "highlight": {
    //开始标签
    "pre_tags": "<em>",
    //结束标签
    "post_tags": "</em>", 
    //是否字段匹配,默认情况下搜索字段需要与高亮字段匹配
    "require_field_match": "false", 
    //高亮字段
    "fields": {
      "name": {},
      "brand": {}
    }
  }
}

Elasticsearch 应用案例

上一篇 下一篇

猜你喜欢

热点阅读