一口气看完es(中)

此系列博客分为上中下3篇:上篇是关于es的概念和对数据的增删改操作,中篇是对数据的查询、对搜索结果进行处理操作,下篇是介绍怎么在Java代码中调用和操作es。
这篇我们讲讲es中的几种查询和对搜索结果进行处理。

基本概念

1、查询所有

get /student/_search
{
	"query": {
		"match_all": {}
	}
}

2、全文检索查询

先利用分词器对用户输入内容分词,然后去倒排索引库中匹配。有2种:单字段查询match、多字段查询multi_match。

// match
get /student/_search
{
	"query": {
		"match": {
			"name": "text"
		}
	}
}

//multi_match
get /student/_search
{
	"query": {
		"multi_match": {
			"query": "text",
			"fields": ["name", "fatherName"]
		}
	}
}

3、精确查询

不会对用户输入的内容进行分词。分为2种:

  • term查询:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段
  • range查询:根据数值范围查询,可以是数值、日期的范围
//term查询
get /student/_search
{
	"query": {
		"term": {
			"studentName": {
				"value": "小明"
			}
		}
	}
}

//range查询
get /student/_search
{
	"query": {
		"range": {
			"age": {
				"gte": 10,
				"lte": 20
			}
		}
	}
}

4、地理坐标查询

比如要搜索我附近的酒店、我附近的网约车、我附近的人等。这个是根据经纬度来查询的。有2种:

  • geo_bounding_box:查询geo_point值落在某个矩形范围的所有文档
  • geo_distance:查询到指定中心点小于某个距离值的所有文档

获取经纬度的文档:
https://lbs.amap.com/demo/javascript-api-v2/example/map/click-to-get-lnglat

5、组合查询

将上述几种查询组合起来,分为2种:bool和function
(1)bool查询有几种逻辑关系?
must:必须匹配的条件,可以理解为“与”
should:选择性匹配的条件,可以理解为“或”
must_not:必须不匹配的条件,不参与打分
filter:必须匹配的条件,不参与打分

(2)相关性算分。elasticsearch支持对搜索结果排序,默认是根据相关度算分(_score)来排序。

对搜索结果进行处理

1、排序

可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。

2、分页

默认情况下只返回top10的数据。

3、高亮

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡夫卡的熊kfk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值