Пример учебного пособия Laravel Elasticsearch с нуля

Пример учебного пособия Laravel Elasticsearch с нуля является ведущей темой сегодня. В этом примере мы используем пакет композитора под названием Elasticquent. Он называется Elasticsearch для Eloquent Laravel Models. Elasticquent упрощает работу с моделями Elasticsearch и Eloquent , сопоставляя их с типами Elasticsearch. . Вы можете использовать настройки по умолчанию или определить, как Elasticsearch должен индексировать и искать ваши модели Eloquent прямо в модели. Elasticquent позволяет вам взять модель Eloquent и легко индексировать и искать ее содержимое в Elasticsearch . Хорошо, давайте начнем пример учебного пособия по Laravel Elasticsearch.

Если вы хотите освоить Laravel, ознакомьтесь с этим курсом. В нем есть все, что вы хотите знать.
PHP с Laravel для начинающих — стать мастером в Laravel

Учебный пример Laravel Elasticsearch

Мы начинаем этот пример с установки Elasticsearch на Mac, а затем настраиваем среду разработки laravel.

# Шаг 1. Установите Elasticsearch на Mac.

Если вы ранее не устанавливали Elasticsearch на Mac тогда вам понадобится этот шаг, иначе вы можете пропустить этот шаг. Введите следующий cmd в свой терминал, чтобы установить Elasticsearch через homebrew .

 brew  install elasticsearch 

Он установит его и запустит службы, используя следующую команду.

 brew сервисы запускают elasticsearch 

# Шаг 2: Настройка Laravel и Elasticsearch env.

Установите Laravel 5.6 с помощью следующей команды.

 laravel new elasticlaravel 

Войдите в папку проекта.

 cd elasticlaravel 

Откройте проект в своем редакторе.

 code. 

Настройте базу данных в файле .env .

Добавьте следующую строку в файл composer.json . Мы устанавливаем пакет Elasticquent .

 "require": {"php": "^ 7.1.3", "fideloper/proxy": "^ 4.0"  , "laravel/framework": "5.6. *", "laravel/tinker": "^ 1.0", "elasticquent/elasticquent": "dev-master"}, 

Введите следующую команду, чтобы установить пакет elasticquent .

 composer update 

После запуска composer update вам необходимо зарегистрировать поставщика услуг Laravel в вашем файле config/app.php .

//config/ приложение. php'providers '=> [... Elasticquent  ElasticquentServiceProvider :: class,], 

Мы также предоставляем фасад для клиента elasticsearch-php (который подключился с использованием наших настроек), добавьте следующее в свой config/app.php , если вам это нужно.

//config/app.php'aliases '=  > [... 'Es' => Elasticquent  ElasticquentElasticsearchFacade :: class,], 

Конфигурация #Elasticsearch

Тип следующая команда Artisan для публикации файла конфигурации в каталоге конфигурации для Laravel 5.6 .

 php artisan vendor: publish --provider = "Elasticquent  ElasticquentServiceProvider" 

Теперь перейдите в файл конфигурации по адресу app >> config >> elastiquent.php

Нам нужно добавить имя индекса для наше приложение. Итак, давайте изменимся с по умолчанию на статьи .

  Php//elastiquent.phpreturn array (/* | -  --------------------------------------------------  ----------------------- | Пользовательская конфигурация клиента Elasticsearch | ---------------------  --------------------------------------------------  --- | | Этот массив будет передан клиенту Elasticsearch. | Параметры конфигурации см. Здесь: | | http://www.elasticsearch.org/guide/en/elasticsearch/client/php-api/current/_configuration.html  */'config' => ['hosts' => ['localhost: 9200'], 'retries' => 1,],/* | -----------------  --------------------------------------------------  ------- | Имя индекса по умолчанию | --------------------------------------  ------------------------------------ | | Это имя индекса, которое Elasticquent будет использовать для всех |  Эластичные модели. */'Default_index' => 'article',); 

