본문 바로가기

공부방/Elasticsearch

검색과 쿼리 - Query DSL (domain specific language)

연습용 데이터 생성


my_index라는 인덱스를 연습용으로 사용해 보도록 하겠습니다.

my_index가 존재하는 경우 먼저 인덱스 삭제부터 진행하도록 하겠습니다.

 

 

DELETE my_index

 

my_index에 5개의 field를 넣어주고 각각의 field에는 message 값이 있는 데이터를 넣어줍니다.

 

POST my_index/_bulk
{"index":{"_id":1}}
{"message":"The quick brown fox"}
{"index":{"_id":2}}
{"message":"The quick brown fox jumps over the lazy dog"}
{"index":{"_id":3}}
{"message":"The quick brown fox jumps over the quick dog"}
{"index":{"_id":4}}
{"message":"Brown fox brown dog"}
{"index":{"_id":5}}
{"message":"Lazy jumping dog"}

 

 

match_all (모두 가져오기)


 

match_all 은 별다른 조건 없이 해당 인덱스의 모든 도큐먼트를 검색하는 쿼리입니다.

검색 시 쿼리를 넣지 않으면 elasticsearch는 자동으로 match_all을 적용해서 해당 인덱스의 모든 도큐먼트를 검색합니다. 

 

GET my_index/_search

 

즉 아래 커맨드와 동일한 것입니다.

 

GET my_index/_search
{
  "query": {
    "match": {
      "message": "dog"
    }
  }
}

 

match


가장 일반적으로 사용되는 query입니다.

message에 dog이 포함된 데이터를 가지고 옵니다.

 

// 4개의 결과를 return 받을 수 있습니다.
GET my_index/_search
{
  "query": {
    "match": {
      "message": "dog"
    }
  }
}

 

or 조건 (default)

 

match 검색 조건은 기본적으로 or 조건이 적용됩니다.

아래 커맨드를 사용하면 message에 quick 또는 dog 이라는 단어가 포함된 데이터를 가지고 옵니다.

 

// 5개의 결과를 return 받을 수 있습니다.
GET my_index/_search
{
  "query": {
    "match": {
      "message": "quick dog"
    }
  }
}

 

and 조건

 

검색 조건을 AND로 바꾸려면 operator 옵션을 사용하면 됩니다.

이 경우 문법이 조금 달라지는데,

<필드명>:<검색어> 형식으로 하던 것을

<필드명>: { "query":<검색어>, "operator": }

로 변경해 줘야 합니다.

 

아래 명령어는 quick과 dog라는 단어가 둘다 들어가 있는 데이터를 가지고 옵니다.

 

GET my_index/_search
{
  "query": {
    "match": {
      "message": {
        "query": "quick dog",
        "operator": "and"
      }
    }
  }
}

 

Match_pharase 

 

완전 동일한 문장을 검색합니다.

"lazy dog" 과 완전 동일한 문장이 들어간 데이터를 가지고 옵니다.

1개의 결과가 return 되는 것을 볼 수 있습니다.

 

GET my_index/_search
{
  "query": {
    "match_phrase": {
      "message": "lazy dog"
    }
  }
}

 

Match_pharase - slop

 

slop이라는 option 추가할 수 있습니다.

lazy dog 사이에 한개의 단어가 더 들어있는 경우도 같이 검색합니다.

2개의 결과가 return 되는 것을 볼 수 있습니다.

 

GET my_index/_search
{
  "query": {
    "match_phrase": {
      "message": {
        "query": "lazy dog",
        "slop": 1
      }
    }
  }
}

 

query_string

 

URL검색에 사용하는 루씬의 검색 문법을 본문 검색에 이용하고 싶을 때 query_string 쿼리를 사용할 수 있습니다.
다음은 message 필드에서 lazyjumping을 모두 포함하거나 또는 "quick dog" 구문을 포함하는 도큐먼트를 검색하는 쿼리입니다. match_phrase 처럼 구문 검색을 할 때는 검색할 구문을 쌍따옴표 \" 안에 넣습니다.

 

GET my_index/_search
{
  "query": {
    "query_string": {
      "default_field": "message",
      "query": "(jumping AND lazy) OR \"quick dog\""
    }
  }
}

 

 

'공부방 > Elasticsearch' 카테고리의 다른 글

복합 쿼리 - Bool Query  (0) 2023.05.10
정확도 - Relevancy (Score 책정)  (0) 2023.05.10
CRUD - 입력, 조회, 수정, 삭제  (0) 2023.05.10
인덱스와 샤드  (0) 2023.05.10
pm2를 이용한 데몬 실행  (0) 2023.05.09