ES 쿼리문 연습

개발새발·2021년 10월 24일
0

elasticsearch

목록 보기
3/54

내가 원한 조건 1)

코딩 진행 방식 : request 로 각 필드값을 받아옴 → es가 원하는 query문 형식으로 변환 → es로 request → es가 준 response 받기 → 원하는 형태로 response 가공후 제공

조건 : blue, swashbucklers 가 모두 들어가있는 데이터 중에 카테고리가 male_goods 이고, 카테고리가 male_goods 이거나 journey인 데이터를 찾고자 했다.

"query" => [
            "bool" => [
                   "filter" => [
                        //searchKeywords
                        [
                            "query_string" => [
                                "query" => "(blue) AND (swashbucklers)"
                            ]
                        ],
												[
		                        "bool" => [
		                            "must" => [
		                                    "match" => [
		                                        "cdn_category" => "(MALE_GOODS)"
		                                    ]
		                                ]
		                            ]
												],
                        // other fields
                        [
                            "bool" => [
                                "should" => [
                                    ["match" => [
                                        "cdn_category" => "(MALE_GOODS)"
                                    ]],
                                    ["match" => [
                                        "cdn_category" => "(JOURNEY)"
                                    ]],
                                ]
                            ]
                        ]

                    ]

                ]
            ]

코드정리가 이쁘게 잘 안나오긴 하지만 대충 이렇게 했을 때 내가 원한 값이 나왔다.

query_string은 말그대로 쿼리스트링으로 그냥 조건값을 말한다.

es에서 bool은 filter, should, must 등을 묶어주는 역할을 한다.

filter와 must는 rdb에서 말하는 and 조건과 같은데, 다른 점은 filter는 가중치 점수를 체크하지 않는다는 점이다. 그렇기 때문에 must보다 빠른 속도를 낼 수 있다.

should는 rdb에서 말하는 or조건과 같다.

match는 처음에 terms도 해보고 일반 query_string으로도 해봤는데, 검색을 해보니 이 두개보다는 match 를 더 권장하고 있었다. query_string의 경우 and, or 과 같은 연산자 오류가 많이 나기 때문이였다. term의 경우 형태소분석기에 의해 쪼개진 토큰들을 기반으로 동작한다. 때문에 질의문과 저장된 토큰의 형태소가 정확하게 일치하는 문장을 찾는다. (https://brownbears.tistory.com/462 여기 terms 부분을 읽어보면 이해가 빠르다.)

이제 request로 온 데이터들을 저 형태로 잡아줘야한다.

profile
발새발개

0개의 댓글