লারাভেলে রিয়েল-টাইম অনুসন্ধানের সম্পূর্ণ নির্দেশিকা

সর্বশেষ আপডেট: 5 এর ডিসেম্বর 2025
  • Laravel আপনাকে AJAX-এর সাহায্যে সহজ সার্চ ইঞ্জিন থেকে শুরু করে Laravel Scout এবং Algolia, Meilisearch, অথবা Elasticearch-এর মতো বহিরাগত সার্চ ইঞ্জিন ব্যবহার করে উন্নত পূর্ণ-পাঠ্য অনুসন্ধান পর্যন্ত সবকিছু বাস্তবায়ন করতে দেয়।
  • হালকা ওজনের অনুসন্ধানের জন্য, Alpine.js বা নেটিভ ফেচ অনুরোধের মাধ্যমে ফ্রন্টএন্ডে ফিল্টারিং সার্ভারের ওভারলোডিং এড়ায় এবং ছোট তালিকাগুলিতে ব্যবহারকারীর অভিজ্ঞতা উন্নত করে।
  • লারাভেল স্কাউট বিভিন্ন সার্চ ইঞ্জিনের সাথে ইন্টিগ্রেশনকে কেন্দ্রীভূত করে এবং মডেলগুলিকে অনুসন্ধানযোগ্য হিসেবে চিহ্নিত করা, সূচী পরিচালনা করা এবং অভিন্নভাবে কোয়েরি চালু করা সহজ করে তোলে।
  • ইঞ্জিনের পছন্দ (SaaS, ওপেন সোর্স বা ডাটাবেস) ডেটার পরিমাণ, অনুসন্ধানের জটিলতা এবং প্রকল্পের কর্মক্ষমতা এবং রক্ষণাবেক্ষণের প্রয়োজনীয়তার উপর ভিত্তি করে হওয়া উচিত।

লারাভেলে রিয়েল-টাইম অনুসন্ধান

যখন আপনি লারাভেলের সাথে কাজ শুরু করবেন এবং একটি রিয়েল-টাইম সার্চ ইঞ্জিন যা তাৎক্ষণিকভাবে সাড়া দেয়হাজারো সম্ভাব্য পদ্ধতির মধ্যে হারিয়ে যাওয়া সহজ: ফেচ সহ AJAX, jQuery, Alpine.js, Algolia বা Meilisearch সহ Scout, ফ্রন্টএন্ড ফিল্টারিং ইত্যাদি। ভালো খবর হল যে Laravel ইকোসিস্টেম ইতিমধ্যেই আপনার প্রয়োজনীয় সবকিছুই প্রদান করে যা আপনাকে চেষ্টায় হতাশ না হয়ে একটি মসৃণ এবং দ্রুত অনুসন্ধান সেট আপ করতে সাহায্য করে।

এই প্রবন্ধে আপনি দেখতে পাবেন কিভাবে একত্রিত করতে হয় লারাভেলে বিভিন্ন ধরণের রিয়েল-টাইম অনুসন্ধানক্লাসিক AJAX অটোকম্পলিট থেকে শুরু করে Laravel Scout এবং Algolia, Meilisearch, ডাটাবেস নিজেই, এমনকি Elasticsearch এর মতো সার্চ ইঞ্জিনের মাধ্যমে পূর্ণ-পাঠ্য অনুসন্ধান পর্যন্ত। ডেটা ভলিউম কম থাকলে ব্রাউজারে সরাসরি ডেটা ফিল্টার করার জন্য Alpine.js এর সাথে হালকা বিকল্পগুলিও আপনি দেখতে পাবেন।

লারাভেলে রিয়েল-টাইম সার্চ কী এবং এর মূল বিষয়গুলি কীভাবে কাজ করে?

রিয়েল-টাইম অনুসন্ধানের পিছনে ধারণাটি হল যে, ব্যবহারকারী যখন টেক্সট ফিল্ডে টাইপ করেএকটি কোয়েরি ট্রিগার করা হয় এবং পৃষ্ঠাটি পুনরায় লোড না করেই ফলাফল আপডেট করা হয়। টেকনিক্যালি, এতে তিনটি মূল উপাদান জড়িত: লারাভেল ব্যাকএন্ড, ব্রাউজারের জাভাস্ক্রিপ্ট এবং JSON ফর্ম্যাটে ডেটা বিনিময়।

