ElasticSearch 7.x使用Kibana调用Search API

查看分词器

POST _analyze
{
  "analyzer": "standard",
  "text":"默认分词器"
}

analyzer :分词器类型
text :分词内容

QueryString查询

GET /dangdang/_search?q=*&sort=price:desc&size=5&from=5&_source=name,price

sort 字段 排序,默认升序,desc 降序
size 查询条数
from 从第几条开始, size 加 from 可以实现分页查询
_source 查询文档中的指定字段,多个字段逗号隔开

QueryDSL查询

GET /dangdang/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "name": {
        "order": "desc"
      }
    },
    {
      "price": {
        "order": "desc"
      }
    }
  ],
  "size": 5,
  "from": 5
  , "_source": ["name","price"]
}

match_all 匹配所有文档,默认返回十条文档
sort 字段 排序
size 查询条数
from 从第几条开始, size 加 from 可以实现分页查询
_source 查询文档中的指定字段,多个字段逗号隔开

关键字查询(TERM查询)

GET /dangdang/_search
{
  "query": {
    "term": {
      "字段名称": {
        "value": "搜索条件"
      }
    }
  }
}

示例:

GET /dangdang/_search
{
  "query": {
    "term": {
      "name": {
        "value": "think in java"
      }
    }
  }
}

1.字段类型为text类型存储时会分词,只有text类型会分词
2.ES中默认使用strandard标准分词器进行分词,对英文进行单词分词,对中文进行单字分词

范围查询(range)

{
	"query": {
		"range": {
			"字段名称": {
				"gte": 10,
				"lte": 20
			}
		}
	}
}

示例:

POST /dangdang/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

gte 大于等于,gt 大于
lte 小于等于,lt 小于

前缀查询(prefix)

{
	"query": {
		"prefix": {
			"字段名称": {
				"value":"搜索条件"
			}
		}
	}
}

示例:

POST /dangdang/_search
{
  "query": {
    "prefix": {
      "des": {
        "value": "好"
      }
    }
  }
}

通配符查询(wildcard)

{
	"query": {
		"wildcard": {
			"字段名称": {
				"value": "搜索条件"
			}
		}
	}
}

示例:

POST /dangdang/_search
{
  "query": {
    "wildcard":{
      "des":{
        "value": "好*"
      }
    }
  }
}

一个 ? 只能匹配一个任意字符
[*] 匹配0到任意个

多id查询

{
	"query": {
		"ids": {
			"values": ["_id", "_id", "_id"]
		}
	}
}

示例:

POST /dangdang/_search
{
  "query": {
    "ids": {
      "values": ["_pnSz3kByR1YFKCHyigv","AZkV0XkByR1YFKCHrymP"]
    }
  }
}

values 的值是每个文档的_id的值

布尔查询(bool)

{
	"query": {
		"bool": {
			"must": {
				//可以嵌套term、range、wildcard等查询
			},
			"must_not": {
				//可以嵌套term、range、wildcard等查询
			},
			"should": {
				//可以嵌套term、range、wildcard等查询
			}
		}
	}
}

示例:

POST /dangdang/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "des": {
              "value": "好"
            }
          }
        }
      ],
      "must_not": [
        {
          "range": {
            "price": {
              "gte": 10,
              "lte": 20
            }
          }
        }
      ],
      "should": [
        {
          "term": {
            "name": {
              "value": "格林"
            }
          }
        }
      ]
    }
  }
}

must 代表 &&
must_not 代表 !=
should 代表 ||
三种条件可以在查询中使用任意一种

高亮查询,对查询结果做二次渲染,不改变原始数据(highlight)

{
	"query": {
		"term": {
			"field": {
				"value": "测"
			}
		}
	},
	"highlight": {
		"fields": {
			"*": {}
		},
		"pre_tags": ["<span style='color:red'>"],
		"post_tags": ["</span>"]
	}
}

示例:

POST /dangdang/_search
{
  "query": {
    "term": {
      "des": {
        "value": "测"
      }
    }
  },
  "highlight": {
    "fields": {
      "des": {},
      "name": {}
    },
    "pre_tags": ["<span style='color:red'>"],
    "post_tags": ["</span>"]
  }
}
POST /dangdang/_search
{
  "query": {
    "term": {
      "des": {
        "value": "测"
      }
    }
  },
  "highlight": {
    "fields": {
      "*": {}
    },
    "pre_tags": ["<span style='color:red'>"],
    "post_tags": ["</span>"]
  }
}

[*] 代表所有字段都要高亮显示,也可以把 * 改为某个字段名,只让某个字段或某几个字段高亮显示
pre_tags 高亮显示的前缀
post_tags 高亮显示的后缀

多字段查询(mulit_match)

{
	"query": {
		"multi_match":{
			"query": "redis",
			"fields": ["字段名称", "字段名称", ...]
		}
	}
}

示例:

POST /dangdang/_search
{
  "query": {
    "multi_match": {
      "query": "测试",
      "fields": ["des"]
    }
  }
}

1.如果搜索的字段分词,会对query进行先分词,后搜索
2.如果搜索的字段不分词,会直接使用query整体进行该字段搜索

多字段查询,指定分词器(query_string)

{
	"query": {
		"query_string": {
			"query": "redis",
			"fields": ["字段名称", ...],
			"analyzer": "分词器"
		}
	}
}

示例:

POST /dangdang/_search
{
  "query": {
    "query_string": {
      
      "query": "格林测",
      "analyzer": "ik_max_word",
      "fields": ["des"]
    }
  }
}

过滤查询(Filter Query)

POST /dangdang/_search
{
  "query": {
    "bool": {
      "must": [
        //查询条件
      ],
      "filter": {
        //查询条件
      }
    }
  }
}

示例:

POST /dangdang/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "name": {
              "value": "think in java"
            }
          } 
        }
      ],
      "filter": {
        "term": {
          "des": "好"
        }
      }
    }
  }
}

GET /dangdang/_search
{
  "query": {
    "bool": {
      "must": [
        {"match_all": {}}
      ],
      "filter": [
        {
          "terms": {
            "des": [
              "好"
            ]
          }
        },
        {
          "range": {
            "price": {
              "gte": 10,
              "lte": 100
            }
          }
        },
        {
          "exists": {
            "field": "des"
          }
        }
      ]
    }
  }
}

在执行filter query和query时,先执行filter再执行query。
must和filter里的条件可以自由搭配

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值