# Шаг 3. Создание модели статьи и миграция.

Будем искать статьи, использующие elasticsearch. Для создания модели и миграции используйте следующую команду.

 php artisan make: model Article -m 

В вашем _create_articles_table.php файл добавляет код схемы.

//create_articles_table.phppublic function up () {Schema :: create ('article', function (Blueprint $ table) {$ table-> increments  ('идентификатор'); $ table-> string ('title'); $ table-> text ('body'); $ table-> string ('tags'); $ table-> timestamps ();});  } 

Перенесите таблицу с помощью следующей команды.

 php artisan migrate 

# Шаг 4: Создайте фиктивные данные.

Создайте ArticleTableSeeder с помощью следующей команды.

 php artisan make: seeder ArticleTableSeeder 

Для генерации поддельных данных мы используем библиотеку Faker . Однако перед этим нам нужно добавить защищенные поля $ fillable внутри статьи .. php , чтобы предотвратить исключение массового назначения.

Хотите научиться программировать, получить новый навык и получить новую работу. Оцените эту удивительную программу
//Article.phpclass Article extends Model {protected $ fillable = ['title', 'body', 'tags'];} 

Теперь добавьте следующий код в файл ArticleTableSeeder.php .

  Php//ArticleTableSeeder.phpuse Illuminate  Database  Seeder; используйте App  Article;  class ArticleTableSeeder extends Seeder {/** * Запустить начальные числа базы данных.  * * @return void */public function run () {$ faker = Faker  Factory :: create ();  for ($ i = 0; $ i  $ faker-> предложение (3), 'body' => $ faker-> параграф (6),  'tags' => join (',', $ faker-> words (4))]);  }}} 

Добавьте класс ArticleTableSeeder в файл DatabaseSeeder.php , который находится в том же каталоге.

  php//DatabaseSeeder.phpuse Illuminate  Database  Seeder; класс DatabaseSeeder расширяет Seeder {/** * Заполнение базы данных приложения.  * * @return void */public function run () {$ this-> call (ArticleTableSeeder :: class);  }} 

Хорошо, теперь запустите сеялку и создайте поддельные данные с помощью следующей команды.

 php artisan db: seed 

# Шаг 5. Настройка Эластичная модель внутри статьи.

Напишите следующий код внутри файла Article.php .

  Php//Article.phpnamespace App; используйте Elasticquent  ElasticquentTrait; используйте Illuminate  Database  Eloquent  Model; класс Article расширяет Model {используйте ElasticquentTrait;  protected $ fillable = ['заголовок', 'тело', 'теги'];  protected $ mappingProperties = array ('title' => ['type' => 'text', "analyzer" => "standard",], 'body' => ['type' => 'text', «analyzer»  => "standard",], 'tags' => ['type' => 'text', "analyzer" => "standard",],);} 

Здесь мы добавляем наша конфигурация сопоставления для ElasticSearch . В таблице базы данных есть три основных поля. Поэтому нам нужно назначить тип и анализатор, который в нашем случае является стандартным. Помните, что наш индекс называется статьями. Массив m appingProperties — это поля, которые необходимо проиндексировать с указанием правильного типа для поиска и получения идеальных результатов. У каждого отображения есть свой вид и анализатор. Типы могут быть различными типами данных, включая строки, числа и даты. На данный момент мы будем придерживаться типа text , но имейте в виду, что разные типы позволяют вам использовать разные вещи.. Вы можете найти больше типов данных здесь, в исходной документации по elasticsearch.

Хорошо, теперь нам нужно проиндексировать базу данных. Итак, внутри файла web.php напишите следующий код. Помните, я написал следующий код внутри файла web.php , но в сценарии реального времени вам нужно написать этот код внутри контроллера или любой другой логической части вашего приложения, кроме файл web.php .

#Indexing Documents