একদিকে, লারাভেল সার্ভার লেয়ার হিসেবে কাজ করে। এটি অনুরোধ গ্রহণ, অনুসন্ধানের প্যারামিটারগুলি (প্রবেশ করা টেক্সট) ব্যাখ্যা করার জন্য, ডাটাবেস অনুসন্ধান করার জন্য এবং একটি কাঠামোগত প্রতিক্রিয়া ফেরত দেওয়ার জন্য দায়ী, সাধারণত JSON ফর্ম্যাটে। এই প্রতিক্রিয়া সাফল্য, ত্রুটি, অথবা কোনও ফলাফল পাওয়া যায়নি তা নির্দেশ করতে পারে।

অন্য প্রান্তে, জাভাস্ক্রিপ্ট ব্যবহারকারীর ইভেন্ট শোনার জন্য দায়ী। অনুসন্ধান ইনপুটে, ব্যাকএন্ডে অ্যাসিঙ্ক্রোনাস রিকোয়েস্ট (AJAX) পাঠান এবং ব্রাউজার সম্পূর্ণ রিফ্রেশ না করেই পৃষ্ঠায় ফিরে আসা ডেটা প্রদর্শন করুন। এটি নেটিভ ফেচ, jQuery AJAX, অথবা Alpine.js এর মতো ছোট প্রতিক্রিয়াশীল লাইব্রেরি দিয়ে করা যেতে পারে।

এই মৌলিক প্রক্রিয়াটি ব্যবহার করে আপনি একটি থেকে তৈরি করতে পারেন কয়েকটি রেকর্ড সহ সহজ স্বয়ংসম্পূর্ণ, প্রাসঙ্গিকতা, পৃষ্ঠাঙ্কন এবং ফিল্টার সহ একটি উন্নত পূর্ণ-পাঠ্য অনুসন্ধান ইঞ্জিন পর্যন্ত, যা Laravel Scout এবং অনুসন্ধানের জন্য অপ্টিমাইজ করা বহিরাগত অনুসন্ধান ইঞ্জিনগুলির মতো লাইব্রেরি দ্বারা সমর্থিত।

একটি মৌলিক রিয়েল-টাইম সার্চ ইঞ্জিনের মডেল, রুট এবং কন্ট্রোলার

জাভাস্ক্রিপ্টে প্রবেশ করার আগে, আপনাকে নিশ্চিত করতে হবে যে লারাভেলের দিকটি সুসংগঠিত আছে: অনুসন্ধানের জন্য একটি স্পষ্ট মডেল, রুট পরিষ্কার করা, এবং একটি নিবেদিতপ্রাণ নিয়ামক রিয়েল টাইমে অনুসন্ধান যুক্তি পরিচালনা করতে।

প্রথম ধাপ হল একটি Eloquent মডেল থাকা যা আপনি যে টেবিলে অনুসন্ধান করতে যাচ্ছেন তার প্রতিনিধিত্ব করে। দেশগুলির একটি টেবিল এবং একটি মডেল কল্পনা করুন যার নাম দেশ খুবই সহজ, টাইমস্ট্যাম্প ছাড়াই এবং বাল্ক অ্যাসাইনমেন্ট সহ:

অনুসন্ধানের জন্য একটি ন্যূনতম ইলোকোয়েন্ট মডেলের উদাহরণ:

namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Pais extends Model
{
use HasFactory;
protected $guarded = [];
public $timestamps = false;
}

এখানে উল্লেখ করা হয়েছে যে মডেলটি Pais স্ট্যান্ডার্ড Laravel নেমস্পেসে অবস্থিতএটি মডেল থেকে উত্তরাধিকারসূত্রে পায় এবং আপনাকে create() সহ যেকোনো ক্ষেত্র বরাদ্দ করতে দেয়, গার্ডেড অ্যারে খালি রেখে। public $timestamps = false দিয়ে টাইমস্ট্যাম্প নিষ্ক্রিয় করে, টেবিলে created_at এবং updated_at কলাম না থাকলে আপনি সমস্যা এড়াতে পারবেন।

পরবর্তী ধাপ হল সংজ্ঞায়িত করা যে রুটগুলি সার্চ ইঞ্জিন প্রদর্শন এবং AJAX অনুরোধ উভয়ই পরিচালনা করবেএকটি খুব সাধারণ স্কিম ভিউ প্রদর্শনের জন্য একটি GET রুট এবং রিয়েল-টাইম কোয়েরি গ্রহণের জন্য ডিজাইন করা একটি POST রুটকে একত্রিত করে:

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\BuscadorController;

Route::get('/', function () {
return view('welcome');
});

Route::get('buscador', [BuscadorController::class, 'index']);
Route::post('buscador', [BuscadorController::class, 'buscar']);

