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" 필드에서 모두 매칭된다면 해당 문서는 더 높은 검색 스코어를 받게 됩니다.

 

 

 

엘라스틱 서치 가이드북

- https://esbook.kimjmin.net/

 

Elastic 가이드 북 - Elastic 가이드북

7. 인덱스 설정과 매핑 - Settings & Mappings

esbook.kimjmin.net

 

728x90