Bu konu, PHP, Python, Java ve Go istemcilerini kullanarak bir Alibaba Cloud Elasticsearch kümesine bağlanmak için örnek kodlar ve önemli notlar sunar.
Önkoşullar
Bir Alibaba Cloud Elasticsearch kümesi oluşturun. Daha fazla bilgi için bkz. Alibaba Cloud Elasticsearch kümesi oluşturma.
-
Tercih ettiğiniz programlama dili için Elasticsearch istemcisini yükleyin.
Uyumluluk sorunlarını önlemek amacıyla Elasticsearch sürümünüzle eşleşen bir istemci sürümü kullanın. Elasticsearch ile istemciler arasındaki sürüm uyumluluğu hakkında daha fazla bilgi için bkz. Uyumluluk.
-
Elasticsearch Go istemcisi: Elasticsearch Go Client.
NotGo kullanarak bir Alibaba Cloud Elasticsearch kümesine bağlanmadan önce bir Go derleme ortamı kurun. Daha fazla bilgi için bkz. The Go Programming Language. Bu konudaki örneklerde Go 1.19.1 kullanılmıştır.
-
Elasticsearch Java istemcisi: Elasticsearch Java API Client.
NotJava istemci türleri arasında Transport Client, Low Level REST Client, High Level REST Client ve Java API Client bulunur. Her bir tür için örnek kodlar hakkında bilgi edinmek için bkz. Java API. Bu konuda örnek olarak High Level REST Client V6.7 kullanılmıştır.
Java Transport Client, bir Elasticsearch kümesiyle TCP üzerinden iletişim kurar. İstemci farklı sürümlere sahip Elasticsearch kümeleriyle iletişim kurduğunda uyumluluk sorunları ortaya çıkabilir. Bu nedenle, Transport Client sonraki sürümlerde kullanımdan kaldırılmıştır. Bir Elasticsearch V5.5 veya V5.6 kümesine bağlanmak için Transport Client V5.5 veya V5.6 kullanırsanız NoNodeAvailableException hatası oluşabilir. Sürüm uyumluluğunu sağlamak amacıyla Elasticsearch kümesine bağlanırken Transport Client V5.3.3 veya Java Low Level REST Client kullanın.
-
Elasticsearch PHP istemcisi: Elasticsearch PHP Client.
NotElasticsearch PHP istemcisinin sunduğu varsayılan bağlantı havuzu bulut ortamları için uygun değildir. Alibaba Cloud Elasticsearch yük dengeli bir alan adı hizmeti sağlar. Bu nedenle, PHP uygulamanızın bağlantı havuzu olarak SimpleConnectionPool kullanması gerekir. Aksi takdirde, Alibaba Cloud Elasticsearch kümeniz yeniden başlatıldığında bağlantı hataları oluşabilir. Uygulamanın ayrıca bir yeniden bağlanma mekanizması uygulaması gerekir. SimpleConnectionPool kullanılsa bile, kümeniz yeniden başlatıldığında "No enabled connection" gibi bağlantı hataları yine de oluşabilir.
Elasticsearch Python istemcisi: Elasticsearch Python Client.
Diğer Elasticsearch istemcileri hakkında daha fazla bilgi için bkz. Elasticsearch Clients.
-
Elasticsearch kümeniz için Otomatik Dizin Oluşturma özelliğini etkinleştirin. Daha fazla bilgi için bkz. YML parametrelerini yapılandırma.
-
Ağ bağlantısını sağlamak amacıyla Alibaba Cloud Elasticsearch kümesi için bir izin listesi yapılandırın.
Kodunuzun çalıştığı sunucu ile Alibaba Cloud Elasticsearch kümesi aynı Virtual Private Cloud (VPC) içinde yer alıyorsa, kümenin iç uç noktasını kullanarak bağlanın. Bağlantı kurmadan önce sunucunun özel IP adresini VPC'nin özel IP adresi izin listesine (varsayılan: 0.0.0.0/0) ekleyin.
-
Kodunuzun çalıştığı sunucu genel ağdaysa, kümenin genel uç noktasını kullanarak bağlanın. Genel uç noktayı etkinleştirin ve sunucunun genel IP adresini Alibaba Cloud Elasticsearch kümesinin genel IP adresi izin listesine ekleyin. Daha fazla bilgi için bkz. Elasticsearch kümesi için genel veya özel IP adresi izin listesi yapılandırma.
ÖnemliWi-Fi veya geniş bant ağı üzerinden bağlanıyorsanız, genel IP adresinizi izin listesine ekleyin.
İzin listesini 0.0.0.0/0 olarak ayarlayarak tüm IPv4 adreslerinin Elasticsearch kümesine erişmesine izin verebilirsiniz. Bu yapılandırma, kümeyi genel ağa açar ve güvenlik risklerini artırır. Bu ayarı yalnızca ilgili riskleri anlıyor ve kabul ediyorsanız kullanın.
İzin listesi yapılandırılmamışsa veya yanlış yapılandırılmışsa
connection timeouthatası oluşur.Kibana düğümlerine bir istemciden erişmek için Kibana için de bir izin listesi yapılandırmanız gerekir. Daha fazla bilgi için bkz. Kibana kullanarak kümeye bağlanma.
Örnek kod
Aşağıdaki örnekler, yaygın istemciler kullanılarak bir Alibaba Cloud Elasticsearch kümesine nasıl bağlanılacağını göstermektedir.
// This example uses Go 1.19.1.
package main
import (
"log"
"github.com/elastic/go-elasticsearch/v7"
)
func main() {
cfg := elasticsearch.Config {
Addresses: []string{
"<YourEsHost>",
},
Username: "<UserName>",
Password: "<YourPassword>",
}
es, err := elasticsearch.NewClient(cfg)
if err != nil {
log.Fatalf("Error creating the client: %s", err)
}
res, err := es.Info()
if err != nil {
log.Fatalf("Error getting response: %s", err)
}
defer res.Body.Close()
log.Println(res)
}// This example uses High Level REST Client V6.7.
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class RestClientTest67 {
private static final RequestOptions COMMON_OPTIONS;
static {
RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
// The default cache limit is 100 MB. This example changes the value to 30 MB.
builder.setHttpAsyncResponseConsumerFactory(
new HttpAsyncResponseConsumerFactory
.HeapBufferedResponseConsumerFactory(30 * 1024 * 1024));
COMMON_OPTIONS = builder.build();
}
public static void main(String[] args) {
// Alibaba Cloud Elasticsearch clusters require basic authentication.
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
// Use the username and password that you configured when you created the Alibaba Cloud Elasticsearch cluster. They are also the logon credentials for the Kibana console.
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("<UserName>", "<YourPassword>"));
// Use a builder to create a REST client and configure the HttpClientConfigCallback of the HTTP client.
// To obtain the cluster endpoint, click the ID of your Elasticsearch cluster and go to the Basic Information page.
RestClientBuilder builder = RestClient.builder(new HttpHost("<YourEsHost>", 9200, "http"))
.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
});
// A RestHighLevelClient instance is built using a REST low-level client builder.
RestHighLevelClient highClient = new RestHighLevelClient(builder);
try {
// Create a request.
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("<YourEsField1>", "<YourEsFieldValue1>");
jsonMap.put("<YourEsField2>", "<YourEsFieldValue2>");
IndexRequest indexRequest = new IndexRequest("<YourEsIndex>", "<YourEsType>", "<YourEsId>").source(jsonMap);
// Synchronously execute the request and use custom request options (COMMON_OPTIONS).
IndexResponse indexResponse = highClient.index(indexRequest, COMMON_OPTIONS);
long version = indexResponse.getVersion();
System.out.println("Index document successfully! " + version);
highClient.close();
} catch (IOException ioException) {
// Handle exceptions.
}
}
}<?php
require 'vendor/autoload.php';
use Elasticsearch\ClientBuilder;
$client = ClientBuilder::create()->setHosts([
[
'host' => '<YourEsHost>',
'port' => '9200',
'scheme' => 'http',
'user' => '<UserName>',
'pass' => '<YourPassword>'
]
])->setConnectionPool('\Elasticsearch\ConnectionPool\SimpleConnectionPool', [])
->setRetries(10)->build();
$indexParams = [
'index' => '<YourEsIndex>',
'type' => '<YourEsType>',
'id' => '<YourEsId>',
'body' => ['<YourEsField>' => '<YourEsFieldValue>'],
'client' => [
'timeout' => 10,
'connect_timeout' => 10
]
];
$indexResponse = $client->index($indexParams);
print_r($indexResponse);
$searchParams = [
'index' => '<YourEsIndex>',
'type' => '<YourEsType>',
'body' => [
'query' => [
'match' => [
'<YourEsField>' => '<YourEsFieldValue>'
]
]
],
'client' => [
'timeout' => 10,
'connect_timeout' => 10
]
];
$searchResponse = $client->search($searchParams);
print_r($searchResponse);
?>from elasticsearch import Elasticsearch, RequestsHttpConnection
import certifi
es = Elasticsearch(
['<YourEsHost>'],
http_auth=('<UserName>', '<YourPassword>'),
port=9200,
use_ssl=False
)
res = es.index(index="<YourEsIndex>", doc_type="<YourEsType>", id=<YourEsId>, body={"<YourEsField1>": "<YourEsFieldValue1>", "<YourEsField2>": "<YourEsFieldValue2>"})
res = es.get(index="<YourEsIndex>", doc_type="<YourEsType>", id=<YourEsId>)
print(res['_source'])Elasticsearch kümeniz HTTPS protokolünü kullanıyorsa use_ssl değerini True olarak ayarlayın ve verify_certs=True ekleyin.
es = Elasticsearch(
['<YourEsHost>'],
http_auth=('<UserName>', '<YourPassword>'),
port=9200,
use_ssl=True,
verify_certs=True
)
Örnek kodu kullanırken aşağıdaki yer tutucuları gerçek değerleriyle değiştirin.
|
Parametre |
Açıklama |
|
<YourEsHost> |
Alibaba Cloud Elasticsearch kümesinin iç veya genel uç noktası. Uç nokta, küme veya uygulamanızın Temel Bilgiler sayfasında mevcuttur. |
|
<UserName> |
Alibaba Cloud Elasticsearch kümesinin kullanıcı adı |
|
<YourPassword> |
Alibaba Cloud Elasticsearch kümesi kullanıcısının parolası. Parolanızı unutursanız sıfırlayabilirsiniz. Bir Alibaba Cloud Elasticsearch kümesi için bu seçenek, küme ayrıntıları sayfasının Güvenlik sayfasındadır. Daha fazla bilgi için bkz. Elasticsearch kümesi için erişim parolasını sıfırlama. |
|
<YourEsIndex> |
Dizin adı. |
|
<YourEsType> |
Belge türü. Önemli
7.0'dan önceki Elasticsearch sürümlerinde belge türü özelleştirilebiliyordu. Elasticsearch 7.0 ve sonraki sürümlerde belge türü |
|
<YourEsId> |
Belge kimliği. |
|
<YourEsField> |
Alan adı. |
|
<YourEsFieldValue> |
Belirtilen alan için değer. |