栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 云计算 > 云平台

ElasticSearch(2)

云平台 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ElasticSearch(2)

ES查询语法

基本查询语法 1)查询所有

2)全文检索查询

match查询

对用户输入的内容分词后,根据某个字段进行倒排检索查询。越精确的数据越靠前。

Field:字段。

Text:查询内容

#全文检索查询match——示例
GET /hotel/_search
{
  "query": {
    "match": {
      "all": "上海外滩如家"
    }
  }
}
multi_match查询

与match类似,多字段同时查询。

#全文检索查询multi_match——示例
GET /hotel/_search
{
  "query": {
    "multi_match": {
      "query": "上海外滩如家",
      "fields": ["brand","name","business"]
    }
  }
}

3)精确查询

精确查询时,不会对查询条件进行分词处理,与MySQL条件查询等号匹配类似。

精确值查询
#精确查询term——示例
GET /hotel/_search
{
  "query": {
    "term": {
      "city": {
        "value": "上海"
      }
    }
  }
}
范围查询
#精确查询range——示例
GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 100,    #大于等于
        "lte": 200     #小于等于
        #"gt": 100,    #大于
        #"lt": 200     #小于
      }
    }
  }
}
总结 4)地理查询

geo_bounding_box:geo_point值在某个矩形范围内的所有文档

 geo_distance:距离某个点的所有文档

#地理查询:中心扩散查询(距离中心距离)geo_distance——示例
GET /hotel/_search
{
  "query": {
    "geo_distance": {
      "distance": "5km",
      "location": "31.21,121.5"
    }
  }
}
5)相关性算分(百度竞价)

Function Score Query:自定义文档数据排名。

#加权查询(百度竞价了属于是)functions_score
GET /hotel/_search
{
  "query": {
    "function_score": {
      "query": {    #普通查询数据
        "match": {
          "all": "外滩"
        }
      },
      "functions": [#设置加权函数
        {
          "filter": {#过滤出需要加权的数据,这里过滤出“如家酒店”的数据
            "term": {
              "brand": "如家"
            }
          },
          "weight": 10 #加权值
        }
      ],
      "boost_mode": "multiply" #加权方式
    }
  }
}
6)复合查询Boolean Query

must与filter区别:must算分,filter不算分。需要算分的查询条件放到must里,不需要算分的放大filter里。

#复合查询 Boolean Query
GET /hotel/_search
{
  "query": {
    "bool": {
      "must": [    #必须匹配,并且参与算分
        {
          "match": {
            "brand": "如家"
          }
        }
      ],
      "must_not": [    #相反匹配,同“非”效果,不参与权重算分
        {
          "range": {    #范围查询
            "price": {  #价格字段
              "gt": 400 #大于400(取反后就是不大于400)
            }
          }
        }
      ],
      "filter": [    #必须匹配,不参与算分
        {
          "geo_distance": {    #地理范围查询,不过按理说距离范围应该参与算分,距离越近的应该分数越高
            "distance": "10km",#距离10千米以内
            "location": {      #坐标字段
              "lat": 31.21,    #纬度
              "lon": 121.5     #经度
            }
          }
        }
      ]
    }
  }
}
搜索结果处理(排序、分页、高亮) 1)排序

数字、日期排序
#数字、日期排序
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [               #查询结果排序
    {
      "price": {          #排序字段
        "order": "asc"    #排序方式asc升序 desc倒序
      }
    }
  ]
}
地理位置排序
#地理位置排序,找到附近酒店,距离越近排名越靠前
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "_geo_distance": {        #地理位置排序
        "location": {           #排序字段
          "lat": 31.034661,     #你的纬度
          "lon": 121.612282     ##你的经度
        },
        "order": "asc",         #升序,距离越近排名越靠前
        "unit": "km"            #距离单位 km
      }
    }
  ]
}

#查询结果解析
{
        "_index" : "hotel",
        "_type" : "_doc",
        "_id" : "2056298828",
        "_score" : null,
        "_source" : {
          "address" : "沪南公路7688弄1号",
          "brand" : "万豪",
          "business" : "南汇/野生动物园",
          "city" : "上海",
          "id" : 2056298828,
          "location" : "31.030053, 121.662943",
          "name" : "上海中优城市万豪酒店",
          "pic" : "https://m.tuniucdn.com/fb3/s1/2n9c/2gBATEyysyQWmw3wZL863HGdqjaq_w200_h200_c1_t0.jpg",
          "price" : 1200,
          "score" : 45,
          "starName" : "五钻"
        },
        "sort" : [
          4.8541199685347785    #距离自己位置的距离,单位为unit的km
        ]
      }

PS:排序后文档就没有权重分数了

2)分页查询

分页查询最高只能查询10000条数,满足大部分业务。

#分页查询
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "from": 0,    #开始位置
  "size": 10,   #查询条数
  "sort": [
    {
      "price": {
        "order": "asc"
      }
    }
  ]
}

3)高亮

高亮:ES帮助我们添加标签,前端只需要对某个标签进行高亮处理即可

高亮的字段可以有多个,如:查询出的标题字段、内容字段。

#高亮查询——对查询关键字高亮显示
GET /hotel/_search
{
  "query": {
    "match": {
      "all": "如家"
    }
  },
  "highlight": {                        #高亮查询
    "fields": {                         #选择高亮字段
      "name": {
        "pre_tags": "",             #关键字前缀(默认就是em标签)
        "post_tags": "",           #关键字后缀
        "require_field_match": "false"  #字段是否必须与查询字段一致才高亮,默认为true
      }
    }
  }
}


#查询结果解析
      {
        "_index" : "hotel",
        "_type" : "_doc",
        "_id" : "339952837",
        "_score" : 2.7571862,
        "_source" : {
          "address" : "良乡西路7号",
          "brand" : "如家",
          "business" : "房山风景区",
          "city" : "北京",
          "id" : 339952837,
          "location" : "39.73167, 116.132482",
          "name" : "如家酒店(北京良乡西路店)",
          "pic" : "https://m.tuniucdn.com/fb3/s1/2n9c/3Dpgf5RTTzrxpeN5y3RLnRVtxMEA_w200_h200_c1_t0.jpg",
          "price" : 159,
          "score" : 46,
          "starName" : "二钻"
        },
        "highlight" : {    #高亮后,关键字会拼接前后缀,前段对em表现css设置高亮颜色即可
          "name" : [
            "如家酒店(北京良乡西路店)"
          ]
        }
      },
未完待续~
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/895768.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号