- लारवेल आपको AJAX के साथ सरल खोज इंजन से लेकर लारवेल स्काउट और अल्गोलिया, मेइलीसर्च या इलास्टिकसर्च जैसे बाहरी खोज इंजनों का उपयोग करके उन्नत पूर्ण-पाठ खोजों तक सब कुछ लागू करने की अनुमति देता है।
- हल्के खोजों के लिए, Alpine.js या मूल फ़ेच अनुरोधों के साथ फ्रंटएंड पर फ़िल्टरिंग से सर्वर पर अधिक भार पड़ने से बचा जा सकता है और छोटी सूचियों में उपयोगकर्ता अनुभव में सुधार होता है।
- लारवेल स्काउट विभिन्न खोज इंजनों के साथ एकीकरण को केंद्रीकृत करता है और मॉडलों को खोज योग्य के रूप में चिह्नित करना, इंडेक्स प्रबंधित करना और समान रूप से क्वेरी लॉन्च करना आसान बनाता है।
- इंजन (SaaS, ओपन सोर्स या डेटाबेस) का चयन डेटा की मात्रा, खोजों की जटिलता और परियोजना के प्रदर्शन और रखरखाव आवश्यकताओं पर आधारित होना चाहिए।
जब आप Laravel के साथ काम करना शुरू करते हैं और आपको इसकी आवश्यकता होती है वास्तविक समय खोज इंजन जो तुरंत प्रतिक्रिया देता हैहजारों संभावित तरीकों के बीच खो जाना आसान है: AJAX के साथ fetch, jQuery, Alpine.js, स्काउट के साथ Algolia या Meilisearch, फ्रंटएंड फ़िल्टरिंग, आदि। अच्छी खबर यह है कि Laravel पारिस्थितिकी तंत्र पहले से ही व्यावहारिक रूप से वह सब कुछ प्रदान करता है जो आपको प्रयास में बिना हारे एक सुचारू और तेज़ खोज सेट करने के लिए चाहिए।
इस लेख में आप देखेंगे कि कैसे इकट्ठा किया जाता है लारवेल में विभिन्न प्रकार की वास्तविक समय खोजक्लासिक AJAX ऑटोकम्प्लीट से लेकर लारवेल स्काउट और अल्गोलिया, मीलीसर्च, डेटाबेस या यहाँ तक कि इलास्टिक्सर्च जैसे सर्च इंजनों के साथ फुल-टेक्स्ट सर्च तक। जब डेटा वॉल्यूम कम हो, तो आपको ब्राउज़र में सीधे डेटा फ़िल्टर करने के लिए Alpine.js जैसे हल्के विकल्प भी मिलेंगे।
लारवेल में वास्तविक समय खोज क्या है और मूल बातें कैसे काम करती हैं?
वास्तविक समय खोज के पीछे विचार यह है कि, जैसे ही उपयोगकर्ता किसी टेक्स्ट फ़ील्ड में टाइप करता हैएक क्वेरी ट्रिगर होती है और परिणाम पृष्ठ को पुनः लोड किए बिना अपडेट हो जाते हैं। तकनीकी रूप से, इसमें तीन प्रमुख घटक शामिल होते हैं: लारवेल बैकएंड, ब्राउज़र का जावास्क्रिप्ट, और JSON प्रारूप में डेटा का आदान-प्रदान।
एक तरफ, Laravel सर्वर परत के रूप में कार्य करता है यह अनुरोध प्राप्त करने, खोज मापदंडों (प्रविष्ट पाठ) की व्याख्या करने, डेटाबेस से क्वेरी करने और एक संरचित प्रतिक्रिया, आमतौर पर JSON प्रारूप में, लौटाने के लिए ज़िम्मेदार है। यह प्रतिक्रिया सफलता, त्रुटि, या कोई परिणाम नहीं मिलने का संकेत दे सकती है।
सबसे दूर के छोर पर, जावास्क्रिप्ट उपयोगकर्ता घटनाओं को सुनने के लिए जिम्मेदार है। खोज इनपुट पर, बैकएंड पर एसिंक्रोनस अनुरोध (AJAX) भेजें और ब्राउज़र द्वारा पूर्ण रीफ़्रेश किए बिना पृष्ठ पर लौटाए गए डेटा को प्रदर्शित करें। यह नेटिव फ़ेच, jQuery AJAX, या Alpine.js जैसी छोटी रिएक्टिव लाइब्रेरीज़ के साथ किया जा सकता है।
इस बुनियादी तंत्र के साथ आप एक से निर्माण कर सकते हैं कुछ रिकॉर्ड के साथ सरल स्वतः पूर्ण, प्रासंगिकता, पृष्ठांकन और फिल्टर के साथ एक उन्नत पूर्ण-पाठ खोज इंजन तक, लारवेल स्काउट और खोज के लिए अनुकूलित बाहरी खोज इंजन जैसे पुस्तकालयों द्वारा समर्थित।
एक बुनियादी वास्तविक समय खोज इंजन के लिए मॉडल, रूट और नियंत्रक
इससे पहले कि आप जावास्क्रिप्ट में आगे बढ़ें, आपको यह सुनिश्चित करना होगा कि लारवेल पक्ष अच्छी तरह से व्यवस्थित है: खोज करने के लिए एक एलोक्वेंट मॉडल, स्पष्ट मार्ग और एक समर्पित नियंत्रक वास्तविक समय में खोज तर्क का प्रबंधन करने के लिए।
पहला कदम एक एलोक्वेंट मॉडल तैयार करना है जो उस तालिका का प्रतिनिधित्व करता है जहाँ आप खोज करने जा रहे हैं। देशों की एक तालिका और एक मॉडल की कल्पना करें जिसे माता - पिता बहुत सरल, बिना टाइमस्टैम्प के और बल्क असाइनमेंट की अनुमति के साथ:
खोजों के लिए न्यूनतम वाक्पटु मॉडल का उदाहरण:
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 में भेजी जाती है, जिससे फ्रंटएंड का काम बहुत आसान हो जाता है।
प्रतिक्रियाशील खोज के लिए ब्लेड दृश्य और जावास्क्रिप्ट फ़ेच
मॉडल, रूट और नियंत्रक तैयार होने के बाद, दृश्य भाग बनाने का समय आ गया है: एक खोज फ़ील्ड और परिणाम प्रदर्शित करने के लिए एक ब्लॉक वाला फ़ॉर्म, साथ ही जावास्क्रिप्ट पृष्ठभूमि में अनुरोध करने के लिए जिम्मेदार है।
ब्लेड दृश्य बहुत सरल हो सकता है, जो इस पर निर्भर करता है सीएसआरएफ टोकन जिसे Laravel 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>
इस उदाहरण में स्क्रिप्ट खोज इनपुट पर keyup इवेंट सुनेंप्रत्येक कीस्ट्रोक /search पथ पर एक फ़ेच अनुरोध ट्रिगर करता है। फ़ील्ड का वर्तमान टेक्स्ट JSON फ़ॉर्मैट में भेजा जाता है, और X-Requested-With जैसे की हेडर यह दर्शाने के लिए शामिल किए जाते हैं कि यह AJAX है, साथ ही Laravel की मूल सुरक्षा को बायपास करने के लिए CSRF टोकन भी शामिल किया जाता है।
जब प्रतिक्रिया आती है, तो इसे JSON में परिवर्तित कर दिया जाता है और गतिशील रूप से उत्पन्न किया जाता है। परिणामों के साथ एक छोटी HTML सूचीया जब क्वेरी से कोई डेटा नहीं मिलता, तो "कोई परिणाम नहीं मिला" जैसा संदेश। यह सब पेज को दोबारा लोड किए बिना, उपयोगकर्ता के लिए स्वाभाविक तरीके से होता है।
इस पैटर्न को छोटे UX विवरणों के साथ और अधिक परिष्कृत किया जा सकता है, जैसे कि विलंब (डिबाउंस) कुंजी-स्ट्रोक्स के बीच, लोडर प्रदर्शित करें या नेटवर्क त्रुटियों को संभालें, ताकि कुछ विफल होने पर इंटरफ़ेस को स्थिर होने से रोका जा सके।
jQuery का उपयोग करके Laravel और AJAX के साथ लाइव खोज
हालाँकि आजकल फ़ेच का चलन काफी बढ़ गया है, jQuery AJAX बहुत लोकप्रिय बना हुआ है विरासती परियोजनाओं में या उन टीमों में जहाँ इसे पहले से ही लागू किया जा चुका है। विचार बिल्कुल वही है: उपयोगकर्ता जो टाइप करता है उसे कैप्चर करें, एक एसिंक्रोनस अनुरोध करें, और DOM को रीफ़्रेश करें।
लाइव खोज के लिए Laravel में jQuery के साथ एक विशिष्ट कार्यप्रवाह में आमतौर पर ये बुनियादी चरण शामिल होते हैं: एक विशिष्ट मार्ग परिभाषित करें, एक समर्पित नियंत्रक बनाएं, खोज इनपुट के साथ ब्लेड दृश्य बनाएं और अंत में, jQuery कोड जोड़ें जो टाइप करते ही AJAX को ट्रिगर करता है।
यह प्रक्रिया इस प्रकार काम करती है: जब उपयोगकर्ता टाइप करना शुरू करता है, jQuery सर्वर को एक क्वेरी भेजता है खोज स्ट्रिंग के साथ। Laravel डेटाबेस में जानकारी को फ़िल्टर करता है, मिलान परिणामों के साथ एक JSON लौटाता है, और jQuery मिलानों को दर्शाने के लिए पृष्ठ पर एक HTML कंटेनर को अपडेट करता है, और यह सब कुछ ही मिलीसेकंड में होता है।
jQuery का उपयोग करने का लाभ यह है कि यह AJAX के वाक्यविन्यास का सारांश प्रस्तुत करता है और अगर आपके प्रोजेक्ट में पहले से ही यह लाइब्रेरी मौजूद है, तो इसे पढ़ना बहुत आसान है। हालाँकि, आप एक अतिरिक्त निर्भरता जोड़ रहे हैं जो शायद ज़रूरी न हो अगर आप आधुनिक जावास्क्रिप्ट और नेटिव फ़ेच के साथ काम कर सकते हैं।
Alpine.js के साथ फ्रंटएंड पर वास्तविक समय फ़िल्टरिंग और खोज
जब प्रदर्शित किया जाने वाला डेटा अपेक्षाकृत छोटा होता है (उदाहरण के लिए, 50 से कम आइटम), जटिल खोजों वाला बैकएंड सेट अप करना हमेशा उपयोगी नहीं होता। ऐसे मामलों में, एक बहुत ही सुविधाजनक विकल्प है Alpine.js के साथ सीधे ब्राउज़र में फ़िल्टर करें, उपयोगकर्ता द्वारा टाइप करते समय सर्वर से अनुरोध किए बिना।
विचार यह है कि प्रत्येक तत्व के लिए एक खोज स्ट्रिंग की पूर्व-गणना की जाए (उदाहरण के लिए, नाम, विवरण और श्रेणी लोअरकेस में), इसे डेटा-खोज-टेक्स्ट विशेषता में संग्रहीत किया जाए, और 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 प्रोजेक्ट बनाएं या मौजूदा प्रोजेक्ट का पुनः उपयोग करेंइसे लॉन्च करने के लिए, Docker (उदाहरण के लिए, Laravel Sail के साथ) का उपयोग करें और फिर Composer के साथ लाइब्रेरी इंस्टॉल करें। ऐसा करने के बाद, scout.php कॉन्फ़िगरेशन फ़ाइल प्रकाशित करें और अपने इच्छित ड्राइवर के अनुसार एनवायरनमेंट वैरिएबल समायोजित करें।
एक सामान्य कार्यप्रवाह यह होगा कि स्काउट को कंपोजर के साथ स्थापित किया जाए, इसके कॉन्फ़िगरेशन को प्रकाशित किया जाए, और SCOUT_QUEUE=true के साथ अनुक्रमण कतार सक्रिय करें .env फ़ाइल में, सुनिश्चित करें कि संसाधन-गहन संचालन पृष्ठभूमि में संसाधित हों, जिससे एप्लिकेशन प्रतिक्रिया समय में सुधार हो। इसके अतिरिक्त, आपको यह सुनिश्चित करना होगा कि DB_HOST आपके द्वारा उपयोग किए जा रहे डेटाबेस की ओर इंगित करे, जो विशेष रूप से महत्वपूर्ण है यदि आप Docker कंटेनर का उपयोग कर रहे हैं।
स्काउट खोजों में भाग लेने के लिए एक मॉडल के लिए यह आवश्यक है कि खोज योग्य विशेषता जोड़कर इसे स्पष्ट रूप से खोज योग्य के रूप में चिह्नित करनाउदाहरण के लिए, यदि आपके पास एक ट्रेन मॉडल है जो शीर्षक फ़ील्ड के साथ ट्रेनों की एक तालिका का प्रतिनिधित्व करता है, तो आप इसे इस तरह परिभाषित कर सकते हैं:
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 क्लाइंट के माध्यम से लारवेल के साथ बहुत अच्छी तरह से एकीकृत होता है।
स्काउट के साथ अल्गोलिया का उपयोग करने के लिए, आपको कंपोजर के साथ इसके PHP क्लाइंट को स्थापित करना होगा, .env फ़ाइल में अपने क्रेडेंशियल्स (एप्लिकेशन आईडी और एडमिन एपीआई कुंजी) पंजीकृत करने होंगे, और SCOUT_DRIVER=algolia सेट करें स्काउट को इस इंजन का उपयोग करने के लिए कहने के लिए। अल्गोलिया पैनल से आप एप्लिकेशन आईडी और प्रशासनिक कुंजी दोनों प्राप्त कर सकते हैं।
एक बार वातावरण कॉन्फ़िगर हो जाने के बाद, आप इस तरह की विधियों का उपयोग कर सकते हैं ट्रेन::खोज('पाठ')->पृष्ठांकन(6) अनुक्रमित फ़ील्ड पर खोज करने के लिए सीधे अपने नियंत्रकों में, परिणाम पृष्ठांकित एलोक्वेंट प्रारूप में प्राप्त करें, जो ब्लेड दृश्य में भेजने के लिए तैयार है।
पोर ejemploआपके पास एक नियंत्रक हो सकता है अनुक्रमणिका जो सभी ट्रेनों को सूचीबद्ध करता है या यदि 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 द्वारा उत्पन्न पृष्ठांकन लिंक का लाभ उठाते हुए।
Meilisearch, डेटाबेस और संग्रह के साथ स्काउट
यदि आप बाहरी सेवाओं से बचना चाहते हैं, Meilisearch एक खुला स्रोत खोज इंजन है जिसे आप स्थानीय रूप से या अपने इंफ्रास्ट्रक्चर पर तैनात कर सकते हैं। स्काउट, अल्गोलिया की तरह ही, Meilisearch के साथ एकीकृत होता है, बस ड्राइवर बदलकर और MEILISEARCH_HOST और MEILISEARCH_KEY वैरिएबल को .env फ़ाइल में जोड़कर।
इसका उपयोग करने के लिए, आप Meilisearch PHP क्लाइंट स्थापित करें, समायोजित करें SCOUT_DRIVER=meilisearch और MEILISEARCH_HOST को इंस्टेंस URL पर इंगित करें (उदाहरण के लिए, http://127.0.0.1:7700)। यदि आपके पास पहले से ही पुराने रिकॉर्ड हैं, तो आप उन्हें php artisan scout:import "App\Models\Train" कमांड से इंडेक्स कर सकते हैं ताकि इंजन के पास वे उपलब्ध हों।
छोटे या मध्यम अनुप्रयोगों में, आप यह भी चुन सकते हैं स्काउट ड्राइवर डेटाबेसयह आपके MySQL या PostgreSQL डेटाबेस पर पूर्ण-पाठ अनुक्रमणिकाओं और LIKE कमांड का लाभ उठाता है। इस स्थिति में, आपको किसी बाहरी सेवा की आवश्यकता नहीं है; स्काउट को डेटाबेस को ही अपने खोज इंजन के रूप में उपयोग करने के लिए बस SCOUT_DRIVER=database सेट करें।
एक और दिलचस्प विकल्प है ड्राइवर संग्रह, जो मेमोरी में एलोक्वेंट संग्रहों पर काम करता हैयह इंजन WHERE क्लॉज़ और कलेक्शन फ़िल्टरिंग का उपयोग करके परिणामों को फ़िल्टर करता है, और Laravel द्वारा समर्थित किसी भी डेटाबेस के साथ संगत है। आप इसे `SCOUT_DRIVER=collection` के साथ या अधिक विशिष्ट सेटिंग्स के लिए Scout कॉन्फ़िगरेशन फ़ाइल को समायोजित करके सक्रिय कर सकते हैं।
एक्सप्लोरर का उपयोग करके इलास्टिकसर्च के साथ एकीकरण
यदि आपकी खोज आवश्यकताओं में शामिल हैं विशाल मात्रा में डेटा और वास्तविक समय विश्लेषण के साथ काम करनाइलास्टिक्सर्च एक क्लासिक है। लारवेल इकोसिस्टम में, इसे स्काउट के साथ एकीकृत करने का एक आधुनिक तरीका एक्सप्लोरर कंट्रोलर का उपयोग करना है, जो आपके मॉडल और इलास्टिक्सर्च क्लस्टर के बीच एक सेतु का काम करता है।
ऐसा करने के लिए, आमतौर पर Docker का उपयोग किया जाता है, साथ ही एक समृद्ध docker-compose फ़ाइल का उपयोग किया जाता है, जो कि विशिष्ट सेवाओं (Laravel, MySQL, Redis, Meilisearch, आदि) के अलावा, इलास्टिक्सर्च और किबाना कंटेनरफिर आप कंपोजर के माध्यम से jeroen-g/explorer पैकेज स्थापित करते हैं और इसकी कॉन्फ़िगरेशन फ़ाइल प्रकाशित करते हैं ताकि यह इंगित किया जा सके कि कौन से मॉडल को अनुक्रमित किया जाना चाहिए।
config/explorer.php फ़ाइल में आप अपने मॉडल को indexes कुंजी के अंतर्गत पंजीकृत कर सकते हैं, उदाहरण के लिए जोड़कर ऐप\मॉडल\ट्रेन::क्लासइसके अतिरिक्त, आप .env फ़ाइल में SCOUT_DRIVER=elastic के साथ स्काउट ड्राइवर को इलास्टिक में बदल देते हैं, ताकि सब कुछ Elasticsearch की ओर इंगित हो।
ट्रेन मॉडल के भीतर, एक्सप्लोर इंटरफ़ेस को कार्यान्वित किया जाना चाहिए और विधि को ओवरराइड किया जाना चाहिए। मैप करने योग्यAsजो इंडेक्स को भेजे जाने वाले फ़ील्ड्स का मैप परिभाषित करता है। एक छोटा सा उदाहरण यह होगा:
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 और विभिन्न ड्राइवरों के साथ पूर्ण-पाठ खोज तक - लारवेल आपको वास्तविक समय की खोजों को लागू करने के लिए विकल्पों की एक विशाल श्रृंखला प्रदान करता है आपकी परियोजना के आकार, आपके लिए आवश्यक प्रदर्शन, तथा आपके द्वारा बनाए रखने के लिए तैयार बुनियादी ढांचे के अनुरूप।
विषयसूची
- लारवेल में वास्तविक समय खोज क्या है और मूल बातें कैसे काम करती हैं?
- एक बुनियादी वास्तविक समय खोज इंजन के लिए मॉडल, रूट और नियंत्रक
- प्रतिक्रियाशील खोज के लिए ब्लेड दृश्य और जावास्क्रिप्ट फ़ेच
- jQuery का उपयोग करके Laravel और AJAX के साथ लाइव खोज
- Alpine.js के साथ फ्रंटएंड पर वास्तविक समय फ़िल्टरिंग और खोज
- लारवेल स्काउट: विशेष इंजनों के साथ पूर्ण-पाठ खोज
- अल्गोलिया के साथ लारवेल स्काउट: बिजली की गति से चलने वाली SaaS खोज
- Meilisearch, डेटाबेस और संग्रह के साथ स्काउट
- एक्सप्लोरर का उपयोग करके इलास्टिकसर्च के साथ एकीकरण