elasticsearch入门(三)高级查询(上)

系列:
ubuntu安装elasticsearch
基本用法
高级查询【上】
高级查询【下】
与springboot整合
整合mysql和thymeleaf

子条件查询(特定字段查询所指特定值):

Query_context:

在查询过程中,除了判断文档是否满足查询条件外,ES还会计算一个_score来表示匹配的程度,意在判断目标文档和查询条件匹配有多好。
常用查询:
①全文本查询:针对文本类型数据
②字段级别查询:针对结构化数据,如数字、日期等

全文本查询

1、模糊查询:

{
	"query":{
		"match":{
			"name":"秦"  //只输入了文档中的一个字,然后可以模糊匹配到所有结果
		}
	}
}
"hits": {
        "total": 1,
        "max_score": 0.6099695,   //查询结果的匹配度
        "hits": [
            {
                "_index": "people",
                "_type": "man",
                "_id": "4",
                "_score": 0.6099695,
                "_source": {
                    "name": "秦旭洋",
                    "country": "印度",
                    "age": 21,
                    "birth": "1995-12-12"
                }
            }
        ]
    }

2、其余匹配
比如我的索引中有这些数据:
elasticsearch入门(三)高级查询(上)
使用其余匹配搜索“熊义杰在哪“,只会显示“熊义杰在哪”一个结果

{
	"query":{
		"match_phrase":{  //这个是指其余匹配
			"name":"熊义杰"
		}
	}
}

elasticsearch入门(三)高级查询(上)
3、多个字段匹配查询

{
	"query":{
		"multi_match":{
			"query":"熊义杰",
			"fields":["name","country"] //查询nam和country中有“熊义杰”的结果
		}
	}
}

elasticsearch入门(三)高级查询(上)

字段级别查询

查询age为19的结果:

{
	"query":{
		"term":{  //指定具体的项目
			"age":19
		}
	}
}

范围查询(数字):

{
	"query":{
		"range":{
			"age":{
				"gte":19,  //大于等于19
				"lte":22 //小于等于22
			}
		}
	}
}

范围查询(时间):

{
	"query":{
		"range":{
			"birth":{
				"gte":"1999-12-08",  //大于等于这个日期
				"lte":"now" //小于等于现在的日期
			}
		}
	}
}
filter查询
{
	"query":{
		"bool":{
			"filter":{
				"term":{
					"age":19  //只过滤出age=19的数据,且filter可以缓存数据,较快
				}
			}
		}
	}
}