参考:https://www.jianshu.com/p/b2c0192e6267
举例:初始化数据
PUT mmm/_doc/1
{
"name": "北京",
"ct": "2022-08-01"
}
PUT mmm/_doc/2
{
"name": "上海",
"ct": "2022-08-10"
}
PUT mmm/_doc/3
{
"name": "广州",
"ct": "2022-08-20"
}
must和should同时存在同一层时,由于should只为打分使用,minimum_should_match默认是0,所以实际上should是不生效的,有两种解决办法,
- 同一层加上minimum_should_match = 1,如
GET /mmm/_search
{
"query": {
"bool": {
"must": [
{
"range": {
"ct": {
"gte": "2022-08-09"
}
}
}
],
"should": [
{
"term": {
"name.keyword": {
"value": "北京"
}
}
},
{
"term": {
"name.keyword": {
"value": "上海"
}
}
}
],
"minimum_should_match": 1
}
}
}
- 将should外面再套一层bool,如:
GET /mmm/_search
{
"query": {
"bool": {
"must": [
{
"range": {
"ct": {
"gte": "2022-08-09"
}
}
},
{
"bool": {
"should": [
{
"term": {
"name.keyword": {
"value": "北京"
}
}
},
{
"term": {
"name.keyword": {
"value": "上海"
}
}
}
]
}
}
]
}
}
}
term, terms查询
term:select * from xxx where id = ?
terms: select * from xxx where id = ? or id = ? or id = ?,也相当于select * from xxx where id in (?, ?, ?)