DSL Query基本语法

DSL Query基本语法

查询的基本语法如下:

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

查询所有

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

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

GET /indexName/_search
{
	"query":{
		"match":{
		"FIELD":"TEXT"
		}
	}
}
GET /hotel/_search
{
  "query": {
    "match": {
      "all": "上海"
    }
  }
}

multi_match:与match查询类似,只不过允许同时查询多个字段,语法:

GET /indexName/_search
{
	"query":{
		"multi_match":{
		"query":"TEXT",
		"fields":["FIELD1","FIELD12"]
		}
	}
}
GET /hotel/_search
{
  "query": {
    "multi_match": {
      "query": "外摊如家",
      "fields": ["brand","name","business"]
    }
  }
}

在brand、name、business中包括【外滩、如家、外滩如家】的都会被查询到

精确查询

精确查询一般是查找keyword、数值、日期、boolean等类型字段。所以不会对搜索条件分词。常见的有:

  • term:根据词条精确值查询
  • range:根据值的范围查询

term查询

GET /indexName/_search
{
	"query":{
		"term":{
			"FIELD":{
				"value":"VALUE"
			}
		}
	}
}
GET /hotel/_search
{
  "query": {
    "term": {
      "city": {
        "value": "上海"
      }
    }
  }
}

range查询

GET /indexName/_search
{
	"query":{
		"range":{
			"FIELD":{
				"gte":10,
				"lte":20
			}
		}
	}
}

查询价格大于等于100,小于等于150的酒店

GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 100,
        "lte": 150
      }
    }
  }
}

地理查询

根据经纬度查询。常见的常见常见包括:

  • 搜索最近的酒店
  • 搜索最近的出租车
  • 搜索附近的人

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

GET /indexName/_search
{
	"query":{
		"geo_bounding_box":{
			"FIELD":{
				"top_left":{
					"lat":31.1,
					"lon":121.5
				},
				"bottom_right":{
					"lat":30.9,
					"lon":121.7
				}
			}
		}
	}
}

通过top_leftbottom_right来标注两个点。一个左上,一个右下,然后根据这两个点画一个矩形,所有在这个矩形范围内的坐标都会被搜索出来。

geo_distance:查询到指定中心点小于某个距离值的所有文档

GET /hotel/_search
{
  "query": {
    "geo_distance": {
      "distance": "15km",
      "location": "31.21, 121.5"
    }
  }
}

复合查询

复合(compound)查询:复合查询可以将其它简单查询组合起来,实现更加复杂的搜索逻辑

  • function score:算分函数查询,可以控制文档相关性算法,控制文档排名,例如百度竞价。

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

给如家这个品牌的酒店排名靠前一些要怎么做?

  • 哪些文档需要算分加权?

品牌brand为如家的酒店

  • 算分函数是什么?

weight就可以

  • 加权模式是什么?

求和

GET /hotel/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "all": "外滩"
        }
      },
      "functions": [
        {
          "filter": {
            "term": {
              "brand": "如家"
            }
          },
          "weight": 5
        }
      ],
      "boost_mode": "sum"
    }
  }
}

Boolean Query

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

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

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
            }
          }
        }
      ]
    }
  }
}
  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值