【问题描述】:

我在带有 XAMPP 的 Laravel 应用中使用 elasticsearch-php

版本:

  • PHP:7.3
  • Laravel:^6.2
  • Elasticsearch:^7.6

AppServiceProvider.php 我在其中注册自定义 Scout 驱动程序的代码:

public function boot()
{
    $this->app->singleton('elasticsearch', function () {
        return ClientBuilder::create()
                ->setHosts([
                    'http://localhost/scout/public'
                ])
                ->build();
    });

    resolve(EngineManager::class)->extend('elasticsearch', function () {
        return new ElasticSearchEngine(
            app('elasticsearch')
        );
    });
}

我的自定义搜索引擎代码:

<?php 

namespace App\Search\Engines;

use Laravel\Scout\Engines\Engine;
use Laravel\Scout\Builder;
use Elasticsearch\Client;

class ElasticSearchEngine extends Engine
{
    protected $client;

    public function __construct(Client $client)
    {
        $this->client = $client;
    }

    /**
     * Update the given model in the index.
     *
     * @param  \Illuminate\Database\Eloquent\Collection  $models
     * @return void
     */
    public function update($models)
    {
        $models->each(function($model) {
            $params = [
                'index' => $model->searchableAs(),
                'type' => $model->searchableAs(),
                'id' => $model->id,
                'body' => $model->toSearchableArray()
            ];

            $this->client->index($params);
        });
    }
}

在我的情况下,当我尝试运行命令 php artisan scout:import App\User Elasticsearch 包返回错误消息:

Elasticsearch\Common\Exceptions\NoNodesAvailableException : No alive 在您的集群中找到的节点

laravel 6 + elasticsearch-php 7.6 + xampp: No alive nodes found in your cluster

我该如何解决我的问题?也许这里是主机或 xampp 设置的问题?

【问题讨论】:

    标签: php laravel elasticsearch xampp


    【解答1】:

    首先,不要恐慌:) 我认为你没有安装 Elasticsearch。安装 Elasticsearch 并解决您的问题需要 5 分钟。

    安装

    • Download 并解压 Elasticsearch 官方发行版。
    • Linuxma​​cOS 上运行 bin/elasticsearch。在 Windows 上运行 bin\elasticsearch.bat
    • 运行 curl -X GET http://localhost:9200

    【问题讨论】:

    • 哇!我不认为要让 elasticsearch 工作,需要某种外部程序安装。我现在重新导入了索引表,一切正常。谢谢你的回答。 @Otabek Mansurov