본문 바로가기

목록이 없습니다.

[elastic search] 결과 내 검색

Server/Elastic Search
    반응형

    Elastic Search(엘라스틱서치)를 이번 프로젝트에서 처음으로 접해봤는데 그 속도가 어마어마하게 느껴졌습니다. 검색 기능을 RDB에서 구현을 하자니 속도가 너무 느리고 속도를 높이려고 인덱스를 걸자니 LIKE문을 양쪽에 '%'를 붙이니 인덱스도 안걸리고 .. 뭔가 제한적임을 느꼈습니다. 그러다가 해결방안으로 엘라스틱서치를 탑재한 서버를 따로 구성하고 그 서버에 접근해서 검색을 하도록 하자는 방안이었습니다. REST API처럼 검색 서버를 만드는 것이죠. 또한 페이지 내에서 결과 내 검색 기능이 필요 했는데 RDB에선 간단하게 구현이 가능했지만 낯선 Elastic Search 문법에서 조금 헤매었습니다.






    Elastic Search 결과 내 검색


    "query": {
      "query_string": {
        "query": "*keyword1*",
        "fields": ["field1", "field2", ...]
      }
    },
    "post_filter": {
      "query_string": {
        "query": "*keyword2*",
        "fields": ["field1", "field2", ...]
      }
    }


    query_string 안에 query에 설정된 값중에 앞 뒤로 *이 붙어있는데 이게 바로 MySQL의 LIKE '%' 문자와 같은 기능입니다. 호칭은 wildcard라고 불리는데 기능으로 보면 똑같습니다. query_string의 fields값으로 탐색하고자 하는 컬럼들을 배열에 담아서 설정해줍니다. 최상단의 query는 처음에 수행될 검색 쿼리이고 post_filter는 처음 수행된 결과 안에서 다시 한번 탐색하는 것을 설정해줍니다. fields는 똑같이 설정해주고 검색할 키워드만 바꿔주면 결과 내 검색이 완성됩니다. 답은 쉽지만 답을 이끌어내는 것까지는 삽질을 좀 했습니다 :)


    저와 같은 삽질을 조금 하시면 좋을 거 같아서 올려봅니다.

    ( ※ 혹시나,, 더 좋은 방법이 있다면 댓글로 남겨주세요! )

    반응형