ElasticSearch

[ElasticSearch] 특정필드 wildcard 여러개 검색하기

SongMinu 2020. 5. 12. 10:06
728x90

일레스틱서치를 계속 쓰면서 일반적으로 검색하는 경우는 대부분 다음과 같았다.

1. 1개의 필드에서 1개의 특정단어 검색

2. 1개의 필드에서 1개의 와일드카드로 단어 검색

3. 1개의 필드에서 여러개의 특정단어 검색

4. 여러개 필드에서 1개의 와일드카드로 단어 검색

 

등등 다양했는데 생각 나는게 이거밖에 없네...

 

각각 난 보통 이렇게 검색했다.

1번: term

2번: wildcard

3번: terms

4번: query_string

이게 답은 아니고 각각 또 다른 방식으로도 검색이 가능 하다. (방법은 다양)

내가 사용한 쿼리 예로는 다음과 같다.

 

1번 - 1개의 필드에서 1개의 특정단어 검색

{
    "query":{
        "term":{
            "USER_ID":"admin"
        }
    }
}

2번 - 1개의 필드에서 1개의 와일드카드로 단어 검색

{
    "query":{
        "wildcard":{
            "USER_ID":"*admin*"
        }
    }
}

3번 - 1개의 필드에서 여러개의 특정단어 검색

{
    "query":{
        "terms":{
            "USER_ID":["admin", "support"]
        }
    }
}

4번 - 여러개 필드에서 1개의 와일드카드로 단어 검색

{
    "query":{
        "query_string":{
            "fields":["USER_ID", "USER_EMAIL"],
            "query":"*admin*"
        }
    }
}

 

이렇게 쓰다보니깐  보통 1개의 검색창을 통해 여러개의 필드를 와일드카드로 검색하고 싶을 땐 떈 그냥 query - bool - must를 써서 안에다 wildcard를 필요한 만큼 선언 해서 사용 했었다.

방법은 다음과 같다.

{
  "query": {
    "bool": {
      "must": [
        {
          "wildcard": {
            "USER_ID": "*admin*"
          }
        },
        {
          "wildcard": {
            "USER_EMAIL": "*admin*"
          }
        }
      ]
    }
  }
}

근데 여러개의 와일드카드 단어로 여러개의 필드를 검색하려고 하니깐 should를 사용해야하는 등 쿼리가 길어지길래 

방법이 없을까...하고 찾아보니 있었다.

{
    "query":{
        "query_string":{
            "fields":["USER_ID", "USER_EMAIL"],
            "query":"*admin* *nct* "
        }
    }
}

query_string에서 query부분에 단어를 여러개 넣으면 될것 같긴했다.

그래서 [] 이 대괄호를 이용해서 넣어줘야하는거 아닌가하고 써봤지만 안됐는데 그냥 저렇게 넣으면 된다....

USER_ID랑 USER_EMAIL 중에 admin을 포함하거나 또는 nct가 포함된 정보를 찾아준다.

반응형