ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [엘라스틱 서치] Search your data - 검색 API (1)
    ElasticSearch 2024. 4. 24. 17:13

    이 시리즈에서는 엘라스틱서치 가이드(:8.13) 의 Search your data 챕터에 대해 다루고 있습니다.

    https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

     

     

    search query란 ?

    Elasticsearch에서 인덱스 데이터에 대한 정보를 요청하는 작업

     

    검색 쿼리의 종류 : 

    Search for exact values

    - 정확한 값이나 범위 검색

    Full-text search

    - 쿼리 용어와 가장 유사한/일치하는 문서 탐색

    - 비정형 텍스트 데이터를 탐색하는데 사용

    Vector search

    - ANN, kNN등을 사용하여 유사한 "의미"를 검색

     

    검색 API의 활용

    - Elasticsearch에서 저장된 데이터를 검색하거나 집계 할 수 있다.

    - 검색 기반 애플리케이션을 구축할 수 있다.

     

    Elasticsearch는 검색API 방식의 쿼리를 허용하고 있습니다.

    또한 API의 요청 본문은  Query DSL 으로 작성됩니다.

     

    API 예시

    `match` 쿼리는 특정 필드, 값을 통해 검색할 수 있게 합니다.

    GET /my-index-000001/_search
    {
      "query": {
        "match": {
          "user.id": "kimchy"
        }
      }
    }

    이 외에도 텍스트 쿼리, 복합 쿼리, 집계 등등을 활용해 다양한 통계 및 분석 결과를 얻을 수 있습니다.

     

    기본적으로 검색 요청은 time out 되지 않습니다. 일반적인 요청은 응답을 반환하기 전, 각 샤드의 결과가 완료될때까지 기다리게 됩니다.

    이와 반대로 비동기 검색은 매개변수를 사용해 각 샤드가 완료될 때까지 기다리는 기간을 지정할 수도 있습니다. 

    이 경우 Elasticsearch는 해당 시점까지 누적된 데이터만 응답합니다.

     

    총 hit 추적

    Elasticsearch7 부터는 결과 개수가 10,000개 이상일때, 정확한 개수를 얻기 위해 track_total_hits를 사용합니다. 

    쿼리에 track_total_hits라는 파라미터를 넣어 총 히트 수를 정확하게 계산할 수 있습니다. 

    true로 설정 시 : 쿼리와 정확하게 일치하는 히트수를 추적합니다.

    false : "gte" 등 디폴트 (10,000)개 보다 hit가 많은지, 적은지의 관계를 알려줍니다. 쿼리 속도의 향상을 기대할 수 있습니다.

     

    일치하는 문서의 빠른 확인

    특정 쿼리와 일치하는 문서의 정보가 아닌 해당 문서의 유무만 알고싶다면, size를 0으로 설정함으로써 빠르게 확인할 수 있습니다.
    또는 일치하는 문서를 처음 발견시 쿼리 실행이 종료되도록 terminate_after=1을 설정할 수도 있습니다.

    took : 검색하는데 걸린 시간 (단위: ms)

    {
      "took": 3, 	//응답시간(수신~반환까지)
      "timed_out": false, 	//정상 응답됨
      "terminated_early": true, //쿼리가 일찍 종료됨
      "_shards": {
        "total": 1,
        "successful": 1,
        "skipped" : 0,
        "failed": 0
      },
      "hits": {
        "total" : {
            "value": 1, //쿼리가 일찍 종료되었을 때 일치하는 문서가 적어도 0보다 많다는 의미 
            "relation": "eq"
        },
        "max_score": null, //score, hits는 size=0이므로 나타나지 않는다.
        "hits": []
      }
    }

     

Designed by Tistory.