필드와 멀티 필드
전문 검색의 경우 검색과 동시에 정렬이 필요한 경우도 있다.
이럴 경우 단일 필드 입력에 여러 하위 필드를 정의하여 사용한다.
필드
- Elasticsearch의 문서는 여러 개의 필드(field)로 구성된다.
- 각 필드는 특정한 데이터 타입을 가진다. 예를 들면,
string
,integer
,date
등이 있다. - 매핑(mapping)에서는 각 필드의 데이터 타입, 분석 방법 등을 정의한다.
{
"properties": {
"title": {
"type": "text"
}
}
}
멀티 필드 (Multi-field)
- 멀티 필드는 하나의 필드를 여러 방식으로 인덱싱하려고 할 때 사용된다.
- 예를 들어, 텍스트 필드가 있을 때, 한 번은 원본 텍스트로, 다른 한 번은 키워드로 인덱싱하고 싶다면 멀티 필드를 사용한다.
- 주로 원본 텍스트 검색과 정확한 값 매치 두 가지 방식으로 검색을 원할 때 유용하다.위 예제에서
title
필드는text
타입으로 매핑되며, 동시에title.keyword
로 키워드 타입으로도 인덱싱된다.
{
"properties": {
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
이런 방식으로, 멀티 필드를 활용하면 동일한 데이터에 대해 다양한 검색 전략을 적용할 수 있다.
예제
PUT multifield_index/_doc/1
{
"message" : "1 docs",
"contents": "hi there."
}
PUT multifield_index/_doc/2
{
"message" : "2 docs",
"contents": "hi there my name."
}
PUT multifield_index/_doc/3
{
"message" : "3 docs",
"contents": "hi there my name is shin"
}
PUT multifield_index/_doc/4
{
"message" : "3 docs for aggs",
"contents": "hi there my name is shin"
}
//이렇게 3개의 도큐먼트를 넣고, match로 멀티 필드 검색을 실행해보자.
//3개의 결과가 검출된다.
GET multifield_index/_search
{
"query": {
"match": {
"contents": "hi"
}
}
}
//이 뒤에 추가로 필드를 달아 참조할 수도 있다.
//여기서 keyword는 사용자가 지정한 명칭이다. abc 같은걸 써도 되지만, 통상적인 사용은 keyword이다.
GET multifield_index/_search
{
"query": {
"match": {
"contents.keyword": "hi there."
}
}
}
//집계 함수 예시
GET multifield_index/_search
{
"size": 0,
"aggs": {
"contents" : {
"terms" : {
"field" : "contents.keyword"
}
}
}
}
인덱스 템플릿
인덱스 템플릿(Index Template)은 Elasticsearch에서 사용되는 기능으로, 새로운 인덱스를 생성할 때 적용될 설정과 매핑을 미리 정의해둔 템플릿을 의미한다.
주로 동일한 설정의 복수 인덱스를 생성할 때 사용한다.
//조회
GET _index_template
//인덱스 템플릿 생성
PUT _index_template/test_template
{
"index_patterns": ["test_*"],
"priority": 1,
"template": {
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"name": {"type": "text"},
"age": {"type": "short"},
"gender": {"type": "keyword"}
}
}
}
}
//해당 템플릿에 맞는 인덱스 생성
PUT test_index1/_doc/1
{
"name": "kim",
"age": 10,
"gender": "male"
}
'프로젝트 > 여행지 오픈 API' 카테고리의 다른 글
[ElasticSearch] 6. 검색 : 컨텍스트와 쿼리, 유사도 (0) | 2023.10.25 |
---|---|
[ElasticSearch] 5. 분석기(Analyzer)와 토크나이저, 필터 (1) | 2023.10.24 |
[ElasticSearch] 3. 벌크 데이터와 매핑, 데이터 타입과 문자열 처리 (0) | 2023.10.24 |
[ElasticSearch] 2. 다이나믹 매핑, 도큐먼트 CRUD (0) | 2023.10.24 |
[개발]셀레니움을 사용한 스크래핑 구현 (0) | 2023.10.24 |