반응형
용어 쿼리
용어 쿼리는 완벽하게 매칭되는 단어 혹은 문구를 가져온다. match 쿼리와는 다르게 문장에 대한 full-text-match 검색이기 때문에 문장 전체를 알고 있어야 한다.
기존 review 인덱스에서 review 데이터가 text 타입으로 되어 있어 term 쿼리가 작동하지 않는 문제가 있었다. 그래서 새롭게 인덱스를 구성하였다.
"mappings": {
"properties": {
"prd_id": {
"type": "text"
},
"review_id": {
"type": "text"
},
"review": {
"type": "text",
"fields": {
"full": {
"type": "keyword"
},
// nori 필터를 시도했지만 실패하였다.. 다음에 다시!
"nori_mixed": {
"type": "text",
"analyzer": "nori_analyzer",
"search_analyzer": "standard"
}
}
},
"genders": {
"type": "rank_features"
}
}
}
이번 인덱스에서는 review 하위에 fields 를 생성하였다. 그리고 keyword 타입으로 필드 상세 내용을 정의하였다.
Elastic search 공식 문서 - https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html
Term 쿼리 예시
GET review_nlp/_search
{
"query":{
"term": {
"review.keyword": {
"value": "맨투맨 뭐살지 고민하신다면 이 맨투맨 추천드려요"
}
}
}
}
여러 필드에 쿼리 요청하기
검색하고자 하는 용어나 구절이 정확히 어떤 필드에 있는지 모르는 경우가 있을 때 사용한다.
인덱스 구성
"properties": {
"prd_id": {
"type": "text"
},
"title": {
"type": "text"
},
"url": {
"type": "text"
},
"brand": {
"type": "text"
},
"hashtag": {
"type": "text"
},
"category1": {
"type": "text"
},
"category2": {
"type": "text"
}
}
쿼리 검색
GET product/_search
{
"query": {
"multi_match": {
"query": "맨투맨",
"fields": [
"title",
"hashtag"
]
}
}
}
제목 및 해시태그 필드에 관련 키워드를 검색한다.
원리는 “맨투맨”이라는 용어를 매치 쿼리로 검색하여 각 필드별 스코어를 구하고 그중 가장 큰 값을 대표 스코어로 계산한다.
또한 와일드카드를 사용하여 여러 필드에 대한 검색이 가능하다.
// category1, category2에 대해 검색
GET product/_search
{
"query": {
"multi_match": {
"query": "맨투맨",
"fields": [
"category*"
]
}
}
}
반응형
'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 스터디-3편 필드 가중치, 논리 쿼리, 패턴 검색 (2) | 2022.02.03 |
[Elastic Search] Query 스터디-1편 Match, Match Phrase (0) | 2022.01.27 |