Rumah > Artikel > pembangunan bahagian belakang > Gunakan Elasticsearch dalam bahasa Go untuk mencapai carian yang cekap
Dengan kemunculan era data besar, penyimpanan dan pengambilan data telah menjadi isu penting yang kami hadapi. Elasticsearch ialah enjin carian dan analisis masa nyata teragih sumber terbuka Ia boleh mencari sejumlah besar data melalui pengindeksan terbalik yang pantas, dan menyediakan carian teks penuh, analisis agregat, pemantauan masa nyata, penyiapan automatik dan visualisasi data amalan, Ia mempunyai pelbagai aplikasi dalam senario aplikasi. Pada masa yang sama, sebagai bahasa pengaturcaraan yang pantas dan ditaip secara statik, bahasa Go juga digunakan secara meluas dalam pembangunan perkhidmatan bahagian belakang. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Elasticsearch dalam bahasa Go untuk melaksanakan fungsi carian yang cekap.
1. Pasang perpustakaan Elasticsearch dan Go
Mula-mula, kita perlu memasang Elasticsearch dan perpustakaan Go yang sepadan untuk melaksanakan sokongan Go untuk klien Elasticsearch. Untuk pemasangan Elasticsearch, anda boleh pergi ke laman web rasmi Elasticsearch (https://www.elastic.co/downloads/elasticsearch) untuk memuat turun versi pakej pemasangan yang sepadan dan memasangnya mengikut sistem pengendalian dan kaedah pemasangan .
Seterusnya, kita perlu menambah perpustakaan klien Elasticsearch pada persekitaran Go. Dalam Go, terdapat banyak perpustakaan pihak ketiga yang menyokong pembangunan pengaturcaraan kami menggunakan klien Elasticsearch. Antaranya, perpustakaan yang lebih biasa ialah:
Di sini kami memilih Elastik. Dalam Go, anda boleh menggunakan arahan berikut untuk memasang pustaka klien Elasticsearch:
go get -u gopkg.in/olivere/elastic.v5
2 kepada Elasticsearch Anda perlu menentukan IP dan nombor port pelayan Elasticsearch Secara lalai, nombor port Elasticsearch ialah 9200. Anda boleh menyambung melalui kaedah berikut:
elastic.SetURL("http://127.0.0.1:9200"), elastic.SetSniff(false),)
if err != nil {
// do something...}Apabila mencipta klien Elasticsearch, anda juga boleh membuat beberapa tetapan tersuai, seperti kod berikut : klien, err := elastic.NewClient(
elastic.SetURL("http://127.0.0.1:9200"), elastic.SetSniff(false), elastic.SetHealthcheck(true), elastic.SetGzip(true), elastic.SetErrorLog(log.New(os.Stderr, "ELASTIC ", log.LstdFlags)), elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags)), elastic.SetTraceLog(log.New(ioutil.Discard, "", 0)),)Antaranya, untuk tetapan menyambung ke Elasticsearch, kami telah membuat konfigurasi berikut:
Index("users"). Query(query). Do(context.Background())
// do something...
fmt.Printf("Query took %d milisaat
", result.TookInMillis)
Antaranya, kami menggunakan pakej anjal The Kaedah NewMatcQuery() untuk mencipta pertanyaan padanan tepat, medan pertanyaan ialah nama dan syarat pertanyaan ialah "John". Apabila melaksanakan pertanyaan, kami menetapkan indeks pertanyaan kepada pengguna dan menentukan kaedah pertanyaan Di sini kami menggunakan client.Search() untuk melaksanakan operasi pertanyaan. Akhir sekali, kami menggunakan kaedah result.TookInMillis untuk mendapatkan masa yang digunakan oleh pertanyaan.
Dalam penggunaan sebenar, kita perlu melaksanakan fungsi pertanyaan yang lebih kompleks, seperti pertanyaan julat, pertanyaan kabur, pengisihan, dsb. Elasticsearch menyokong keupayaan ini melalui Query DSL (Query Domain Specific Language). Berikut ialah beberapa contoh pertanyaan biasa:
Pertanyaan teks penuh
pertanyaan := elastic.NewMatchQuery("content", "Elasticsearch")
Pertanyaan padanan berbilang syarat
elastic.NewMatchQuery("content", "Elasticsearch"), elastic.NewRangeQuery("age").Gt("20"),
Pertanyaan kabur
Fuzziness(2). PrefixLength(1)
Isih
Index("users"). Query(boolQuery). SortBy(sort). Do(context.Background())
Sudah tentu, dalam penggunaan sebenar, kami akan menggunakan kaedah pertanyaan yang lebih kompleks dan fleksibel untuk mendapatkan data yang kami perlukan.
Pertanyaan halaman
searchResult, err := client.Search().
Index("users"). Query(boolQuery). From(0).Size(10). Do(context.Background())
Where, From ( ) kaedah digunakan untuk menetapkan kedudukan permulaan pertanyaan, dan kaedah Saiz() digunakan untuk menetapkan bilangan item data yang dikembalikan.
ageAggs := elastic.NewTermsAggregation().Field("age")
searchResult, err := client.Search().
Index("users"). Query(boolQuery). Aggregation("age_group", ageAggs). Do(context.Background())
其中,我们使用了 Elastic 中的 NewTermsAggregation() 方法和 Aggregation() 方法来创建聚合查询。在这个示例中,我们以 "age" 字段作为聚合查询的依据。
六、总结
在本文中,我们介绍了如何在 Go 语言中使用 Elasticsearch 构建一个高效的搜索系统。从连接 Elasticsearch 开始,我们讲解了基础查询、进阶查询、分页和聚合查询等多种查询方式,以及如何使用 Elasticsearch 去提高我们的搜索效率,并给出了部分示例代码。通过阅读本文,您应该可以对 Go 和 Elasticsearch 之间的集成有一个更加深入的理解,应用于实际项目开发中去构建高效的搜索系统。
Atas ialah kandungan terperinci Gunakan Elasticsearch dalam bahasa Go untuk mencapai carian yang cekap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!