Чтобы проиндексировать все записи в модели Eloquent, используйте addAllToIndex :

 Article :: addAllToIndex (); 

Вы также можете индексировать набор моделей:

 $ article = Article :: where ('id', ' get ();  $ article-> addToIndex (); 

Вы также можете индексировать отдельные записи:

 $ article = Article :: find  ($ id);  $ article-> addToIndex (); 

Вы также можете переиндексировать всю модель:

 Article :: reindex () 

Теперь мы индексируем всю модель, чтобы мы могли написать код индексации внутри root

  

Здесь мы создали индекс. Имя индекса уже определено внутри файла config >> elastiquent.php .

Затем мы поместили отображение, которое определено в Article.php и, наконец, добавляет это в индексирование.

Перейдите в браузер и нажмите этот URL-адрес: http://elasticlaravel.test/

Вы получите страницу приветствия, но наши данные полностью проиндексированы, и мы можем проверить это, отправив следующий запрос с помощью cURL. Мы также можем использовать для этого почтальона, но я отправляю запрос через терминал.

 curl 'localhost: 9200/article/_mapping? pretty' 

Мы можем выполнить базовый поиск, используя следующие команда.

 curl 'localhost: 9200/article/article/_search? q = title: Sed & pretty' 

Здесь наш поисковый запрос для заголовка - Сед. Таким образом, он будет извлекать записи, содержащие термин Sed . Мы можем видеть результаты prettify внутри терминала.

# Шаг 6. Поиск с использованием красноречивых методов Laravel.

Хорошо, до сих пор мы использовали cURL для поиска данных. Теперь мы будем использовать метод Elastiquent для поиска данных. Итак, давайте создадим другой маршрут внутри файла web.php и добавим в него следующий код.

  Php//Статья. phpuse App  Article; Route :: get ('/', function () {Article :: createIndex ($ shards = null, $ replicas = null); Article :: putMapping ($ ignoreConflicts = true); Article :: addAllToIndex (  ); return view ('welcome');}); Route :: get ('/search', function () {$ article = Article :: searchByQuery (['match' => ['title' => 'Sed'  ]]); return $ article;}); 

Я прошел жесткий код 'Sed' , но в приложении реального времени он будет нашим поисковый запрос, который вводится в поле поиска. Теперь переключитесь на этот URL: http://elasticlaravel.test/search. Вы можете увидеть ответ JSON следующим образом.

Конечно, вы можете получать разные данные, потому что это случайно сгенерированные данные. Итак, сначала проверьте базу данных и выберите термин, а затем перейдите в поисковую систему, и она вернет что-то вроде этого. Итак, мы успешно проиндексировали данные и получили данные из механизма elasticsearch.

В этом примере мы выполнили поиск title , вы можете выбрать body и теги .

 $ article = Article :: searchByQuery (['match' => ['body'  => 'eligendi']]);  return $ article; 

То же самое можно сделать и для тегов .

#Search коллекции

Мы можем подсчитать общее количество обращений, используя следующий код.

 $ article = Article :: searchByQuery (['match' =>  ['title' => 'Heleium']]);  return $ article-> totalHits (); 

Доступ к массиву сегментов:

 $ article-> shards (); 

Доступ к максимальному баллу:

 $ articles-> maxScore (); 

Доступ к логическое свойство timed out:

 $ article-> timedOut (); 

Доступ к свойству take:

 $ article-> take (); 

Доступ к агрегированным поисковым запросам - подробности см. в разделе агрегирования:

 $ article-> getAggregations (); 

# Обработка результатов из Elastiquent.

Чтобы получить результаты по частям , вы можете использовать функцию chunk () .

 $ article = Article :: searchByQuery (['match' => ['title' => 'Similique  ']]);  return $ article-> chunk (2); 

Наконец, Учебный пример Laravel Elasticsearch завершен. Спасибо, что приняли.

Оцените статью
nanomode.ru
Добавить комментарий