ABOUT ME

-

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

     

     

     

    엘라스틱 서치 가이드북

    - https://esbook.kimjmin.net/

     

    Elastic 가이드 북 - Elastic 가이드북

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

    esbook.kimjmin.net

     

    728x90
Designed by Tistory.