Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用PHP GET方法,不能获取到文档内容 #1402

Closed
wangyongdong opened this issue May 20, 2024 · 4 comments
Closed

使用PHP GET方法,不能获取到文档内容 #1402

wangyongdong opened this issue May 20, 2024 · 4 comments

Comments

@wangyongdong
Copy link

wangyongdong commented May 20, 2024

Using the PHP GET method, you cannot get the content of the documentation

Code, return information, configuration file

1、Create an index document

use Elastic\Elasticsearch\ClientBuilder;
$config = App::get("config")->get('elasticsearch');
$client = ClientBuilder::create()
    ->setHosts([$config['host']])
    ->setBasicAuthentication($config['user'], $config['pass'])
    ->setSSLVerification(false)
    ->build(); // 如果使用自签名证书,则禁用验证
$params = [
    'index' => 'my_index',
    'id'    => 'my_id',
    'body'  => [ 'testField' => 'abc']
];
$response = $client->index($params);
print_r($response);

Return result:

Elastic\Elasticsearch\Response\Elasticsearch Object
(
    [response:protected] => GuzzleHttp\Psr7\Response Object
        (
            [reasonPhrase:GuzzleHttp\Psr7\Response:private] => Created
            [statusCode:GuzzleHttp\Psr7\Response:private] => 201
            [headers:GuzzleHttp\Psr7\Response:private] => Array
                (
                    [Location] => Array
                        (
                            [0] => /my_index/_doc/my_id
                        )
                    [X-elastic-product] => Array
                        (
                            [0] => Elasticsearch
                        )
                    [content-type] => Array
                        (
                            [0] => application/vnd.elasticsearch+json;compatible-with=8
                        )
                    [content-length] => Array
                        (
                            [0] => 147
                        )
                )
            [headerNames:GuzzleHttp\Psr7\Response:private] => Array
                (
                    [location] => Location
                    [x-elastic-product] => X-elastic-product
                    [content-type] => content-type
                    [content-length] => content-length
                )
            [protocol:GuzzleHttp\Psr7\Response:private] => 1.1
            [stream:GuzzleHttp\Psr7\Response:private] => GuzzleHttp\Psr7\Stream Object
                (
                    [stream:GuzzleHttp\Psr7\Stream:private] => Resource id #171
                    [size:GuzzleHttp\Psr7\Stream:private] =>
                    [seekable:GuzzleHttp\Psr7\Stream:private] => 1
                    [readable:GuzzleHttp\Psr7\Stream:private] => 1
                    [writable:GuzzleHttp\Psr7\Stream:private] => 1
                    [uri:GuzzleHttp\Psr7\Stream:private] => php://temp
                    [customMetadata:GuzzleHttp\Psr7\Stream:private] => Array
                        (
                        )
                )
        )
)

2、Get the document:

use Elastic\Elasticsearch\ClientBuilder;
$config = App::get("config")->get('elasticsearch');
$client = ClientBuilder::create()
    ->setHosts([$config['host']])
    ->setBasicAuthentication($config['user'], $config['pass'])
    ->setSSLVerification(false)
    ->build();
$params = [
    'index' => 'my_index',
    'id'    => 'my_id',
];
$response = $client->get($params);
print_r($response);

Return result:

Elastic\Elasticsearch\Response\Elasticsearch Object
(
    [response:protected] => GuzzleHttp\Psr7\Response Object
        (
            [reasonPhrase:GuzzleHttp\Psr7\Response:private] => OK
            [statusCode:GuzzleHttp\Psr7\Response:private] => 200
            [headers:GuzzleHttp\Psr7\Response:private] => Array
                (
                    [X-elastic-product] => Array
                        (
                            [0] => Elasticsearch
                        )
                    [content-type] => Array
                        (
                            [0] => application/vnd.elasticsearch+json;compatible-with=8
                        )
                    [content-length] => Array
                        (
                            [0] => 123
                        )
                )
            [headerNames:GuzzleHttp\Psr7\Response:private] => Array
                (
                    [x-elastic-product] => X-elastic-product
                    [content-type] => content-type
                    [content-length] => content-length
                )
            [protocol:GuzzleHttp\Psr7\Response:private] => 1.1
            [stream:GuzzleHttp\Psr7\Response:private] => GuzzleHttp\Psr7\Stream Object
                (
                    [stream:GuzzleHttp\Psr7\Stream:private] => Resource id #169
                    [size:GuzzleHttp\Psr7\Stream:private] =>
                    [seekable:GuzzleHttp\Psr7\Stream:private] => 1
                    [readable:GuzzleHttp\Psr7\Stream:private] => 1
                    [writable:GuzzleHttp\Psr7\Stream:private] => 1
                    [uri:GuzzleHttp\Psr7\Stream:private] => php://temp
                    [customMetadata:GuzzleHttp\Psr7\Stream:private] => Array
                        (
                        )
                )
        )
)

