Bool 쿼리내에 여러개의 쿼리를 넣을 수 있다.
must must_not should filter
should 는 must, must_not 에 의해서 걸러진 결과에 점수를 부여함
// lazy dog 도 있어야 하고 quick도 있어야 함
GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"message": "quick"
}
},
{
"match_phrase": {
"message": "lazy dog"
}
}
]
}
}
}
// lazy dog 는 없어야 하고 quick도 있어야 함
GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"message": "quick"
}
}
],
"must_not": [
{
"match_phrase": {
"message": "lazy dog"
}
}
]
}
}
}
// should 는 검색 결과에 영향을 주지 않고 fox 를 포함하는 단어 중
// lazy 가 포함된 도큐먼트에 가중치를 준다.
GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"message": "fox"
}
}
],
"should": [
{
"match": {
"message": "lazy"
}
}
]
}
}
}
GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"message": "fox"
}
},
{
"match": {
"message": "quick"
}
}
]
}
}
}
// filter 는 점수에 영향을 주지 않는다.
// 따라서 fox만 검색 했을 때와 스코어 점수가 동일 하다.
GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"message": "fox"
}
}
],
"filter": [
{
"match": {
"message": "quick"
}
}
]
}
}
}
POST phones/_bulk
{"index":{"_id":1}}
{"model":"Samsung GalaxyS 5","price":475,"date":"2014-02-24"}
{"index":{"_id":2}}
{"model":"Samsung GalaxyS 6","price":795,"date":"2015-03-15"}
{"index":{"_id":3}}
{"model":"Samsung GalaxyS 7","price":859,"date":"2016-02-21"}
{"index":{"_id":4}}
{"model":"Samsung GalaxyS 8","price":959,"date":"2017-03-29"}
{"index":{"_id":5}}
{"model":"Samsung GalaxyS 9","price":1059,"date":"2018-02-25"}
GET phones/_search
{
"query": {
"range": {
"price": {
"gte": 700,
"lte": 900
}
}
}
}
GET phones/_search
{
"query": {
"range": {
"date": {
"gt": "2016-01-01",
"lt": "2017-01-01"
}
}
}
}