ElasticStack/Elasticsearch
[es] intervals query
닉의네임
2022. 1. 6. 16:41
반응형
사용자의 검색의도를 정교하게 반영하는(?) 결과를 제공하는 쿼리.. 라고 하는데..
확인 들어간다
POST _bulk
{"index":{"_index":"coo", "_id":"1"}}
{"name":"나이키", "weight" : 1, "boost" : 1, "description" : "나이키 상품"}
{"index":{"_index":"coo", "_id":"2"}}
{"name":"나이키 에이맥스","weight" : 1, "boost" : 1,"description" : "나이키 운동화"}
{"index":{"_index":"coo", "_id":"3"}}
{"name":"나이키 에어조던","weight" : 1, "boost" : 1,"description" : "나이키 운동화 농구화"}
{"index":{"_index":"coo", "_id":"4"}}
{"name":"나이키 에어조단","weight" : 1, "boost" : 1,"description" : "나이키 운동화 농구화"}
{"index":{"_index":"coo", "_id":"5"}}
{"name":"나이키 후드티","weight" : 1, "boost" : 1,"description" : "나이키 의류"}
{"index":{"_index":"coo", "_id":"6"}}
{"name":"나이키 후드집업", "weight" : 1, "boost" : 1,"description" : "나이키 의류 자켓"}
{"index":{"_index":"coo", "_id":"7"}}
{"name":"나이키 후드나시티","weight" : 1, "boost" : 1,"description" : "나이키 의류 속옷"}
{"index":{"_index":"coo", "_id":"8"}}
{"name":"나이키 후드점퍼","weight" : 1, "boost" : 1,"description" : "나이키 의류 자켓"}
{"index":{"_index":"coo", "_id":"9"}}
{"name":"나이키 후드트레이닝","weight" : 1, "boost" : 1,"description" : "나이키 의류"}
{"index":{"_index":"coo", "_id":"10"}}
{"name":"나이키 트레이닝","weight" : 1, "boost" : 1,"description" : "나이키 의류 트레이닝"}
POST coo/_search
{
"query": {
"intervals" : {
"name" : {
"all_of" : {
"ordered" : true,
"intervals" : [
{
"match" : {
"query" : "나이키",
"max_gaps" : 0, // 검색어 토큰 사이의 허용 거리 범위 설정 ( 문서 검색 및 가중치 계산에 영향을 준다.
"ordered" : true // 검색어 토큰 순서가 동일한 문서만 찾을 경우 true로 설정 (기본: false)
}
},
{
"any_of" : {
"intervals" : [
{ "match" : { "query" : "에어조던" } },
{ "match" : { "query" : "후드점퍼" } }
]
}
}
]
}
}
}
}
}
Matching Rule을 원하는 대로 지정할 수 있는 것을 확인할 수 있다.
1. "all_of" 룰(Rule)을 통해서 "match" 룰과 "any_of" 룰이 전부 충족
2. "ordered": true를 지정해서 첫 번째 룰과 두 번째 룰은 꼭 순서대로 매칭
filter 를 추가해서 조건을 정교하게 추가할 수 있다.
음.. 음..
intervals 랑 bool 쿼리랑 비슷한거 같은데..
이런게 있다고 함..
반응형