রুট রুটটি একটি স্বাগত ভিউ প্রদান করে, যখন URL /search অনুসন্ধান কার্যকারিতার জন্য সংরক্ষিতকন্ট্রোলারের index() পদ্ধতি ফর্ম এবং অনুসন্ধান ইনপুট প্রদর্শন করে, যখন search() পদ্ধতি ব্রাউজার থেকে প্রেরিত অ্যাসিঙ্ক্রোনাস অনুরোধগুলি প্রক্রিয়া করে।

কন্ট্রোলারে আপনি একটি খুব ব্যবহারিক প্যাটার্ন বাস্তবায়ন করতে পারেন: ত্রুটির ক্ষেত্রে একটি ডিফল্ট প্রতিক্রিয়া অ্যারে প্রস্তুত করুন এবং শুধুমাত্র তখনই ওভাররাইট করুন যখন এটি আসলে একটি বৈধ AJAX অনুরোধ এবং কোয়েরিটি সমস্যা ছাড়াই কার্যকর হয়।

কন্ট্রোলারটিতে একটি থাকতে পারে অনুরূপ কাঠামো এই:

namespace App\Http\Controllers;

use App\Models\Pais;
use Illuminate\Http\Request;

class BuscadorController extends Controller
{
public function index()
{
return view('welcome');
}

public function buscar(Request $request)
{
$response = [
'success' => false,
'message' => 'Hubo un error',
];

if ($request->ajax()) {
$data = Pais::where('nombre', 'like', $request->texto.'%')
->take(10)
->get();

$response = [
'success' => true,
'message' => 'Consulta correcta',
'data' => $data,
];
}

return response()->json($response);
}
}

এই মুহুর্তে আপনার ইতিমধ্যেই আছে সম্পূর্ণ ব্যাকএন্ড চক্র: আগত AJAX অনুরোধ, এটি AJAX কিনা তা পরীক্ষা করা, where like দিয়ে জিজ্ঞাসা করা এবং ফলাফল সীমিত করা ডাটাবেসের ওভারলোডিং এড়াতে take(10) ব্যবহার করে একটি যুক্তিসঙ্গত সংখ্যায় পৌঁছানো। প্রতিক্রিয়া সর্বদা JSON-এ পাঠানো হয়, যা ফ্রন্টএন্ডের কাজকে ব্যাপকভাবে সহজ করে তোলে।

প্রতিক্রিয়াশীল অনুসন্ধানের জন্য ব্লেড ভিউ এবং জাভাস্ক্রিপ্ট ফেচ

মডেল, রুট এবং কন্ট্রোলার প্রস্তুত থাকার পর, দৃশ্যমান অংশটি তৈরি করার সময় এসেছে: একটি অনুসন্ধান ক্ষেত্র এবং ফলাফল প্রদর্শনের জন্য একটি ব্লক সহ একটি ফর্ম, এবং ব্যাকগ্রাউন্ডে অনুরোধ করার জন্য দায়ী জাভাস্ক্রিপ্ট।

ব্লেড ভিউ খুব সহজ হতে পারে, এর উপর নির্ভর করে CSRF টোকেন যা লারাভেল POST অনুরোধগুলি যাচাই করার জন্য এবং একটি অনুসন্ধান ইনপুট যা ব্যবহার করা সুবিধাজনক তা ইনজেক্ট করে:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<strong><meta name="csrf-token" content="{{ csrf_token() }}"></strong>
<title>Laravel</title>
</head>
<body>

<form action="" method="post">
<input type="search" name="texto" id="buscar">
</form>

<div id="resultado"></div>

<script>
window.addEventListener('load', function () {
const buscar = document.getElementById('buscar');
const resultado = document.getElementById('resultado');

buscar.addEventListener('keyup', function () {
fetch('/buscador', {
method: 'post',
body: JSON.stringify({ texto: buscar.value }),
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-Token': document.head.querySelector('[name~="csrf-token"][content]').content,
},
})
.then(response => response.json())
.then(data => {
let html = '';
if (data.success) {
html += '<ul>';
for (let i in data.data) {
html += '<li>' + data.data[i].nombre + '</li>';
}
html += '<ul>';
} else {
html += 'No existen resultados';
}
resultado.innerHTML = html;
});
});
});
</script>

</body>
</html>

এই উদাহরণে স্ক্রিপ্টটি অনুসন্ধান ইনপুটে কীআপ ইভেন্টটি শুনুন।প্রতিটি কীস্ট্রোক /search পাথে একটি ফেচ রিকোয়েস্ট ট্রিগার করে। ফিল্ডের বর্তমান টেক্সট JSON ফর্ম্যাটে পাঠানো হয় এবং X-Requested-With এর মতো কী হেডারগুলি অন্তর্ভুক্ত করা হয় যাতে বোঝা যায় যে এটি AJAX, এবং Laravel এর নেটিভ সুরক্ষা বাইপাস করার জন্য CSRF টোকেনও অন্তর্ভুক্ত করা হয়।

