필드에 가중치 두기
특정 필드에 가중치를 두는 방법을 사용 - 부스팅 기법. 즉 검색하는 여러 필드 중 중요한 필드를 알고 있다면 그 필드에 가중치를 두어 더 상위로 검색 결과를 올리는 방법
GET product/_search
{
"query": {
"multi_match": {
"query": "맨투맨",
"fields": [
"category2",
"title^2"
]
}
}
}
특정 필드에 가중치를 줘서 특정 필드의 스코어 값을 N배 해주는 효과를 준다. 위 쿼리에서는 title 필드에 2배의 효과를 주었다. 즉 title 필드에서 검색한 결과 스코어에 2배의 효과를 주어 검색 결과를 상위로 올렸다.
논리 쿼리
논리 쿼리는 복합 쿼리로, match, multi_math, match_phrase 등을 조합하여 사용할 수 있다.
Must 타입 - 쿼리를 실행하여 참인 도큐먼트를 찾는다. 복수의 쿼리를 사용하면 And 의 효과
Must Not 타입 - 쿼리를 실행하여 거짓인 도큐먼트를 찾는다. 다른 타입과 같이 사용할 경우 도큐먼트에서 제외한다.
Should 타입 - 단독으로 사용 시 쿼리를 실행하여 참인 도큐먼트를 찾는다. 복수의 쿼리를 실행하면 OR 연산. 다른 타입과 같이 사용할 경우 스코어에만 활용된다.
filter - 쿼리를 실행하여 bool 형태의 필터 검색을 수행한다.
위 조합을 사용하여 쿼리를 한번 만들어보면 다음과 같다.
조건
여성의 리뷰를 찾는다. “오버핏” 또는 “마음(마음에 들어요 등)”이라는 키워드가 포함된 리뷰이면서 “여자친구”라는 단어는 포함하지 않는다(여자친구가 사줬어요, 여자친구에게 사줬어요 등 남성이 작성하는 문구는 제외). 또한 성별 예측값에서 여성 성별값은 2배 부스팅 한다. 그리고 예측 값에서 여성의 값이 0.5 이상(여성일 확률이 50%가 넘는)인 리뷰만 가져온다.
GET review/_search
{
"query": {
"bool": {
// 오버핏 이라는 단어와 마음이라는 단어가 포함되어야 한다.
"must": [
{"match": {"review": "오버핏 마음"}}
],
// 여자친구 라는 단어는 포함되지 않아야 한다.
"must_not": [
{"match": {"review": "여자친구"}}
]
// gender 예측 값에서 여성 값에 부스트를 적용
, "should": [
{
"rank_feature": {"field": "genders.female", "boost": 2}
}
],
// gender 예측 값에서 0.5 이상, 즉 여성이 작성한 리뷰일 가능성이 높은 리뷰만 필터링
"filter": {
"range": {
"gender.female": {
"gte": 0.5
}
}
}
}
}
}
패턴 검색
와일드카드 쿼리
와일드카드 검색 시에 ‘*’ , ‘?’ 라는 두 가지 기호를 사용할 수 있다.
‘*’ 는 공백까지 포함하여 글자 수에 상관없이 모든 문자를 매칭할 수 있고, ‘?’는 오직 한 문자만 매칭할 수 있다.
검색하려는 용어 맨 앞에 ‘*’, ‘?’를 사용하면 속도가 매우 느려진다.
정규식 쿼리
엘라스틱 서치 쿼리에서 정규식을 사용해 데이터를 조회할 수 있다.
GET review_pos/_search
{
"query": {
"regexp": {
"review.nori_noun": "맨투."
}
}
}
🔥 패턴 검색으로 원하는 내용을 검색할 수 있다. 하지만 일반적인 쿼리보다는 속도가 느리다. 실제 서비스에서 사용은 어려울 듯 하다.
'Elastic Search' 카테고리의 다른 글
[Elastic Search] MBTI 검색 프로젝트 - 1. 검색 Score 튜닝 (0) | 2022.04.12 |
---|---|
[Elastic Search] 검색 구현하기(with Fast API) (0) | 2022.02.15 |
[Elastic Search] Nori Tokenizer & Filter 적용기 (0) | 2022.02.09 |
[Elastic Search]Query 스터디-2편 Term 쿼리, Multi-match 쿼리 (0) | 2022.01.29 |
[Elastic Search] Query 스터디-1편 Match, Match Phrase (0) | 2022.01.27 |