I can't see the content of the document in the return result. Use the CURL -X GET" http://192.168.xxx.xxx:9200/my_index/_doc/my_id?pretty ", the return results are as follows as follows:

{
  "_index" : "my_index",
  "_id" : "my_id",
  "_version" : 4,
  "_seq_no" : 106,
  "_primary_term" : 2,
  "found" : true,
  "_source" : {
    "testField" : "abc"
  }
}

Why can you create documents through PHP and cannot get the content of the document?

/etc/elasticsearch/elasticsearch.yml The content of the file is as follows:

# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
#       Before you set out to tweak and tune the configuration, make sure you
#       understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: Medlive_Es
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: node-1
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
path.data: /var/lib/elasticsearch
#
# Path to log files:
#
path.logs: /var/log/elasticsearch
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# By default Elasticsearch is only accessible on localhost. Set a different
# address here to expose this node on the network:
#
network.host: 0.0.0.0
#
# By default Elasticsearch listens for HTTP traffic on the first free port it
# finds starting at 9200. Set a specific HTTP port here:
#
http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
#discovery.seed_hosts: ["0.0.0.0"]
#
# Bootstrap the cluster using an initial set of master-eligible nodes:
#
cluster.initial_master_nodes: ["node-1"]
#
# For more information, consult the discovery and cluster formation module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Allow wildcard deletion of indices:
#
#action.destructive_requires_name: true

#----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
#
# The following settings, TLS certificates, and keys have been automatically      
# generated to configure Elasticsearch security features on 13-05-2024 08:33:09
#
# --------------------------------------------------------------------------------

# Enable security features
xpack.security.enabled: false

xpack.security.enrollment.enabled: true

# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:
  enabled: false
  keystore.path: certs/http.p12

# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:
  enabled: false
  verification_mode: certificate
  keystore.path: certs/transport.p12
  truststore.path: certs/transport.p12
# Create a new cluster with the current node only
# Additional nodes can still join the cluster later

# Allow HTTP API connections from anywhere
# Connections are encrypted and require user authentication
http.host: 0.0.0.0

# Allow other nodes to join the cluster from anywhere
# Connections are encrypted and mutually authenticated
#transport.host: 0.0.0.0

#----------------------- END SECURITY AUTO CONFIGURATION -------------------------

http.cors.enabled: true
http.cors.allow-origin: "*"

System details

  • Operating System Centos7
  • PHP Version 7.4.3
  • ES-PHP client version 8.13.0
  • Elasticsearch version 8.13.4
@wangyongdong wangyongdong changed the title 使用PHP GET方法,可以成功创建文档,不能获取到文档内容 使用PHP GET方法,不能获取到文档内容 May 23, 2024
@ezimuel
Copy link
Contributor

ezimuel commented May 24, 2024

I'm sorry but we can provide support only in English. Can you translate your request? Thanks!

@wangyongdong
Copy link
Author

I'm sorry but we can provide support only in English. Can you translate your request? Thanks!

Sorry, I have translated it into English

@ezimuel
Copy link
Contributor

ezimuel commented May 28, 2024

@wangyongdong the $response is an object of Elastic\Elasticsearch\Response\Elasticsearch that is compatible with PSR-7 regarding the HTTP response and it offers also the body content.

Here you can find more information about the response object.

The body content is stored inside the same object and you can take it as object property or using an array index interface. For instance, to get a document you can use the following code:

$params = [
    'index' => 'my_index',
    'id'    => 'my_id',
];
$response = $client->get($params);

var_dump($response['_source']); // get the document using array interface
var_dump($response->_source); // get the document as object property

@ezimuel ezimuel closed this as completed May 31, 2024
@wangyongdong
Copy link
Author

@wangyongdong the $response is an object of Elastic\Elasticsearch\Response\Elasticsearch that is compatible with PSR-7 regarding the HTTP response and it offers also the body content.

Here you can find more information about the response object.

The body content is stored inside the same object and you can take it as object property or using an array index interface. For instance, to get a document you can use the following code:

$params = [
    'index' => 'my_index',
    'id'    => 'my_id',
];
$response = $client->get($params);

var_dump($response['_source']); // get the document using array interface
var_dump($response->_source); // get the document as object property

Thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants