>  기사  >  백엔드 개발  >  Go 언어로 Elasticsearch를 쿼리하는 방법에 대한 지식을 이야기해 보겠습니다.

Go 언어로 Elasticsearch를 쿼리하는 방법에 대한 지식을 이야기해 보겠습니다.

PHPz
PHPz원래의
2023-04-10 14:18:45934검색

Elasticsearch는 다양한 검색 및 데이터 분석 시나리오에서 널리 사용되는 오픈 소스 분산 검색 엔진입니다. 동시에 Go 언어는 효율적이고 편리한 프로그래밍 언어로서 점점 더 많은 개발자들에게 사랑받고 사용되고 있습니다. Elasticsearch의 고성능 쿼리 및 데이터 분석 기능을 위해 Go는 편리한 쿼리 라이브러리와 프레임워크도 제공합니다. 이 글에서는 Elasticsearch 쿼리를 더 잘 구현하는 데 도움이 되도록 Go 언어로 Elasticsearch 쿼리와 관련된 지식을 자세히 소개합니다.

1. Go 언어 라이브러리 소개

Go 언어에는 이미 성숙한 Elasticsearch 쿼리 라이브러리가 있으며 각각의 특성에 따라 간략하게 소개하겠습니다.

  1. go-elasticsearch

go-elasticsearch는 Elasticsearch가 공식적으로 출시하고 Go 언어로 구현된 Elasticsearch 클라이언트입니다. 여기에는 Elasticsearch의 쿼리 및 분석 기능도 포함되어 있습니다. 특히 Elasticsearch 7.x 버전 이후에는 go-elasticsearch가 Elasticsearch에서 공식적으로 권장하는 Go 언어 라이브러리가 되었습니다. go-elasticsearch는 여러 운영 체제 플랫폼에서 실행될 수 있으며 이미 Elasticsearch 6.x 및 7.x 버전을 지원합니다. 구체적인 사용법은 공식 문서를 참고하세요.

  1. go-es

go-es는 Xiaomi에서 오픈소스로 제공하는 Elasticsearch Go 클라이언트로, 단순성, 사용 편의성 및 포괄적인 기능으로 인해 국내 대규모 인터넷에서 가장 널리 사용되는 Elasticsearch 클라이언트 라이브러리 중 하나가 되었습니다. 회사. go-es 라이브러리의 다양한 쿼리 API의 매개변수 디자인은 간단하고 명확하며 구문이 Elasticsearch의 쿼리 구문과 매우 유사하므로 Elasticsearch 쿼리 DSL을 직접 사용하여 쿼리할 수 있습니다. 이 라이브러리의 자세한 사용법은 Github 저장소를 참조하세요.

  1. kingim/goes

goes는 간단하고 사용하기 쉬운 Elasticsearch Go 클라이언트 라이브러리입니다. 기본 Elasticsearch 작업의 학습 비용을 크게 줄이고 인터페이스와 객체 사용을 모두 지원합니다. 쿼리 및 분석 기능 외에도 Going은 두 경도와 위도 사이의 거리 및 각도 값 계산을 지원하는 간단한 지리 좌표 계산 라이브러리도 제공합니다. kingim/goes의 자세한 사용법은 Github 저장소를 참고하세요.

  1. olivere/elastic

olivere/elastic은 Elasticsearch용 Go 클라이언트 라이브러리입니다. go-elasticsearch 및 go-es와 유사하게 둘 다 Elasticsearch에 매우 편리한 쿼리 API를 제공합니다. 그러나 Olivere/elastic은 쿼리 결과의 직렬화 및 역직렬화에 더 많은 주의를 기울이고 여러 출력 형식(예: Json, Xml 등)의 캡슐화 및 필터링을 지원하며 프런트엔드 및 백엔드와 같은 시나리오에 적합합니다. 결과 상호 작용. 자세한 사용법 세부정보는 Olivere/elastic Github 저장소를 확인하세요.

2. Query Elasticsearch

Go 언어에서는 Elasticsearch Go 클라이언트 라이브러리를 통해 Elasticsearch 관련 쿼리, 검색, 분석 작업을 쉽게 수행할 수 있습니다. 인터페이스 호출 관점에서 각 라이브러리를 사용하는 방법에는 약간의 차이가 있지만 기본적인 쿼리 기능, 구문, 로직은 유사합니다. 아래에는 Go에서 Elasticsearch를 쿼리하는 방법을 소개하는 몇 가지 예가 나와 있습니다.

  1. 모든 문서 조회

es 공식 문서에서는 다음 방법을 권장합니다.

    Package main
    import (
        "context"
        "fmt"

        "github.com/elastic/go-elasticsearch/v7"
        "github.com/elastic/go-elasticsearch/v7/esapi"
        "github.com/elastic/go-elasticsearch/v7/esutil"
    )

    func main() {
        es, _ := elasticsearch.NewDefaultClient()
        req := esapi.SearchRequest{
            Body:     esutil.NewJSONReader(map[string]interface{}{"query": map[string]interface{}{"match_all": map[string]interface{}{}}}),
            Index:    []string{"my-index-000001"},
            TrackTotalHits: true,
        }
        res, err := req.Do(context.Background(), es)
        fmt.Println(res, err)
    }
  1. 특정 단어가 포함된 문서 조회

     q := elastic.NewTermQuery("content", "hello")
     searchResult, err := client.Search().
         Index("twitter").
         Query(q).
         Do(ctx)
     if err != nil {
         log.Fatalln(err)
     }
  2. 특정 범위 내의 문서 조회

     terms := []string{"world", "how", "are", "you"}
     q1 := elastic.NewTermsQuery("content", terms...)
     q2 := elastic.NewRangeQuery("publish_time").Gte("2021-01-01").Lte("2021-02-01")
     query := elastic.NewBoolQuery().Must(q1).Filter(q2)
     searchResult, err := client.Search().
         Index("twitter").
         Query(query).
         From(0).Size(10).
         Do(ctx)
     if err != nil {
         log.Fatalln(err)
     }
  3. 집계 함수를 사용하여 분류 달성 통계

     agg := elastic.NewTermsAggregation().Field("category").Size(10000)
     query := elastic.NewMatchAllQuery()
     searchResult, err := client.Search().Index("goods").Size(0).Query(query).Aggregation("by_category", agg).Do(ctx)
     if err != nil {
         log.Fatalln(err)
     }
     bucketDateHists := searchResult.Aggregations.Terms("by_category")
     for _, bucket := range bucketDateHists.Buckets {
         fmt.Printf("%v: %d\n", bucket.Key, int(bucket.DocCount))
     }

3. 요약

위의 소개를 통해 Go 언어에서 제공하는 Elasticsearch 쿼리 라이브러리가 매우 풍부하고, 운영이 매우 간단하고 효율적이라는 것을 알 수 있습니다. 데이터 검색이든 데이터 분석이든 Go 언어는 중요한 역할을 할 수 있습니다. 물론, Elasticsearch나 Go 언어 관련 지식을 더 깊이 이해하고 싶다면 더 많은 공식 문서와 소스 코드를 읽어 이해와 지식을 심화하는 것이 좋습니다.

위 내용은 Go 언어로 Elasticsearch를 쿼리하는 방법에 대한 지식을 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.