যখন প্রতিক্রিয়া আসে, তখন এটি JSON-এ রূপান্তরিত হয় এবং গতিশীলভাবে তৈরি হয়। ফলাফল সহ একটি ছোট HTML তালিকাঅথবা "কোনও ফলাফল পাওয়া যায়নি" এর মতো বার্তা যখন কোয়েরি কোনও ডেটা ফেরত দেয় না। এই সমস্ত কিছুই পৃষ্ঠাটি পুনরায় লোড না করেই, ব্যবহারকারীর জন্য স্বাভাবিক উপায়ে।

এই প্যাটার্নটিকে ছোট UX বিবরণ দিয়ে আরও পরিমার্জিত করা যেতে পারে, যেমন একটি যোগ করা বিলম্ব (ডিবাউন্স) কীস্ট্রোকের মধ্যে, লোডার প্রদর্শন করুন অথবা নেটওয়ার্ক ত্রুটিগুলি পরিচালনা করুন যাতে কিছু ব্যর্থ হলে ইন্টারফেসটি হিমায়িত না হয়।

jQuery ব্যবহার করে Laravel এবং AJAX এর মাধ্যমে লাইভ অনুসন্ধান করুন

যদিও আজকাল ফেচ অনেক জনপ্রিয়তা অর্জন করেছে, jQuery AJAX এখনও খুব জনপ্রিয় লিগ্যাসি প্রকল্পগুলিতে অথবা যেসব দল ইতিমধ্যেই এটি বাস্তবায়িত করেছে তাদের ক্ষেত্রে। ধারণাটি ঠিক একই রকম: ব্যবহারকারী যা টাইপ করে তা ক্যাপচার করুন, একটি অ্যাসিঙ্ক্রোনাস অনুরোধ করুন এবং DOM রিফ্রেশ করুন।

লাইভ সার্চের জন্য লারাভেলে jQuery এর একটি সাধারণ ওয়ার্কফ্লোতে সাধারণত এই মৌলিক ধাপগুলি অন্তর্ভুক্ত থাকে: একটি নির্দিষ্ট রুট নির্ধারণ করুন, একটি ডেডিকেটেড কন্ট্রোলার তৈরি করুন, অনুসন্ধান ইনপুট দিয়ে ব্লেড ভিউ তৈরি করুন এবং অবশেষে, jQuery কোডটি যোগ করুন যা টাইপ করার সাথে সাথে AJAX ট্রিগার করে।

প্রক্রিয়াটি এভাবে কাজ করে: যখন ব্যবহারকারী টাইপ করা শুরু করে, jQuery সার্ভারে একটি কোয়েরি পাঠায় অনুসন্ধান স্ট্রিং সহ। লারাভেল ডাটাবেসের তথ্য ফিল্টার করে, মিলিত ফলাফল সহ একটি JSON প্রদান করে এবং jQuery মিলগুলি প্রতিফলিত করার জন্য পৃষ্ঠায় একটি HTML কন্টেইনার আপডেট করে, সবকিছু মিলিসেকেন্ডের মধ্যে।

jQuery ব্যবহারের সুবিধা হলো এটি AJAX এর সিনট্যাক্সের মোটামুটি সারসংক্ষেপ তুলে ধরে। আর যদি আপনার প্রোজেক্টে ইতিমধ্যেই লাইব্রেরি থাকে তাহলে এটি পড়া খুবই সহজ। তবে, আপনি একটি অতিরিক্ত নির্ভরতা যোগ করছেন যা আধুনিক জাভাস্ক্রিপ্ট এবং নেটিভ ফেচের সাথে কাজ করতে পারলে প্রয়োজন নাও হতে পারে।

Alpine.js এর মাধ্যমে ফ্রন্টএন্ডে রিয়েল-টাইম ফিল্টারিং এবং অনুসন্ধান করুন

যখন প্রদর্শিত তথ্য তুলনামূলকভাবে ছোট হয় (উদাহরণস্বরূপ, ৩০,০০০ এর কম আইটেম), জটিল অনুসন্ধান সহ একটি ব্যাকএন্ড সেট আপ করা সবসময় মূল্যবান নয়। এই ক্ষেত্রে, একটি খুব সুবিধাজনক বিকল্প হল Alpine.js দিয়ে সরাসরি ব্রাউজারে ফিল্টার করুন, ব্যবহারকারী টাইপ করার সময় সার্ভারে অনুরোধ না করে।

