Elasticsearch
[Elasticsearch] 엘라스틱 서치 데이터 검색(search)
다콩잉
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