Elasticsearch Query DSL
풀 텍스트 쿼리 - Full Text Query
인덱스를 하나 생성해서 테스트 데이터를 넣는다.
PUT sport_3
GET sport_3/_search
POST sport_3/_bulk
{"index":{"_id":1}}
{"message":"soccer is good"}
{"index":{"_id":2}}
{"message":"soccer is good and great"}
{"index":{"_id":3}}
{"message":"soccer is very good and great"}
{"index":{"_id":4}}
{"message":"soccer and baseball"}
{"index":{"_id":5}}
{"message":"baseball and basketball"}
match_all
match_all은 별다른 조건 없이 해당 인덱스의 모든 도큐먼트를 검색하는 쿼리이다.
검색시 쿼리를 넣지 않으면 elasticsearch는 자동으로 match_all을 적용해서 해당 인덱스의 모든 도큐먼트를 검색한다.
명령어
GET sport_3/_search
결과
match
match 쿼리는 풀 텍스트 검색에 가장 일반적인 쿼리이다.
sport_3 의 인덱스의 message 필드에 soccer가 포함되는 문서를 찾아보겠다.
명령어
GET sport_3/_search
{
"query" : {
"match" : {
"message" : "baseball"
}
}
}
결과
match 검색에 여러 개의 검색어를 집어넣게 되면 디폴트로 OR 조건으로 검색이 된다.
명령어
GET sport_3/_search
{
"query" : {
"match" : {
"message" : "baseball soccer"
}
}
}
결과
검색 조건이 OR가 아닌 AND로 바꾸려면 operator 옵션을 사용할 수 있다.
이때는 문법이 바뀐다.
<필드명>:<검색어>
=>
<필드명>: { "query":<검색어>, "operator": }
명령어
GET sport_3/_search
{
"query" : {
"match" : {
"message" : {
"query" : "soccer baseball",
"operator": "and"
}
}
}
}
결과
match_phrase
찾는 구문을 공백을 포함해서 정확히 일치하는 내용을 검색할때 사용한다.
match_phrase 쿼리는 입력된 검색어를 순서까지 고려하여 검색을 수행한다.
명령어
GET sport_3/_search
{
"query" : {
"match_phrase": {
"message" : "good and great"
}
}
}
결과
match_phrase 쿼리는 slop 이라는 옵션을 이용하여 slop 에 지정된 값 만큼 단어 사이에 다른 검색어가 끼어드는 것을 허용할 수 있다.
명령어
GET sport_3/_search
{
"query" : {
"match_phrase": {
"message" : {
"query" : "soccer great",
"slop": 3
}
}
}
}
결과
query_string
url검색에 사용하는 검색문법을 본문 검색에 이용하고 싶을 때 query_string 쿼리를 사용할 수 있다.
message 필드에서 baseball , basketball 을 모두 포함하거나 is good 구문을 포함하는 도큐먼트를 검색해본다.
명령어
GET sport_3/_search
{
"query" : {
"query_string": {
"default_field": "message",
"query": "(basketball AND baseball) OR \"is good\""
}
}
}
결과
Reference
https://esbook.kimjmin.net/05-search/5.1-query-dsl