ধারণাটি হল প্রতিটি উপাদানের জন্য একটি অনুসন্ধান স্ট্রিং আগে থেকে গণনা করা (যেমন, নাম, বিবরণ এবং ছোট হাতের অক্ষরে বিভাগ), এটি একটি data-search-text অ্যাট্রিবিউটে সংরক্ষণ করা এবং Alpine.js কে বাকিটা পরিচালনা করতে দেওয়া। লিখিত টেক্সট অনুসারে উপাদানগুলি দেখান বা লুকান একটি অনুসন্ধান ক্ষেত্রে।

Alpine.js কম্পোনেন্টের গঠন এইরকম হতে পারে: ফিল্টার আইটেম

{
search: '',
hasResults: true,
selectedValue: '',
init() {
this.$watch('search', () => this.filterItems());
this.$nextTick(() => this.$refs.searchInput?.focus());
},
filterItems() {
const searchLower = this.search.toLowerCase().trim();
const cards = this.$el.querySelectorAll('.item-card');
let visibleCount = 0;

cards.forEach(card => {
const text = card.dataset.searchText || '';
const isVisible = searchLower === '' || text.includes(searchLower);
card.style.display = isVisible ? '' : 'none';
if (isVisible) visibleCount++;
});

this.hasResults = visibleCount > 0;
},
}

ভিউতে, প্রতিটি কার্ড বা ডেটার সারি একটি বৈশিষ্ট্য বহন করবে ডেটা-সার্চ-টেক্সট, যেখানে লেখাটি ছোট হাতের অক্ষরে ইতিমধ্যেই প্রস্তুত করা আছেঅতএব, জাভাস্ক্রিপ্টে ফিল্টারটি একটি includes() ফাংশনে হ্রাস করা হয়েছে, যা সংক্ষিপ্ত তালিকার জন্য খুব দ্রুত:

<input type="search" x-model="search" x-ref="searchInput" placeholder="Buscar..." />
<div>
<div class="item-card" data-search-text="formulario contacto simple">
<h3>Formulario de contacto</h3>
<p>Formulario de contacto simple</p>
</div>
</div>

অতিরিক্তভাবে, আপনি কেবল তখনই একটি খালি স্টেট ব্লক প্রদর্শন করতে পারবেন যখন বর্তমান অনুসন্ধান শব্দটির জন্য কোন ফলাফল নেই।ব্যবহারকারীকে টেক্সট পরিবর্তন করতে বা একটি বোতাম দিয়ে ক্ষেত্রটি পরিষ্কার করতে আমন্ত্রণ জানানো যা অনুসন্ধানটিকে খালি স্ট্রিংয়ে পুনরায় সেট করে।

এই পদ্ধতির স্পষ্ট সুবিধা রয়েছে: অনুসন্ধানের সময় কোনও সার্ভার কল নেই।মিথস্ক্রিয়াটি কার্যত তাৎক্ষণিকভাবে সম্পন্ন হয় এবং যুক্তিটি অত্যন্ত স্থানীয় এবং ডিবাগ করা সহজ। এটি দ্রুত নির্বাচক, আইটেম নির্বাচন মডেল, অথবা লারাভেল পৃষ্ঠায় এমবেড করা ছোট ক্যাটালগের জন্য উপযুক্ত।

লারাভেল স্কাউট: বিশেষায়িত ইঞ্জিনের সাহায্যে পূর্ণ-পাঠ্য অনুসন্ধান

যখন জিনিসগুলি গুরুতর হয়ে ওঠে এবং আপনার প্রয়োজন হয় দ্রুত, প্রাসঙ্গিক এবং স্কেলেবল পূর্ণ-পাঠ্য অনুসন্ধানলারাভেলের স্বাভাবিক পথ হল লারাভেল স্কাউট। স্কাউট হল একটি ইন্টিগ্রেশন লেয়ার যা আপনাকে সহজেই আপনার এলোকোয়েন্ট মডেলগুলিকে অ্যালগোলিয়া, মেইলিসার্চ, আপনার নিজস্ব ডাটাবেস, ইন-মেমরি সংগ্রহ, এমনকি বহিরাগত কন্ট্রোলারের মাধ্যমে ইলাস্টিকসার্চের মতো সার্চ ইঞ্জিনের সাথে সংযুক্ত করতে দেয়।

