본문 바로가기

Side Project

[Elasticsearch] 2-1. 검색과 쿼리 - Query DSL (Full text query)

[Prerequsite]

# my_index 인덱스에 벌크로 데이터 입력

 

1. Kibana 접속: http://localhost:5601/

2. 좌측 Navigation Bar > Management > Dev Tools 

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"}

 

* Kibana에서 벌크로 데이터 입력한 결과

 

 

[Full text query Excercise]

 

1. match_all (조건 없이 인덱스에 해당되는 도큐먼트 모두 검색)

GET my_index/_search

 

2. match (AND, OR 조건에 해당되는 도큐먼트 검색)

 

 1) "dog"가 포함된 도큐먼트 검색

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

 

 2) OR 조건 (quick이나 dog 둘중 하나가 들어가는 도큐먼트 검색)

#match 쿼리 OR 조건으로 quick || dog 검색
#quick 이랑 dog가 들어가는 도큐먼트 검색

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

 

 3) AND 조건 (quick과 dog 둘다 포함되는 도큐먼트 검색)

#match 쿼리 AND 조건으로 quick dog 검색
#quick 이랑 dog가 들어가는 도큐먼트 검색

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

 

 

3. match_phrase (공백을 포함해 정확히 일치하는 내용을 검색)

 

 1) 조건 없이 검색 : lazy dog 단어를 포함하는 도큐먼트만 검색

#match_phrase 쿼리로 "lazy dog" 구문 검색
GET my_index/_search
{
  "query": {
    "match_phrase": {
      "message": "lazy dog"
    }
  }
}

 

 2) Slop 1 : lazy dog, lazy something dog

#match_phrase 쿼리에 slop:1 로 "lazy dog" 구문 검색
#lazy와dog 사이에 jumping이 있는 "Lazy jumping dog" 도큐먼트도 검색

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

 

 

4.query_string (URL검색에 사용하는 문법을 본문 검색에 이용하고 싶을 때 query_string 쿼리 사용)

 

 1) URL검색에 사용하는 루씬의 검색 문법

GET test/_search?q=(jumping AND lazy) OR quick dog

 

 2) query_string 쿼리 사용 ( 위 검색과 동일한 결과 출력 )

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

 * \"quick dog\"" : match_phrase 처럼 구문 검색을 할 때는 검색할 구문을 쌍따옴표 \"를 넣는다.

 

 

 

 

 

 

Reference : esbook.kimjmin.net/05-search/5.1-query-dsl

'Side Project' 카테고리의 다른 글

[Microk8s] Installation & Dashboard  (0) 2021.01.07
[Elasticsearch] 1. Build Environment(Elasticsearch, Kibana)  (0) 2020.11.24
[GCP] MySQL 환경 구축  (1) 2020.02.13
[GCP] 서버 환경 구축  (0) 2020.02.13