一、简单查询
一、查询所有结果
GET /student_info/_search
{
"query": {"match_all": {}}
}
二、根据条件查询
GET /student_info/_search
{
"query":{
"match":{
"name":"张三"
}
}
}
三、排序
GET /student_info/_search
{
"query":{
"match":{
"name":"张三"
}
},
"sort":[{
"age":"desc"
}]
}
四、指定查询返回结果字段
GET /student_info/_search
{
"query":{"match_all": {}},
"_source": ["name","age"]
}
二、批量查询
一、多ID查询
GET /student_info/_search
{
"query":{
"ids":{
"values":[11001,11002,11003]
}
}
}
二、单索引批量查询
POST /student_info/_mget
{
"ids":["11001","11002","11003"]
}
三、跨索引批量查询
GET /_mget
{
"docs":[
{
"_index":"student_info",
"_id":"11001"
},
{
"_index":"teacher",
"_id":"1001"
}
]
}
四、跨索引批量查询
GET /_msearch
{"index":"student_info"}
{"query":{"match_all":{}},"from":0,"size":4}
{"index":"teacher"}
{"query":{"match_all":{}}}
三、匹配查询
一、关键词分词查询
先对match里面的字段值进行分词,然后进行查询
“profession”: “计算机技术” :分词结果为 “计算机”、 “技术”,查询profession包含 "计算机"和 "技术"的记录
GET /student_info/_search
{
"query":{
"match":{
"profession":"计算机技术"
}
}
}
GET /student_info/_search
{
"query":{
"match":{
"profession":"计算机酒店"
}
}
}
二、关联查询
“profession”: “计算机技术” :分词结果为 “计算机”、 “技术”,查询条件"operator": “and”,必须满足全部分词结果。
GET /student_info/_search
{
"query":{
"match":{
"profession": {
"query":"计算机技术",
"operator": "and"
}
}
}
}
“profession”: “计算机技术” :分词结果为 “计算机”、 “技术”,查询条件"operator": “or”,任意满足其一。
GET /student_info/_search
{
"query": {
"match":{
"profession": {
"query": "计算机酒店",
"operator": "or"
}
}
}
}
三、多字段查询
检索内容"我计算机技术" , 会拆词为“我”,“计算机”,“技术”匹配字段profession或desc字段中包含拆出来的词语的结果
GET /student_info/_search
{
"query":{
"multi_match": {
"query": "我计算机技术",
"fields": ["profession","desc"]
}
}
}
四、短语查询
match_phrase短语搜索,要求所有的分词必须同时出现在文档中,同时位置必须紧邻一致。
GET /student_info/_search
{
"query": {
"match_phrase": {
"profession": "计算机科"
}
}
}
五、高亮搜索
GET /student_info/_search
{
"query":{
"match":{
"name":"张三"
}
},
"highlight": {
"pre_tags":"<p class = \"text_high_light\">",
"post_tags": "</p>",
"fields": {
"name":{}
}
}
}
六、前缀匹配
GET /student_info/_search
{
"query": {
"match_phrase_prefix": {
"name":"小小"
}
}
}
四、模糊查询
GET /student_info/_search
{
"query":{
"fuzzy":{
"name":"张"
}
}
}
五、精确查询
term是关键词查询,参数类型type 一般都是是keyword , 精确查询,对查询的值不分词,直接进倒排索引去匹配。
term 精确查找(单个) terms 精确查找(多个)
GET /student_info/_search
{
"query":{
"term":{
"name.keyword": "张三"
}
}
}
terms表示多条件并列,用大括号 [ ] 涵盖所查内容,类似于MySql中in方法
GET /student_info/_search
{
"query": {
"terms":{
"age":[19,20,21,22]
}
}
}
六、范围查询
一、range
大于-gt,小于-lt,大于等于-gte,小于等于-lte
GET /student_info/_search
{
"query": {
"range":{
"age":{
"gte":19,
"lte":21
}
}
}
}
GET /student_info/_search
{
"query": {
"range":{
"birthday": {
"gte": "2001-06-15",
"lte": "2001-09-20"
}
}
}
}
二、from…to
GET /student_info/_search
{
"query":{
"range":{
"age":{
"from":19,
"to":21
}
}
}
}
GET /student_info/_search
{
"query": {
"range":{
"age":{
"from":19,
"to":21,
"include_lower":false,
"include_upper":false
}
}
}
}
七、通配符查询
注:?用来匹配任意字符,*用来匹配零个或者多个字符,主要用于-英文检索
GET /student_info/_search
{
"query":{
"wildcard":{
"english_name": "xiaoxiao*"
}
}
}
GET /student_info/_search
{
"query":{
"wildcard": {
"english_name": "li?i"
}
}
}
八、must查询
-
must的多条件都必须满足 -
must相当于MySQL条件中的AND
GET /student_info/_search
{
"query":{
"bool":{
"must":[{
"match":{
"name":"小小"
}
},
{
"range":{
"age":{
"gt":19,
"lte":22
}
}
}
]
}
}
}
九、should查询
- should的条件,至少满足一个就可以
- should相当于MySQL条件中的OR
GET /student_info/_search
{
"query":{
"bool":{
"should":[{
"match":{
"name":"小小"
}
},
{
"range":{
"age":{
"gt":19,
"lte":22
}
}
}]
}
}
}
十、过滤查询
GET /student_info/_search
{
"query":{
"bool":{
"should":[
{
"match":{
"name":"小小"
}
}],
"filter":{
"range":{
"age":{
"gt":21,
"lte":22
}
}
}
}
}
}
|