স্কাউট শুরু করার জন্য, স্বাভাবিক জিনিসটি হল একটি নতুন লারাভেল প্রকল্প তৈরি করুন অথবা বিদ্যমান একটি পুনরায় ব্যবহার করুনএটি চালু করতে, ডকার ব্যবহার করুন (উদাহরণস্বরূপ, Laravel Sail এর সাথে) এবং তারপর Composer দিয়ে লাইব্রেরিটি ইনস্টল করুন। এটি হয়ে গেলে, scout.php কনফিগারেশন ফাইলটি প্রকাশ করুন এবং আপনি যে ড্রাইভারটি ব্যবহার করতে চান তার উপর ভিত্তি করে পরিবেশের ভেরিয়েবলগুলি সামঞ্জস্য করুন।

একটি সাধারণ কর্মপ্রবাহ হল কম্পোজার দিয়ে স্কাউট ইনস্টল করা, এর কনফিগারেশন প্রকাশ করা এবং SCOUT_QUEUE=true দিয়ে ইনডেক্সিং কিউ সক্রিয় করুন .env ফাইলে, নিশ্চিত করুন যে রিসোর্স-ইনটেনসিভ অপারেশনগুলি ব্যাকগ্রাউন্ডে প্রক্রিয়া করা হচ্ছে, অ্যাপ্লিকেশন প্রতিক্রিয়া সময় উন্নত করে। অতিরিক্তভাবে, আপনাকে নিশ্চিত করতে হবে যে DB_HOST আপনার ব্যবহৃত ডাটাবেসের দিকে নির্দেশ করে, যা বিশেষ করে যদি আপনি ডকার কন্টেইনার ব্যবহার করেন তবে গুরুত্বপূর্ণ।

স্কাউট অনুসন্ধানে অংশগ্রহণের জন্য একজন মডেলের জন্য, এটি প্রয়োজনীয় যে অনুসন্ধানযোগ্য বৈশিষ্ট্য যোগ করে এটিকে স্পষ্টভাবে অনুসন্ধানযোগ্য হিসাবে চিহ্নিত করতেউদাহরণস্বরূপ, যদি আপনার কাছে এমন একটি ট্রেন মডেল থাকে যা একটি শিরোনাম ক্ষেত্র সহ ট্রেনের একটি টেবিল উপস্থাপন করে, তাহলে আপনি এটিকে এভাবে সংজ্ঞায়িত করতে পারেন:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;

class Train extends Model
{
use Searchable;

protected $fillable = ['title'];

public function searchableAs()
{
return 'trains_index';
}
}

searchableAs পদ্ধতিটি অনুমতি দেয় সার্চ ইঞ্জিনে ইনডেক্সের নাম কাস্টমাইজ করুনমডেল থেকে প্রাপ্ত ডিফল্ট নাম ব্যবহার করার পরিবর্তে, স্কাউট দায়িত্ব নেয়। এখান থেকে, স্কাউট নির্বাচিত ড্রাইভারের উপর নির্ভর করে রিমোট বা স্থানীয় সূচকের সাথে তৈরি, আপডেট এবং মুছে ফেলার ক্রিয়াকলাপগুলিকে সিঙ্ক্রোনাইজ করে।

অ্যালগোলিয়ার সাথে লারাভেল স্কাউট: বিদ্যুৎ-দ্রুত SaaS অনুসন্ধান

অ্যালগোলিয়া একটি SaaS পরিষেবা যা এর উপর দৃষ্টি নিবদ্ধ করে বিপুল পরিমাণে ডেটা জুড়ে খুব দ্রুত এবং প্রাসঙ্গিক অনুসন্ধান অফার করার জন্যএতে সূচী, প্রাসঙ্গিকতার নিয়ম, প্রতিশব্দ ইত্যাদি পরিচালনার জন্য একটি ওয়েব প্যানেল রয়েছে এবং এটি স্কাউট এবং অফিসিয়াল পিএইচপি ক্লায়েন্টের মাধ্যমে লারাভেলের সাথে খুব ভালভাবে সংহত হয়।

স্কাউটের সাথে অ্যালগোলিয়া ব্যবহার করার জন্য, আপনাকে কম্পোজার দিয়ে এর PHP ক্লায়েন্ট ইনস্টল করতে হবে, .env ফাইলে (অ্যাপ্লিকেশন আইডি এবং অ্যাডমিন API কী) আপনার শংসাপত্র নিবন্ধন করতে হবে, এবং SCOUT_DRIVER=algolia সেট করুন স্কাউটকে এই ইঞ্জিনটি ব্যবহার করতে বলার জন্য। অ্যালগোলিয়া প্যানেল থেকে আপনি অ্যাপ্লিকেশন আইডি এবং প্রশাসনিক কী উভয়ই পেতে পারেন।

