Written by
최태열
on
on
Elastic Search Query
Multi match
여러 개의 field를 대상으로 검색
Term
텍스트 형태의 값 검색 유형 중 하나
match: 텍스트, 숫자, 날짜등이 포함된 문장의 형태소 분석을 통해 term으로 분리한 후 검색
match vs term : match -> 토크나이징 함, term -> 토크나이징 안함
GET movie_search/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"repGenreNm": {
"value": "코미디"
}
}
},
{
"match": {
"repNationNm": "한국"
}
}
],
"must_not": [
{"match": {
"typeNm": "단편"
}}
]
}
}
}
Prefix
value 로 시작하는 document 검색
GET movie_search/_search
{
"query": {
"prefix": {
"movieNm": {
"value": "살아남은"
}
}
}
}
Wildcard
*를 활용한 표현 가능
GET movie_search/_search
{
"query": {
"wildcard": {
"movieNm": {
"value": "*밀*"
}
}
}
}
Bool
Bool 복합 쿼리
여러 조건을 조합하기에 용이
must : 검색 결과가 참인 검색
must_not : 검색 결과가 거짓인 검색
GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"message": "pink"
}
}
],
"must_not": [
{
"match": {
"message": "red"
}
}
]
}
}
}
Should
검색 우선순위 조절하는 하는 방법
# "pink blue" 이 형식의 구문이 포함된 doc에게 더 높은 점수 배정하기
GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"message": "pink blue"
}
}
],
"should": [
{
"match_phrase": {
"message": "pink blue"
}
}
]
}
}
}
Range
gte[greater than or equal : 이상]
gt[greater than] - 초과
lte[Less than or equal] - 이하
lt[less than] - 미만
# age 20 이상 30 이하
GET account/_search
{
"query": {
"range": {
"age": {
"gte": 20,
"lte": 30
}
}
}
}
# balance가 40000이상
GET account/_search
{
"query": {
"range": {
"balance": {
"gte": 40000
}
}
}
}
Filter
filter
filter에 해당하는 document들만 가져와서 조건에 맞게 실행
장점 : 일괄 관리, score에는 영향을 주지 않음
GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"message": "Chrome"
}
}
],
"filter": [
{
"bool": {
"must_not":[
{
"match" : {
"message": "하늘사"
}
**}
]
}
}
]
}
}
}
GET movie_search/_search
{
"query": {
"multi_match": {
"query": "가족",
"fields": ["movieNm", "movieNmEn"]
}
}
}
Discussion and feedback