黑马DSL查询文档

1、DSL查询分类

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

        查询所有:查询出所有数据,一般测试用。例如:match all
        全文检索(fulltext)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:
                match_query
                multi_match_query
        精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:
                ids
                range
                term
        地理(geo)查询:根据经纬度查询。例如:
                geo_distance
                geo_bounding box
        复合(compound)查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。例如:
                bool
                function_score

2、查询

        查询DSL的基本语法是什么?
                GET /索引库名/_search
                {"query":{"查询类型":{"FIELD":"TEXT"}}}

示例:

GET /hotel/_search
{
  "query": {
    "match_all": {}
  }
}

        1、全文检索查询

        match和multi match的区别是什么?
                match:根据一个字段查询
                multi match:根据多个字段查询,参与查询字段越多,查询性能越差

        可以利用copy_to将多个字段放到一个字段中专门用于查询

# match查询
GET /hotel/_search
{
  "query": {
    "match": {
      "{all}": "城隍庙"
    }
  }
}

# multi_match查询
GET /hotel/_search
{
  "query": {
    "multi_match": {
      "query": "外滩如家",
      "fields": ["name","brand"]
    }
  }
}

        2、精确查询

精确查询常见的有哪些?
        term查询:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段
        range查询:根据数值范围查询,可以是数值、日期的范围

#term查询
GET /hotel/_search
{
  "query": {
    "term": {
      "brand": {
        "value": "如家"
      }
    }
  }
}

#range查询
GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 10,
        "lte": 2000
      }
    }
  }
}

ps:gte意为大于等于,lte反之,gt意为大于,lt反之

        3、地理坐标查询

#distance查询
GET /hotel/_search
{
  "query": {
    "geo_distance":{
      "distance":"1km",
      "location":"31.21 , 121.5"
    }
  }
}

指定距离和中心点的经纬度,中心点以距离为半径的圆内的数据便会被选中

        4、组合查询

        复合(compound)查询:复合查询可以将其它简单查询组合起来,实现更复杂的搜索逻辑,例如:        fuction score:算分函数查询,可以控制文档相关性算分,控制文档排名。例如百度竞价

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

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

#function score查询
GET /hotel/_search
{
  "query": {
    "function_score": {
      "query": {"match": {
        "{all}": "外滩"
      }},
      "functions": [
        {
          "filter": {"term": {"brand": "如家"}},
          "weight": 10
        }
      ],
      "boost_mode": "sum"
    }
  }
}
 

复合查询boolean query

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

        must:必须匹配每个子查询,类似“与”

        should:选择性匹配子查询,类似“或”

        must not:必须不匹配,不参与算分,类似“非”

        filter:必须匹配,不参与算分

ps:参与算分的条件越多,性能越差

GET /hotel/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "name": {
              "value": "如家"
            }
          }
        }
      ],
      "must_not": [
        {
          "range": {
            "price": {
              "gt": 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、付费专栏及课程。

余额充值