পরিবেশ কনফিগার হয়ে গেলে, আপনি যেমন পদ্ধতি ব্যবহার করতে পারেন ট্রেন::অনুসন্ধান('টেক্সট')->পৃষ্ঠা(6) সূচীকৃত ক্ষেত্রগুলিতে অনুসন্ধান করার জন্য সরাসরি আপনার কন্ট্রোলারে যান, ফলাফলগুলি পৃষ্ঠাযুক্ত এলোকোয়েন্ট ফর্ম্যাটে পান যা একটি ব্লেড ভিউতে পাঠানোর জন্য প্রস্তুত।

উদাহরণস্বরূপতোমার একটা কন্ট্রোলার থাকতে পারে। সূচক যা সমস্ত ট্রেনের তালিকা তৈরি করে অথবা যদি একটি titlesearch প্যারামিটার পাওয়া যায় তাহলে অনুসন্ধান করে, এবং সূচকে নতুন ট্রেন সন্নিবেশ করার জন্য একটি create পদ্ধতি:

public function index(Request $request)
{
if ($request->has('titlesearch')) {
$trains = Train::search($request->titlesearch)->paginate(6);
} else {
$trains = Train::paginate(6);
}

return view('Train-search', compact('trains'));
}

public function create(Request $request)
{
$this->validate($request, ['title' => 'required']);
Train::create($request->all());
return back();
}

সংশ্লিষ্ট দৃশ্যে, আপনি একত্রিত করতে পারেন নতুন ট্রেন নিবন্ধনের জন্য একটি ফর্ম এবং আরেকটি GET ফর্ম যেখানে একটি titlesearch ফিল্ড থাকবে যা জমা দেওয়ার পরে অনুসন্ধান শুরু করবে। তারপর আপনাকে কেবল ট্রেনের সংগ্রহের মাধ্যমে পুনরাবৃত্তি করতে হবে এবং Laravel দ্বারা তৈরি পৃষ্ঠাকরণ লিঙ্কগুলির সুবিধা গ্রহণ করে একটি টেবিলে তাদের ক্ষেত্রগুলি প্রদর্শন করতে হবে।

মেইলিসার্চ, ডাটাবেস এবং সংগ্রহের মাধ্যমে স্কাউট করুন

যদি আপনি বাইরের পরিষেবা এড়িয়ে চলতে চান, মেইলিসার্চ একটি ওপেন সোর্স সার্চ ইঞ্জিন যা আপনি স্থানীয়ভাবে বা আপনার অবকাঠামোতে স্থাপন করতে পারেন। স্কাউট অ্যালগোলিয়ার মতোই মেইলিসার্চের সাথে একীভূত হয়, কেবল ড্রাইভার পরিবর্তন করে এবং .env ফাইলে MEILISEARCH_HOST এবং MEILISEARCH_KEY ভেরিয়েবল যোগ করে।

