es_DSL语句

mapping属性:

mapping是对索引库中文档的约束,常见的mapping属性包括:

  1.  type:字段数据类型,常见的简单类型有:
  • 字符串: text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)
  • 数值:long.integer.short、byte、double、float
  • 布尔: boolean
  • 日期:date
  • 对象: object
  1. index:是否创建索引,默认为true创建索引
  2. analyzer:使用哪类分词器
  3. properties:该字段的子字段 

索引库操作

  • 创建索引库:PUT/索引库名
  • 查询索引库:GET/索引库名
  • 删除索引库:DELETE/索引库名
  • 修改索引库(添加字段):PUT/索引库名/_mapping

文档操作

  1. 创建文档:POST/索引库名/_doc/文档id { json文档}
  2. 查询文档:GET/索引库名/_doc/文档id
  3. 删除文档:DELETE/索引库名/_doc/文档id
  4. 修改文档:
  • 全量修改:PUT/索引库名/_doc/文档id { json文档}
  • 增量修改:POST/索引库名/_update/文档id { "doc":{字段}}

 查询文档:

Elasticsearch提供了基于JSON的DSL来定义查询。常见的查询类型包括:

查询所有

查询所有数据。例:match_all

# 查询所有
GET /hotel/_search
{
  "query": {
    "match_all": {}
  }
}

全文检索

利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例:

match_query:对单个字段进行查询

GET /hotel/_search
{
  "query": {
    "match": {
      "字段": "值"
    }
  }
}

multi_match_query:对多个字段进行查询,字段越大性能越低

GET /hotel/_search
{
  "query": {
    "multi_match": {
      "query": "值", 
      "fields": ["字段1","字段2"]
    }
  }
}

精确查询

根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例:

ids 根据id来查询

GET /hotel/_search
{
  "query": {
    "ids": {
      "values": ["434082"]
    }
  }
}
  • term 根据词条精确值查询
GET /hotel/_search
{
  "query": {
    "term": {
      "字段": {
        "value": "值"
      }
    }
  }
}
  • range 根据值的范围查询 
GET /hotel/_search
{
  "query": {
    "range": {
      "字段": {
        # gte 大于等于,gt 大于,lte 小于等于,lt 小于
        "gte": 200, # 大于等于
        "lte": 300 # 小于等于
      }
    }
  }
}

地理

根据经纬度查询,例:

geo_distance

GET /hotel/_search
{
  "query": {
    "geo_distance": {
      "location": "31.21,121.5", # 地理坐标
      "distance": "12km" # 范围
    }
  }
}

复合

  • Function Query

可以修改文档相关性算分,根据新得到的算分排序

 例:查询包含“外滩”的酒店,并且给id为434082的酒店加4分

GET /hotel/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "all": "外滩"
        }
      },
      "functions": [
        {
          "filter": {
            "ids": {
              "values": [
                "434082"
              ]
            }
          }, 
          "weight": 4
        }
      ],
      "boost_mode": "sum"
    }
  }
}
  • Boolean Query

布尔查询是一个或多个查询子句的组合。子查询的组合方式有:

  • must:必须匹配每个子查询,类似“与”
  • should:选择性匹配子查询,类似“或”
  • must_not:必须不匹配,不参与算分,类似“非”
  • filter:必须匹配,不参与算分

例:查询坐标在31.21,121.5附件10km的价格不高于400的如家酒店

GET /hotel/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "brand": "如家"
          }
        }
      ],
      "must_not": [
        {
          "range": {
            "price": {
              "gte": 400
            }
          }
        }
      ],
      "filter": [
        {
          "geo_distance": {
            "distance": "10km",
            "location": {
              "lat": 31.21,
              "lon": 121.5
            }
          }
        }
      ]
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值