मैंने इसके बारे में बहुत सोचा और मुझे लगता है कि सबसे अच्छा तरीका यह होगा कि प्रति मॉडल 1 इंडेक्स का उपयोग करें और उस कॉलबैक का लाभ उठाएं जिसे आप ::search()
पर पास कर सकते हैं।
डेटा इंडेक्स करना
सबसे पहले आपको toSearchableArray()
use का उपयोग करना होगा डेटा तैयार करने के लिए। मैं हर अनावश्यक विशेषताओं (जैसे तिथियां) को उसके आईएसओ के तहत घोंसला सामग्री को अनसेट कर दूंगा।
{
objectID: 1,
en: {
title: "Title in english",
body: "trucated body in english"
},
fr: {
title: "Titre en français",
body: "contenu tronqué en français"
}
}
कृपया ध्यान दें कि अल्गोलिया में प्रति रिकॉर्ड 10KB की सीमा है। इसे संभालने का सबसे अच्छा तरीका है कि आप अपनी सबसे बड़ी विशेषताओं को छोटा कर दें। चिंता न करें, यह प्रासंगिकता को प्रभावित नहीं करता है . यदि आप अपने लेख के दूसरे भाग से चूक जाते हैं, तो आमतौर पर सभी प्रासंगिक सामग्री पहले भाग में होती है।
डैशबोर्ड में अल्गोलिया कॉन्फिगरेशन सेटअप करें
फिर अपने डैशबोर्ड पर जाएं और fr
. जोड़ें और en
searchableAttributes
. के लिए ।
खोज
आप searchableAttributes
. को प्रतिबंधित कर सकते हैं खोज के लिए पारित कॉलबैक के साथ क्वेरी समय पर
$lang = 'en';
Model::search($query, function ($algolia, $query, $options) use ($lang) {
$options = array_merge($options, [
'restrictSearchableAttributes' => [$lang],
]);
return $algolia->search($query, $options);
});
मैंने कुछ ऐसा ही हासिल करने के लिए एक विशेषता बनाई . उपयोग में आसान सिंटैक्स के लिए शायद आप कुछ ऐसा ही कर सकते हैं जैसे:
Model::searchLang($lang, $query);
सभी सोच के बाद, मुझे सच में लगता है कि यह आपकी बाधाओं के साथ लारवेल स्काउट का उपयोग करने का सबसे कम हैकी तरीका है।
कृपया मुझे बताएं कि आप क्या सोचते हैं :)