এটি ব্যবহার করার জন্য, আপনাকে Meilisearch PHP ক্লায়েন্ট ইনস্টল করতে হবে, SCOUT_DRIVER=মেইলিসার্চ এবং MEILISEARCH_HOST কে ইনস্ট্যান্স URL-এ নির্দেশ করুন (উদাহরণস্বরূপ, http://127.0.0.1:7700)। যদি আপনার আগে থেকেই পূর্ববর্তী রেকর্ড থাকে, তাহলে আপনি php artisan scout:import "App\Models\Train" কমান্ড দিয়ে সেগুলিকে সূচী করতে পারেন যাতে ইঞ্জিনে সেগুলি উপলব্ধ থাকে।

ছোট বা মাঝারি অ্যাপ্লিকেশনগুলিতে, আপনি এটিও বেছে নিতে পারেন স্কাউট ড্রাইভার ডাটাবেসএটি আপনার MySQL বা PostgreSQL ডাটাবেসে পূর্ণ-পাঠ্য সূচক এবং LIKE কমান্ড ব্যবহার করে। এই ক্ষেত্রে, আপনার কোনও বহিরাগত পরিষেবার প্রয়োজন নেই; কেবল SCOUT_DRIVER=database সেট করুন যাতে Scout ডাটাবেসটিকে তার সার্চ ইঞ্জিন হিসাবে ব্যবহার করতে পারে।

আর একটি আকর্ষণীয় বিকল্প হ'ল ড্রাইভার সংগ্রহ, যা মেমরিতে Eloquent সংগ্রহের উপর কাজ করেএই ইঞ্জিনটি WHERE ক্লজ এবং কালেকশন ফিল্টারিং ব্যবহার করে ফলাফল ফিল্টার করে এবং Laravel দ্বারা সমর্থিত যেকোনো ডাটাবেসের সাথে সামঞ্জস্যপূর্ণ। আপনি `SCOUT_DRIVER=collection` দিয়ে অথবা আরও নির্দিষ্ট সেটিংসের জন্য Scout কনফিগারেশন ফাইলটি সামঞ্জস্য করে এটি সক্রিয় করতে পারেন।

এক্সপ্লোরার ব্যবহার করে ইলাস্টিকসার্চের সাথে ইন্টিগ্রেশন

যদি আপনার অনুসন্ধানের প্রয়োজনে বিপুল পরিমাণ তথ্য এবং রিয়েল-টাইম বিশ্লেষণ নিয়ে কাজ করাইলাস্টিকসার্চ একটি ক্লাসিক। লারাভেল ইকোসিস্টেমে, এটিকে স্কাউটের সাথে একীভূত করার একটি আধুনিক উপায় হল এক্সপ্লোরার কন্ট্রোলার ব্যবহার করা, যা আপনার মডেল এবং একটি ইলাস্টিকসার্চ ক্লাস্টারের মধ্যে সেতুবন্ধন হিসেবে কাজ করে।

এটি করার জন্য, ডকার সাধারণত একটি সমৃদ্ধ ডকার-কম্পোজ ফাইলের সাথে ব্যবহার করা হয় যা সাধারণ পরিষেবাগুলি (Laravel, MySQL, Redis, Meilisearch, ইত্যাদি) ছাড়াও, ইলাস্টিকসার্চ এবং কিবানা কন্টেইনারতারপর আপনি Composer এর মাধ্যমে jeroen-g/explorer প্যাকেজটি ইনস্টল করুন এবং কোন মডেলগুলিকে সূচীবদ্ধ করা উচিত তা নির্দেশ করার জন্য এর কনফিগারেশন ফাইলটি প্রকাশ করুন।

config/explorer.php ফাইলে আপনি আপনার মডেলগুলিকে indexes কী-এর অধীনে নিবন্ধন করতে পারেন, উদাহরণস্বরূপ যোগ করে অ্যাপ\মডেল\ট্রেন::ক্লাসঅতিরিক্তভাবে, আপনি SCOUT_DRIVER=elastic দিয়ে .env ফাইলে Scout ড্রাইভারটিকে elastic এ পরিবর্তন করুন যাতে সবকিছু Elasticsearch এর দিকে নির্দেশ করে।

ট্রেন মডেলের মধ্যে, এক্সপ্লোরড ইন্টারফেসটি বাস্তবায়ন করতে হবে এবং পদ্ধতিটি ওভাররাইড করতে হবে। ম্যাপেবলএএসযা সূচকে পাঠানো ক্ষেত্রগুলির মানচিত্র নির্ধারণ করে। একটি ন্যূনতম উদাহরণ হতে পারে:

use JeroenG\Explorer\Application\Explored;
use Laravel\Scout\Searchable;

class Train extends Model implements Explored
{
use Searchable;

protected $fillable = ['title'];

public function mappableAs(): array
{
return [
'id' => $this->id,
'title' => $this->title,
];
}
}

এখন থেকে, আপনি একই স্কাউট ইন্টারফেস ব্যবহার করে ইলাস্টিকসার্চে অনুসন্ধান শুরু করতে পারেন।, খুব কম প্রতিক্রিয়া সময় এবং এই ইঞ্জিনের সম্পূর্ণ ক্যোয়ারী শক্তি থেকে উপকৃত হচ্ছে, কিন্তু লারাভেল ইকোসিস্টেম ছাড়াই।

এই সমস্ত পদ্ধতির সাথে - ফেচ বা jQuery এর সাথে মৌলিক স্বয়ংসম্পূর্ণতা থেকে শুরু করে, Alpine.js এর সাথে ফ্রন্টএন্ড ফিল্টারিং, Laravel Scout এবং বিভিন্ন ড্রাইভারের সাথে পূর্ণ-পাঠ্য অনুসন্ধান - লারাভেল আপনাকে রিয়েল-টাইম অনুসন্ধান বাস্তবায়নের জন্য বিশাল পরিসরের বিকল্প দেয়। আপনার প্রকল্পের আকার, আপনার প্রয়োজনীয় কর্মক্ষমতা এবং আপনি যে পরিকাঠামো বজায় রাখতে ইচ্ছুক তা অনুসারে তৈরি করা হয়েছে।

সুচিপত্র

  ভিডিও গেম প্রোগ্রামিং: কীভাবে শুরু করবেন - ধাপে ধাপে নির্দেশিকা