赞
踩
- # 查询所有
- GET /indexName/_search
- {
- "query":{
- "match_all": {
-
- }
- }
- }
- #全文检索查询 单个字段: 查询name包含如家的酒店
- GET /hotel/_search
- {
- "query": {
- "match": {
- "name": "如家"
- }
- }
- }
- #全文检索查询 多个字段: 查询name、all包含如家的酒店
- GET /hotel/_search
- {
- "query": {
- "multi_match": {
- "query": "如家",
- "fields": ["all","name"]
- }
- }
- }
- #精确查询:
- GET /hotel/_search
- {
- "query": {
- "term": {
- "brand": {
- "value": "如家"
- }
- }
- }
- }
- #精确查询 range:查询价格在200-300之间的酒店
- GET /hotel/_search
- {
- "query": {
- "range": {
- "price": {
- "gte": 200,
- "lte": 300
- }
- }
- }
- }
注意:如果使用term查询text类型的数据会查询为空
- # 字段的类型和查询的类型需要匹配起来
- GET /hotel/_search
- {
- "query": {
- "term": {
- "name": "如家酒店·neo(上海外高桥保税区北地铁站店)"
- }
- }
- }
结果:
- // 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
- }
- }
- }
- }
- }

- # 地理位置查询:离陆家嘴15km之内的酒店
- GET /hotel/_search
- {
- "query": {
- "geo_distance": {
- "distance":"15km",
- "location":"31.21,121.5"
- }
- }
- }
- #function score的运行流程如下:
-
- #- 1)根据原始条件查询搜索文档,并且计算相关性算分,称为原始算分(query score)
- #- 2)根据过滤条件,过滤文档
- #- 3)符合过滤条件的文档,基于算分函数运算,得到函数算分(function score)
- #- 4)将原始算分(query score)和函数算分(function score)基于运算模式做运算,得到最终结果,作为相关性算分。
-
-
-
-
-
- #复合查询:算分函数:让品牌是如家酒店排名靠前
- GET /hotel/_search
- {
- "query": {
- "function_score": {
- "query": {
- "match_all": {}
- },
- "functions": [
- {
- "filter": {
- "term": {
- "brand": "如家"
- }
- },
- "weight": 10
- }
- ],
- "boost_mode": "sum"
- }
- }
- }

- #布尔查询是一个或多个查询子句的组合,每一个子句就是一个子查询。子查询的组合方式有:
- #- must:必须匹配每个子查询,类似“与” and
- #- should:选择性匹配子查询,类似“或” or
- #- must_not:必须不匹配,不参与算分,类似“非”
- #- filter:必须匹配,不参与算分
-
-
- # bool查询
- GET /hotel/_search
- {
- "query": {
- "bool": {
- "must": [
- {
- "match": {
- "name": "如家"
- }
- }
- ],
- "must_not": [
- {
- "range": {
- "price": {
- "gt": 400
- }
- }
- }
- ],
- "filter": [
- {
- "geo_distance": {
- "distance": "10km",
- "location": {
- "lat": 31.21,
- "lon": 121.5
- }
- }
- }
- ]
- }
- }
- }

- GET /hotel/_search
- {
- "query": {
- "match_all": {}
- },
- "sort": [
- {
- "score": {
- "order": "desc"
- },
- "price": {
- "order": "asc"
- }
- }
- ]
- }

- #地理坐标排序 找31.034,121.61周围的酒店
- GET /hotel/_search
- {
- "query": {
- "match_all": {}
- },
- "sort": [
- {
- "_geo_distance": {
- "location": {
- "lat": 31.034,
- "lon": 121.61
- },
- "order": "asc",
- "unit": "km"
- }
- }
- ]
- }

- #类似于mysql中的limit ?,?
- GET /hotel/_search
- {
- "query": {
- "match_all": {}
- },
- "from": 0, // 分页开始的位置,默认为0
- "size": 10, // 期望获取的文档总数
- "sort": [
- {"price": "asc"}
- ]
- }
- #分页时需要排序,原理是从上一次的排序值开始,查询下一页数据
- GET /hotel/_search
- {
- "query": {
- "match": {
- "brand": "如家"
- }
- },
- "size": 5,
- "sort": [
- {
- "price": {
- "order": "asc"
- },
- "id": {
- "order": "asc"
- }
- }
- ],
- "search_after":[
- 149,
- "541619"
- ]
- }

模版:
- GET /hotel/_search
- {
- "query": {
- "match": {
- "FIELD": "TEXT" // 查询条件,高亮一定要使用全文检索查询 text
- }
- },
- "highlight": {
- "fields": { // 指定要高亮的字段
- "FIELD": {
- "pre_tags": "<em>", // 用来标记高亮字段的前置标签
- "post_tags": "</em>" // 用来标记高亮字段的后置标签
- }
- }
- }
- }
-
- 注意:
- - 高亮是对关键字高亮,因此搜索条件必须带有关键字,而不能是范围这样的查询。
- - 默认情况下,高亮的字段,必须与搜索指定的字段一致,否则无法高亮
- - 如果要对非搜索字段高亮,则需要添加一个属性:required_field_match=false

- #高亮
- GET /hotel/_search
- {
- "query": {
- "match": {
- "all": "如家"
- }
- },
- "highlight": {
- "fields": {
- "name": {
- "require_field_match": "false"
- }
- }
- }
- }

其他查询官方文档
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。