Thu Oct 2020 1 year ago

Bagaimana Cara Menggunakan elasticsearch laravel

Ketika saya sedang mengerjakan situs web e-niaga saya di laravel, saya perlu menerapkan mesin pencari untuk situs web saya. Saya bingung dan berpikir apa yang harus saya gunakan, tetapi senior saya menyarankan kepada saya elasticsearch for search engine. Tapi saya tidak punya pengalaman elasticsearch. Saya perlu belajar dari awal tetapi saya menemukan cara menginstal elasticsearch dan menggunakannya di aplikasi laravel kami.

Mengapa kami memilih elasticsearch untuk mesin telusur karena elasticsearch menyediakan mesin telusur teks lengkap terdistribusi dan berkemampuan banyak penyewa dengan antarmuka web HTTP dan dokumen JSON. Jadi, dalam contoh ini saya akan memberikan contoh lengkap dari awal, setelah contoh ini Anda dapat menemukan pratinjau di bawah.

Pratinjau

Langkah 1: Instal Elasticsearch

pada langkah pertama Anda harus menginstal elasticsearch di komputer lokal Anda. Jika Anda belum menginstal, Anda dapat menginstal dari sini: ElasticSearch Docs .

Langkah 2: Instalasi Paket

Pada langkah ini kita akan menginstal paket elasticquent/Elasticquent untuk menggunakan api elasticsearch. jadi api pertama di bawah baris tambahkan file composer.json Anda dan kemudian perbarui komposer:

"elasticquent/elasticquent": "dev-master"

Setelah menginstal paket elasticquent/elasticquent, kita perlu menambahkan path provider dan path alias di file config/app.php jadi buka file itu dan tambahkan kode di bawah ini.

config/app.php

return [

    ......

    'provides' => [

        ......

        ......,

        Elasticquent\ElasticquentServiceProvider::class,

    ],

    'aliases' => [

        ......

        ......,

        'Es' => Elasticquent\ElasticquentElasticsearchFacade::class,

    ],

]

Sekarang kita perlu membuat file konfigurasi untuk elastichsearch jadi jalankan perintah di bawah ini di terminal Anda:

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

Langkah 3: Buat tabel dan model item

Pada langkah ini kita harus membuat migrasi untuk tabel item menggunakan perintah Laravel 8 php artisan, jadi jalankan perintah di bawah ini:

php artisan make:migration create_items_table

Setelah perintah ini Anda akan menemukan satu file di database/migrations path berikut dan Anda harus meletakkan kode di bawah ini di file migrasi Anda untuk membuat tabel item.

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;


class CreateItemsTable extends Migration
{


    public function up()
    {
        Schema::create('items', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->text('description');
            $table->timestamps();
        });
    }


    public function down()
    {
        Schema::drop("items");
    }
}

Setelah membuat tabel "items", Anda harus membuat model Item untuk item, jadi pertama buat file di path app/Item.php ini dan letakkan konten di bawah ini di file item.php:

app/Item.php

namespace App;


use Illuminate\Database\Eloquent\Model;
use Elasticquent\ElasticquentTrait;


class Item extends Model
{
    use ElasticquentTrait;


    public $fillable = ['title','description'];


}

Langkah 4: Route dan Controller

Pada langkah ini Anda harus menambahkan beberapa route di file route Anda. jadi salin dulu di bawah route dan masukkan ke file Anda.

app/Http/routes.php

Route::get('ItemSearch', 'ItemSearchController@index');
Route::post('ItemSearchCreate', 'ItemSearchController@create');

Oke, sekarang kita harus membuat controller baru sebagai ItemSearchController di path ini app/Http/Controllers/ItemSearchController.php . pengontrol ini akan mengelola semua pencarian dari elastichsearch dan menambahkan ke indeks:

app/Http/Controllers/ItemSearchController.php

namespace App\Http\Controllers;


use Illuminate\Http\Request;
use App\Http\Requests;
use App\Item;


class ItemSearchController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        if($request->has('search')){
            $items = Item::search($request->input('search'))->toArray();
        }
        return view('ItemSearch',compact('items'));
    }


    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create(Request $request)
    {
        $this->validate($request, [
            'title' => 'required',
            'description' => 'required',
        ]);


        $item = Item::create($request->all());
        $item->addToIndex();


        return redirect()->back();
    }
}

Langkah 5: Buat View

Ini adalah langkah terakhir dan Anda harus membuat file ItemSearch.blade.php untuk mengatur daftar pada fungsi pencarian jadi cukup salin dan tempel file ini:

ItemSearch.blade.php

@extends('layouts.app')


@section('content')
<div class="row">
    <div class="col-md-8 col-md-offset-2">
        <h1 class="text-primary" style="text-align: center;">Laravel 5 Search Using Elasticsearch</h1>
    </div>
</div>


<div class="container">
    <div class="panel panel-primary">
      <div class="panel-heading">
          <div class="row">
          <div class="col-lg-6">
            {!! Form::open(array('method'=>'get','class'=>'')) !!}
            <div class="input-group">


              <input name="search" value="{{ old('search') }}" type="text" class="form-control" placeholder="Search for...">
              <span class="input-group-btn">
                <button class="btn btn-default" type="submit">Go!</button>
              </span>


            </div><!-- /input-group -->
            {!! Form::close() !!}
          </div><!-- /.col-lg-6 -->
        </div><!-- /.row -->
      </div>
      <div class="panel-body">

            
            <div class="row">
                  <div class="col-lg-6">
                    @if(!empty($items))
                        @foreach($items as $key => $value)
                            <h3 class="text-danger">{{ $value['title'] }}</h3>
                            <p>{{ $value['description'] }}</p>
                        @endforeach
                    @endif
                  </div>
                  <div class="col-lg-6">
                      <div class="panel panel-default">
                          <div class="panel-heading">
                              Create New Items
                          </div>
                          <div class="panel-body">


                              @if (count($errors) > 0)
                                <div class="alert alert-danger">
                                    <strong>Whoops!</strong> There were some problems with your input.<br><br>
                                    <ul>
                                        @foreach ($errors->all() as $error)
                                            <li>{{ $error }}</li>
                                        @endforeach
                                    </ul>
                                </div>
                            @endif


                              {!! Form::open(array('url' => 'ItemSearchCreate','autocomplete'=>'off')) !!}
                                  <div class="row">
                                    <div class="col-xs-12 col-sm-12 col-md-12">
                                        <div class="form-group">
                                            <strong>Title:</strong>
                                            {!! Form::text('title', null, array('placeholder' => 'Title','class' => 'form-control')) !!}
                                        </div>
                                    </div>
                                    <div class="col-xs-12 col-sm-12 col-md-12">
                                        <div class="form-group">
                                            <strong>Description:</strong>
                                            {!! Form::textarea('description', null, array('placeholder' => 'Description','class' => 'form-control','style'=>'height:100px')) !!}
                                        </div>
                                    </div>
                                </div>


                                <div class="text-center">
                                    <button type="submit" class="btn btn-primary">Submit</button>
                                </div>


                              {!! Form::close() !!}


                          </div>
                      </div>
                  </div>
              </div>


      </div>
    </div>
</div>
@endsection

 

Sekarang Anda dapat memeriksa proyek Anda dan juga mendapatkan informasi lebih lanjut dari sini: elasticquent/Elasticquent.

 

laravel how to use elasticsearch laravel example