0

I'm new to Elasticsearch and PHP in general. I've been trying to figure out a problem with a code I've recieved. I'm usng WAMP 3.1 with PHP 7.1 and Elasticsearch 6.2.

When I go to my localhost I recieve the following error:

Fatal error: Uncaught TypeError: Argument 1 passed to Elasticsearch\Client::__construct() must be an instance of Elasticsearch\Transport, array given, called in C:\wamp64\www\search\init.php on line 5 and defined in C:\wamp64\www\search\vendor\elasticsearch\elasticsearch\src\Elasticsearch\Client.php:98 Stack trace: #0 C:\wamp64\www\search\init.php(5): Elasticsearch\Client->__construct(Array) #1 C:\wamp64\www\search\index.php(2): require_once('C:\\wamp64\\www\\s...') #2 {main} thrown in C:\wamp64\www\search\vendor\elasticsearch\elasticsearch\src\Elasticsearch\Client.php on line 98

I can see that there is probably a problem with my Init.php but I've been using the one I recieved without modification so I don't know for sure if thats the problem.

    <?php 
    require_once 'vendor/autoload.php';
    $es = new Elasticsearch\Client([
        'hosts' => ['127.0.0.1:9200']
    ]);

Here is also the index.php.

<?php
require_once 'init.php';
require 'vendor/autoload.php';
use Elasticsearch\ClientBuilder;
$client = Elasticsearch\ClientBuilder::create()->build();

    if (isset($_GET['q'])) {
        $q = $_GET['q'];
        $query = $es->search([
            'body' => [
                'query' => [
                    'bool' => [
                        'should' => [
                            'match' => ['name' => $q],
                            'match' => ['content' => $q]
                            ]
                        ]
                    ]
                ]
            ]);
    }
    echo '<pre>', print_r($query), '</pre>';

    if($query['hits']['total'] >=1 ) {
        $results = $query['hits']['hits'];
    }
    ?>

    <!doctype html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>search | ES</title>

            <link rel="stylesheet" href="css/main.css">
        </head>
        <body>
            <form action="index.php" method="get" autocomplete="off">
                <label>
                    Search
                    <input type="text" name="q">
                </label>

                <input type="submit" value="Search">
            </form>

            <?php
            if(isset($results)) {
                foreach($results as $r) {
            ?>
                <div class="result">
                    <a href="#<?php echo $r['_id']; ?>"><?php echo $r['_source']['title'];?></a>
                    <div class="result-keywords"><?php implode(', ', $r['_source']['keywords']);?></div>
                </div>
            <?php 
            }
        }
         ?>
        </body>
    </html>

I would be happy to provide anything else if its neccecary to solve the problem.

1 Answer 1

1

You don't need init at all (besides you're using the client class wrong in there). Just do:

require_once 'vendor/autoload.php';
use Elasticsearch\ClientBuilder;
$client = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.