Elasticsearch в люмене, дающий пустые элементы в полученных данных - PullRequest
0 голосов
/ 12 октября 2018

Я работаю с Elasticsearch в люменах для простого поиска.

Я следовал учебному пособию по установке Elastic search от: https://medium.com/@basemkhirat_88244/laravel-lumen-flexible-elasticsearch-query-builder-inspired-from-eloquent-bb5221c65af8

И в моем controller.php

public function search() {
    $users = \Basemkhirat\Elasticsearch\Facades\ES::index('user_index')->type("text")->body([
        "query" => [
             "bool" => [
                 "must" => [
                     [ "match" => [ "name" => "Leena Patel" ] ],
                 ]
             ]
         ]
    ])->get();
    dd($users);        
}

И в моем routes.php файле

$app->get('/search', 'Controller@search');

Мой es.php файл конфигурации:

return [

'default' => env('ELASTIC_CONNECTION', 'default'),

'connections' => [

    'default' => [

        'servers' => [

            [
                "host" => env("ELASTIC_HOST", "127.0.0.1"),
                "port" => env("ELASTIC_PORT", 9200),
                'user' => env('ELASTIC_USER', ''),
                'pass' => env('ELASTIC_PASS', ''),
                'scheme' => env('ELASTIC_SCHEME', 'http'),
            ]

        ],

        'index' => env('ELASTIC_INDEX', 'user_index'),

        // Elasticsearch handlers
        // 'handler' => new MyCustomHandler(),
    ]
],

'indices' => [

    'user_index' => [

        "aliases" => [
            "user_index_alias"
        ],

        'settings' => [
            "number_of_shards" => 1,
            "number_of_replicas" => 0,
        ],

        'mappings' => [
            'users_schema' => [
                "properties" => [
                    'name' => [
                        'type' => 'text'
                    ]
                ]
            ]
        ]

    ]

]

];

При запуске ссылки /search в браузере он показывает массив результатов, такой как

Basemkhirat\Elasticsearch\Collection Object
(
    [items:protected] => Array
        (
        )

    [total] => 0
    [max_score] => 
    [took] => 1
    [timed_out] => 
    [scroll_id] => 
    [shards] => stdClass Object
        (
            [total] => 1
            [successful] => 1
            [skipped] => 0
            [failed] => 0
        )

)

Мой вопрос Почему массив My Items пуст, хотя есть данные с именем = Leena Patel ?

Пожалуйста, помогите!Я изучаю ElasticSearch!

Редактировать:

Пользователи моей таблицы базы данных, которые содержат имя столбца с данными Leena Patel, ТАК Я хочу эту запись в результате моих элементов

enter image description here

1 Ответ

0 голосов
/ 15 октября 2018

Пожалуйста, используйте ссылку ниже для упругого поиска

https://appdividend.com/2018/06/30/laravel-elasticsearch-tutorial-example/

, затем следуйте приведенным ниже инструкциям для люмена

1) Move config directory to root alongside with app folder

vendor \asticquent \asticquent \ src \ config

2) Remove comment from `$app->withEloquent();` in bootstrap\app.php of lumen folder
3) Register elasticquent in app.php file of lumen folder as below

$ app-> configure ('эластичный);

4) Run command in your lumen folder

дамп-автозагрузка композитора

После этих шагов вам нужно установить маршрут в web.php папки lumen

для т.е.

use App\Article;    // Use at top of web.php

$router->get('article', function() {

    Article::createIndex($shards = null, $replicas = null); // Using this code create command 
    Article::reindex(); // Reindex article indices

    $articles = Article::searchByQuery(['match' => ['title' => 'Android']]);   
    return $articles;
});
...