Elasticsearch는 다양한 검색 및 데이터 분석 시나리오에서 널리 사용되는 오픈 소스 분산 검색 엔진입니다. 동시에 Go 언어는 효율적이고 편리한 프로그래밍 언어로서 점점 더 많은 개발자들에게 사랑받고 사용되고 있습니다. Elasticsearch의 고성능 쿼리 및 데이터 분석 기능을 위해 Go는 편리한 쿼리 라이브러리와 프레임워크도 제공합니다. 이 글에서는 Elasticsearch 쿼리를 더 잘 구현하는 데 도움이 되도록 Go 언어로 Elasticsearch 쿼리와 관련된 지식을 자세히 소개합니다.
1. Go 언어 라이브러리 소개
Go 언어에는 이미 성숙한 Elasticsearch 쿼리 라이브러리가 있으며 각각의 특성에 따라 간략하게 소개하겠습니다.
go-elasticsearch는 Elasticsearch가 공식적으로 출시하고 Go 언어로 구현된 Elasticsearch 클라이언트입니다. 여기에는 Elasticsearch의 쿼리 및 분석 기능도 포함되어 있습니다. 특히 Elasticsearch 7.x 버전 이후에는 go-elasticsearch가 Elasticsearch에서 공식적으로 권장하는 Go 언어 라이브러리가 되었습니다. go-elasticsearch는 여러 운영 체제 플랫폼에서 실행될 수 있으며 이미 Elasticsearch 6.x 및 7.x 버전을 지원합니다. 구체적인 사용법은 공식 문서를 참고하세요.
go-es는 Xiaomi에서 오픈소스로 제공하는 Elasticsearch Go 클라이언트로, 단순성, 사용 편의성 및 포괄적인 기능으로 인해 국내 대규모 인터넷에서 가장 널리 사용되는 Elasticsearch 클라이언트 라이브러리 중 하나가 되었습니다. 회사. go-es 라이브러리의 다양한 쿼리 API의 매개변수 디자인은 간단하고 명확하며 구문이 Elasticsearch의 쿼리 구문과 매우 유사하므로 Elasticsearch 쿼리 DSL을 직접 사용하여 쿼리할 수 있습니다. 이 라이브러리의 자세한 사용법은 Github 저장소를 참조하세요.
goes는 간단하고 사용하기 쉬운 Elasticsearch Go 클라이언트 라이브러리입니다. 기본 Elasticsearch 작업의 학습 비용을 크게 줄이고 인터페이스와 객체 사용을 모두 지원합니다. 쿼리 및 분석 기능 외에도 Going은 두 경도와 위도 사이의 거리 및 각도 값 계산을 지원하는 간단한 지리 좌표 계산 라이브러리도 제공합니다. kingim/goes의 자세한 사용법은 Github 저장소를 참고하세요.
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를 쿼리하는 방법을 소개하는 몇 가지 예가 나와 있습니다.
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) }
특정 단어가 포함된 문서 조회
q := elastic.NewTermQuery("content", "hello") searchResult, err := client.Search(). Index("twitter"). Query(q). Do(ctx) if err != nil { log.Fatalln(err) }
특정 범위 내의 문서 조회
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) }
집계 함수를 사용하여 분류 달성 통계
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!