-
[Elasticsearch] 엘라스틱 서치 데이터 검색(search)Elasticsearch 2023. 4. 10. 08:45
match
- match 쿼리는 특정 필드에서 주어진 텍스트와 일치하는 문서를 반환합니다.
- 다음은 match 쿼리의 예시입니다.
{ "query": { "match": { "title": "Elasticsearch" } } }
- 위 쿼리는 title 필드에서 **"Elasticsearch"**와 일치하는 모든 문서를 반환합니다.
match_all
- match_all 쿼리는 인덱스의 모든 문서를 반환합니다. 다음은 match_all 쿼리의 예시입니다.
{ "query": { "match_all": {} } }
multi_match
- multi_match 쿼리는 여러 필드에서 동시에 일치하는 값을 찾는데 사용합니다. query 매개변수에 검색어를 입력하면, 해당 검색어를 포함하는 모든 필드에서 검색합니다.
- 이 쿼리를 사용하여 여러 필드에 걸쳐 검색어를 찾을 수 있습니다.
GET /my_index/_search { "query": { "multi_match" : { "query": "apple pie", "fields": [ "title", "desription" ] } } }
- 위의 예시에서는 **title**과 description 필드에서 "apple"과 "pie"를 모두 포함하는 결과를 찾습니다.
bool
- bool 쿼리는 다른 쿼리들을 조합하여 더 복잡한 쿼리를 작성할 때 사용됩니다. bool 쿼리는 must, must_not, should, **filter**로 구성됩니다.
- must: 조건을 만족하는 필드가 있을 경우, 해당 문서를 검색합니다.
- must_not: 조건을 만족하지 않는 문서만 검색합니다.
- should: 조건을 만족하는 필드가 있을 경우, 해당 문서를 검색합니다. must 보다 덜 중요한 조건으로 사용됩니다.
- filter: 조건을 만족하는 문서를 검색하지만, 검색 스코어에는 반영되지 않습니다.
GET /my_index/_search { "query": { "bool": { "must": [ { "match": { "title": "apple" } } ], "should": [ { "match": { "description": "pie" } } ], "must_not": [ { "match": { "description": "tart" } } ], "filter": [ { "term": { "category": "food" } } ] } } }
- 위의 예시에서는 title 필드에 "apple"이 포함되어 있으며, description 필드에는 "pie"가 포함되어 있어야 합니다. 또한 description 필드에는 "tart"가 포함되어 있으면 안됩니다. 마지막으로, category 필드가 "food"인 문서만 검색합니다.
term, terms
1. term
- 특정 필드에 정확히 일치하는 값을 검색하는 쿼리입니다.
GET /{index_name}/_search { "query": { "term": { "{field_name}": "{search_value}" } } }
- {index_name}: 검색할 인덱스의 이름
- {field_name}: 검색할 필드의 이름
- {search_value}: 검색할 값
- "title" 필드가 "Elasticsearch"인 도큐먼트를 검색하려면 다음과 같은 쿼리를 사용할 수 있습니다.
GET /my_index/_search { "query": { "term": { "title": "Elasticsearch" } } }
2. terms
- terms 쿼리는 특정 필드에서 여러 값을 검색하는 쿼리입니다.
GET /{index_name}/_search { "query": { "terms": { "{field_name}": [ "{search_value_1}", "{search_value_2}", ... ] } } }
- {index_name}: 검색할 인덱스의 이름
- {field_name}: 검색할 필드의 이름
- {search_value_1}, {search_value_2}, ...: 검색할 값들의 리스트
- "category" 필드가 "books" 또는 "movies"인 도큐먼트를 검색하려면 다음과 같은 쿼리를 사용할 수 있습니다.
GET /my_index/_search { "query": { "terms": { "category": [ "books", "movies" ] } } }
검색 스코어
- 검색 스코어를 이용하면 쿼리와 검색 결과 간의 관계를 이해하고, 검색 결과를 더욱 정확하게 필터링하고 정렬할 수 있습니다.
- 예를 들어, 검색 결과의 정확도를 높이기 위해서는 검색 쿼리의 단어와 검색 결과의 단어가 얼마나 일치하는지를 확인해야 합니다. 이때 검색 스코어를 이용하면, 검색 결과의 정확도를 높이기 위한 필터링이나 정렬을 수행할 수 있습니다.
예시
GET /my_index/_search { "query": { "match": { "title": "elasticsearch" } } }
- 위 쿼리는 "my_index" 인덱스에서 "title" 필드에서 "elasticsearch" 텍스트와 일치하는 문서를 검색합니다. 이때, 검색 결과에 따라 검색 스코어가 부여됩니다.
- 검색 스코어는 매칭되는 문서와 쿼리의 유사도, 매칭되는 필드의 중요도, 검색 쿼리에서 사용한 부울 쿼리 등 다양한 요소를 고려하여 계산됩니다.
- 예를 들어, "elasticsearch" 텍스트가 "title" 필드에서만 매칭된다면 해당 문서는 다른 필드에서 "elasticsearch"와 일치하는 값이 있더라도 검색 스코어가 낮아집니다. 반대로 "elasticsearch" 텍스트가 "title" 필드와 "description" 필드에서 모두 매칭된다면 해당 문서는 더 높은 검색 스코어를 받게 됩니다.
엘라스틱 서치 가이드북
Elastic 가이드 북 - Elastic 가이드북
7. 인덱스 설정과 매핑 - Settings & Mappings
esbook.kimjmin.net
728x90'Elasticsearch' 카테고리의 다른 글
[Elasticsearch] 엘라스틱서치 데이터 수정(update) (0) 2023.04.18 [Elasticsearch] 엘라스틱 서치 데이터 삭제(delete) (0) 2023.04.17 [Elasticsearch] 엘라스틱 서치 데이터 색인 (0) 2023.04.07 [Elasticsearch] 엘라스틱 서치 형태소 분석기 (0) 2023.04.06 [Elasticsearch] 엘라스틱 서치 인덱스 생성 (0) 2023.04.06