elastic search and or condition

2781 단어 ESES


그림의 쿼리는 어느 index에 text가 샌프란시코과 머신 러닝이라는 텍스트를 포함하는 doc 을 찾는다.

그럼 ('샌프란시스코' 또는 '베이 지역') AND ('머신 러닝' 또는 '데이터 분석')과 일치하는 항목을 찾으려면 어떻게 해야 할까?


must 는 and 연산자이고 should 는 or 연산자이다.
따라서

                    {'match': {'text': 'san francisco'}},
                    {'match': {'text': 'bay area'}}

는 or 연산자로 묶여 있고 A or B 가 된다

                    {'match': {'text': 'machine learning'}},
                    {'match': {'text': 'data analysis'}}

는 역시 or 연산자로 묶여 있고 C or D 가 된다

그리고 이 것들이 must 즉 And 연산자로 묶여 있으므로
(A or B) and (C or D) 가 된다.

POST my_index/_bulk
{"index":{"_id":1}}
{"message":"tong power arms muscle", "name": "lee jungrae", "title": "coke is ten dollor!!", "sex": "male"}
{"index":{"_id":2}}
{"message":"The quick brown fox jumps over the lazy dog", "name": "park jinjoo", "title": "melon998", "sex": "male"}
{"index":{"_id":3}}
{"message":"The asian guy Knife", "name": "kim hejeong", "title": "school is nono", "sex": "male"}
{"index":{"_id":4}}
{"message":"cookie icecream", "name": "han taeseong", "title": "dogdogdog", "sex": "female"}
{"index":{"_id":5}}
{"message":"Good jumping man", "name": "cha yonghee", "title": "cute...??", "sex": "male"}

DELETE my_index
GET my_index/_search
GET my_index/_search
{
"query": {
"bool": {
"should": [
{
"bool" : {
"must" : [
{"match_phrase": {"message": "tong power"}}
]
}
},
{
"bool" : {
"must" : [
{"match_phrase": {"title": "melon998"}}
]
}
}
]
}
}
}

GET my_index/_search
{
"query": {
"bool": {
"filter": [
{
"match": {
"sex": "male"
}
},
{
"bool": {
"should": [
{
"bool" : {
"must" : [
{"match_phrase": {"message": "tong power"}}
]
}
},
{
"bool" : {
"must" : [
{"match_phrase": {"title": "melon998"}}
]
}
}
]
}
}
]
}
}
}

참조 : https://hdmetor.github.io/how-to-combine-queries-in-es/

좋은 웹페이지 즐겨찾기