বিভিন্ন অনুসন্ধানের প্রকারের মধ্যে পার্থক্য কী?
- মত
- সম্পূর্ণ লিখা
- মিলিত
আমি কীভাবে সেই সেটিংগুলির জন্য অনুসন্ধানের আচরণ এবং কার্য সম্পাদন সম্পর্কে পরিবর্তন করতে আগ্রহী।
বিভিন্ন অনুসন্ধানের প্রকারের মধ্যে পার্থক্য কী?
আমি কীভাবে সেই সেটিংগুলির জন্য অনুসন্ধানের আচরণ এবং কার্য সম্পাদন সম্পর্কে পরিবর্তন করতে আগ্রহী।
উত্তর:
সকলেই সর্বদা ম্যাজেন্টো অনুসন্ধান সম্পর্কে অভিযোগ করে তবে আমি বিশ্বাস করি আপনি যদি এটির পরিকল্পনা ও কনফিগার করার সময় ব্যয় করেন তবে এটি সত্যিই ভাল কাজ করতে পারে।
কীওয়ার্ড ভিত্তিক অনুসন্ধানের পদ্ধতি, আপনার প্রশ্নকে পৃথক শব্দের মধ্যে ভাঙা। ক্লাসে 326 লাইন থেকে নিম্নলিখিতটি দেখুনMage_CatalogSearch_Model_Resource_Fulltext::prepareResult()
$words = Mage::helper('core/string')->splitWords($queryText, true, $query->getMaxQueryWords());
foreach ($words as $word) {
$like[] = $helper->getCILike('s.data_index', $word, array('position' => 'any'));
}
if ($like) {
$likeCond = '(' . join(' OR ', $like) . ')';
}
আপনি দেখতে পান যে এটি প্রতিটি শব্দকে আপনার অনুসন্ধানের ক্যোয়ারিতে বিভক্ত করে এবং তাদের মতো লাইক স্টেটমেন্টে যোগ দেয় - আপনি এরকম কিছু দিয়ে শেষ করেন:
WHERE `attribute` LIKE 'my' OR `attribute` LIKE 'search' OR `attribute` LIKE 'query'
এই পদ্ধতিটি নির্দিষ্ট স্টোর সেটআপগুলির জন্য কাজ করতে পারে যেখানে পণ্যের নামগুলি সাধারণ থাকে এবং গ্রাহকরা খুব নির্দিষ্ট আইটেম সন্ধান করে তবে আমার অভিজ্ঞতাতে এটি কোনও পছন্দ নয়।
প্রাসঙ্গিক ভিত্তিক অনুসন্ধান - প্রতিটি অনুসন্ধান ক্যোয়ারী মাইএসকিউএল এর ম্যাচ ... পুনরায় কোয়েরির ভিত্তিতে নির্ধারিত স্কোর হিসাবে গ্রেড করা হয় । আপনি এটিকে Mage_CatalogSearch_Model_Resource_Helper_Mysql4
44 নং লাইনে দেখতে পাচ্ছেন :
public function chooseFulltext($table, $alias, $select)
{
$field = new Zend_Db_Expr('MATCH ('.$alias.'.data_index) AGAINST (:query IN BOOLEAN MODE)');
$select->columns(array('relevance' => $field));
return $field;
}
পূর্ণ পাঠ্য অনুসন্ধানগুলি সম্পাদন করার সময় ডাটাবেস সারণি ম্যাগেন্টো ব্যবহার করে catalogsearch_fulltext
। একটি উদাহরণ মান:
EmCO0014e|Emma Certified|Emma Certified Organic Herbal Tonic Mist TRIAL/TRAVEL|Australian|Certified Organic|Palm Oil Free|Nut Free|Vegan Suitable|
এই মানগুলি ক্যাটালগ> বৈশিষ্ট্যগুলি> বৈশিষ্ট্যগুলি পরিচালনা করুন - এর অধীনে 'দ্রুত অনুসন্ধানে ব্যবহার করুন' হিসাবে নির্দিষ্ট করা বৈশিষ্ট্যের সাথে সরাসরি যুক্ত রয়েছে are
বেশ স্ব স্ব বর্ণনাকারী। 35_Mage_GGG.regsSL_Model_Resource_Fultext এর লাইনটি একবার দেখুন :
if ($likeCond != '' && $searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_COMBINE) {
$where .= ($where ? ' OR ' : '') . $likeCond;
} elseif ($likeCond != '' && $searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_LIKE) {
$select->columns(array('relevance' => new Zend_Db_Expr(0)));
$where = $likeCond;
}
আপনি দেখতে পাচ্ছেন এটি সম্পূর্ণ ফলাফলগুলি ফিরে আসার পরে পছন্দ মতো ফলাফল যুক্ত করে।
সম্মিলিত পদ্ধতিটি ব্যবহার করে আপনি 5 এবং 6 পয়েন্টের আশেপাশে কাজ করতে পারেন - LIKE ফলাফলগুলি পুরো শব্দটিকে অগ্রাহ্য করা কোনও শব্দের ক্ষতিপূরণ দিতে হবে।
"মত" অনুসন্ধানটি '% কীওয়ার্ড%' ক্যোরির মতো ব্যবহার করে যথারীতি ম্যাচের মতো করবে। এই ধরণের অনুসন্ধানের একটি সুবিধা হ'ল এটি আংশিক শব্দের সাথে মিলবে। যদিও এর গুরুতর ত্রুটি রয়েছে:
ফুলটেক্সট অনুসন্ধানটি মাইআইএসএএম ফুলটেক্সট অনুসন্ধান ( http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html ) ব্যবহার করে কাজ করবে । আপনার এটি পড়া উচিত, তবে সংক্ষেপে:
ফুলটেক্সট এর অপূর্ণতা হ'ল এটি আংশিক মিলগুলি করতে পারে না, অর্থাত্ "Pho" এর অনুসন্ধানে "ফোন" পাওয়া যাবে না
"সম্মিলিত" অনুসন্ধান ফলাফলের সাথে মেলে একটি "পছন্দ" শর্ত ব্যবহার করবে তবে সেগুলি সাজানোর জন্য পূর্ণ পাঠ্য অনুসন্ধানের স্কোরকেও বিবেচনা করবে। এর অর্থ হ'ল আপনি আরও ফলাফল পাবেন (যেমন সন্ধানটি আংশিক মিলও করবে) এবং পূর্ণ পাঠ্য স্কোরের কারণে সেগুলি আরও ভাল অর্ডার দেওয়া হবে।
অন্য লোকেরা যেমন বলেছিল, আপনি যদি অনুসন্ধানে গুরুতর হন তবে আপনার সোলার ব্যবহার করা উচিত। এটি উপায়টি দ্রুত এবং আরও অনেক প্রাসঙ্গিক। আপনাকে Magento EE এর মালিক হতে হবে এবং সোলার নিজেই ইনস্টল করতে হবে।
তারা ম্যাগেন্টো যেভাবে ক্যোয়ারী ব্যবহার করবে সে সম্পর্কে সরাসরি উল্লেখ রয়েছে। ব্যক্তিগতভাবে আমি মনে করি সম্পূর্ণ পাঠ্য অনুসন্ধানটি আরও শক্তিশালী এবং কর্মক্ষমতা আরও ভাল, বিশেষত যদি লাইক ওয়াইল্ডকার্ডের সাথে ব্যবহার করা হয় (%)। উভয়ের সংমিশ্রণ সম্ভবত সবচেয়ে নির্ভুল হতে পারে তবে ওভারকিল হতে পারে। আমি পুরো টেক্সট দিয়ে থাকি
তবে আপনি যদি কোনও পাওয়ারফুল অনুসন্ধান সমাধান খুঁজছেন তবে এই প্রকল্পটি দেখুন: https://code.google.com/p/magento-solr/ । এসএলআরটি বড় সংগ্রহগুলি অনুসন্ধান করার জন্য তৈরি করা হয়েছিল এবং এটি কার্যকর করতে কিছুটা সময় লাগতে পারে তবে এর মূল্য হওয়া উচিত। ব্যক্তিগতভাবে আমি এটি আগে কখনও ম্যাগেন্তোতে ব্যবহার করি নি তবে অন্যান্য পিএইচপি প্রকল্পে এটি খুব ভাল সম্পাদন করেছে।
সম্পূর্ণ পাঠ্য ডকুমেন্টেশনটি এখানে পাওয়া যাবে: http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html এখানে ডকুমেন্টেশন লাইক করুন: http://dev.mysql.com/doc/refman/5.0 /en/string-comparison-functions.html
OR
করবেন AND
?
LIKE এর সাথে সমস্যা হ'ল এটি ডিফল্টরূপে "% শব্দ%" ব্যবহার করে। আমি এটি "টার্ম%" (শব্দের আগে স্থানটি নোট করুন) এর সাথে মেলে এটি পরিবর্তন করেছি, যাতে এটি শব্দের সূচনার সাথে মেলে। আমি অনুসন্ধানের শব্দটিতে চূড়ান্ত 'গুলি' কেটে ফেলেছি যাতে "গাড়ি" "গাড়ী" এর মতো একই ফলাফল দেয়। স্পষ্টতই এটি "শিশু" এর মতো অনিয়মিত বিশেষ্যগুলিতে সহায়তা করে না তবে যাইহোক এটি একটি বিশাল উন্নতি।
"ও" এর পরিবর্তে "ওআর" অনুসন্ধান করা ম্যাগান্টোর সবচেয়ে বড় অনির্বচনীয় অযৌক্তিক পদক্ষেপ। আপনি যদি "লাল গাড়ি" অনুসন্ধান করেন তবে আপনি সমস্ত কিছু লাল (গাড়ি, কুকুর, কাঁটাচামচ, পর্বতমালা ইত্যাদি) এবং সমস্ত ধরণের গাড়ি (লাল, নীল, সবুজ, হলুদ ইত্যাদি সহ) পেয়ে যাবেন। "এবং" এর সাহায্যে আপনি কেবলমাত্র "রেড" এবং "গাড়ি" সম্বলিত আইটেমগুলি পান যা অনুসন্ধানকে কীভাবে কাজ করা উচিত !
ঝাড়িসন.উ এর উত্তর থেকে উদ্ধৃতি, এটি পরিবর্তন করুন:
if ($like) {
$likeCond = '(' . join(' OR ', $like) . ')';
}
এটি:
if ($like) {
$likeCond = '(' . join(' AND ', $like) . ')';
}
আপনার অনুসন্ধান ফলাফলের প্রাসঙ্গিকতার জন্য তাত্ক্ষণিকভাবে, ব্যাপক উত্সাহ পেতে।
বহুবচন জিনিসের জন্য আপনি এই জাতীয় শব্দের চূড়ান্ত "গুলি" কেটে ফেলতে পারেন:
$words = Mage::helper('core/string')->splitWords($queryText, true, $query->getMaxQueryWords());
$words = array_walk($words,function(&$value, &$key) {
// use substr(...) instead of rtrim($value,'s')
// because rtrim will remove multiple esses
$value = (substr($value,-1,1) === 's') ? substr($value,0,strlen($value - 1)) : $value;
});
foreach ($words as $word) {
$like[] = $helper->getCILike('s.data_index', $word, array('position' => 'start')); // note I changed this to 'start'
}
ইন app/code/local/Mage/Core/Model/Resource/Helper/Abstract.php
আপনি কোর ফাইল ওভাররাইড করতে ও পরিবর্তন করতে পারেন public function escapeLikeValue($value, $options = array())
একটি দ্রুত শর্টকাট হিসাবে, যদিও পরামর্শ পথ একটি মডিউল একই জিনিস করতে হয়। তবে এটি এখানে।
নীচে if (isset($options['position'])) {
একটি সুইচ আছে। আমি 'স্টার্ট' এবং 'শেষ' এর জন্য মানগুলি আগে এবং পরে স্থানগুলি যুক্ত করার জন্য কেসগুলি পরিবর্তন করেছি:
case 'start':
$value = '% ' . $value . '%'; // added '% ' . before
// $value = $value . '%'; // core way (bad way)
break;
case 'end':
$value = '%' . $value . ' %'; // added . ' %' after
// $value = '%' . $value; // core way (bad way)
break;
কাজ করার আগে / পরে ফাঁকা জায়গাগুলির জন্য, সম্ভবত সার্চ ইনডেক্সটি যেভাবে তৈরি হয়েছিল তাও আপনাকে বদলাতে হবে, যেমনটি আমি করেছি, যাতে এটি নিশ্চিত হয় যে প্রতিটি শব্দের আগে এবং পরে স্থান রয়েছে। সূচক তৈরির ডিফল্ট উপায় হল প্রতিটি ক্ষেত্রকে '|' দ্বারা আলাদা করা (পাইপ চরিত্র), উদাহরণস্বরূপ রঙ, পণ্যের ধরণ, পণ্যের বর্ণনার জন্য "নীল | গাড়ি | খুব সুন্দর গাড়ি"। তবে আমার সূচকে "নীল | গাড়ি | খুব সুন্দর গাড়ি" রয়েছে। এমনকি আপনি অনুসন্ধান সূচকের বিল্ডিংও পরিবর্তন করতে পারেন যাতে সম্ভবত হাইফেনেটেড শব্দের প্রতিস্থাপন করা হয় ("সুপার-ফাস্ট কার" "সুপার ফাস্ট কার" হয়ে যায়), ইত্যাদি ইত্যাদি।
Jharrison.au এর উত্তর থেকে একটি নমুনা নেওয়া, যেখানে একটি ডিফল্ট অনুসন্ধান সূচী ক্ষেত্রটি দেখতে এই রকম হবে:
EmCO0014e|Emma Certified|Emma Certified Organic Herbal Tonic Mist TRIAL/TRAVEL|Australian|Certified Organic|Palm Oil Free|Nut Free|Vegan Suitable|
আমার এইরকম দেখতে হবে:
EmCO0014e | Emma Certified | Emma Certified Organic Herbal Tonic Mist TRIAL / TRAVEL | Australian | Certified Organic | Palm Oil Free | Nut Free | Vegan Suitable |
(প্রতিটি "|" এবং "/" এর আগে এবং পরে স্পেস নোট করুন এবং প্রথম শব্দের আগে একটি স্থান)
app/code/local/Mage/Core/Model/Resource/Helper/Abstract.php
। এই ফাইলটি অনুসন্ধান কার্যকারিতা ব্যতীত অন্য কোথাও ব্যবহৃত হয় না?
LIKE
এসকিউএল অনুসন্ধান অনুসন্ধানগুলিতে পালানোর জন্য , এবং অন্য কোথায় ম্যাজেন্টো সন্ধান করে তবে পণ্য অনুসন্ধান সূচীতে? আমি 2 বছর পূর্বে একটি প্রোডাকশন সাইটে এই পরিবর্তন করেছি এবং আমরা এর সাথে সম্পর্কিত কোনও বাগ খুঁজে পাইনি। এটি আসলে যা কিছু করে তা এটি তৈরি করা যাতে একটি "শব্দের সূচনা" এর আগে অবশ্যই একটি স্থান থাকতে পারে এবং "শব্দের শেষে" অবশ্যই তার পরে একটি স্থান থাকতে পারে। পৃথকভাবে, সূচীতে, আমি নিশ্চিত করি যে প্রতিটি শব্দের চারপাশে ফাঁকা স্থান রয়েছে।
উপরের কোনওটি নয়, ব্লাস্ট লুসিন অনুসন্ধান বা এক্সটেন্ডিওয়্যার লুসিন অনুসন্ধানের মতো কিছু ইনস্টল করে বিল্ট ইন জেন্ড লুসিন অনুসন্ধান ইঞ্জিন ব্যবহার করুন। প্রাসঙ্গিকতা মাইএসকিউএল অফারগুলির যে কোনওটি প্রহার করে।
হ্যাঁ, আমি গৃহীত উত্তরের সমস্ত পুনরাবৃত্তি পেরিয়ে গিয়েছিলাম, তবে সত্যি বলতে, অপ্টিমাইজড স্টক ম্যাজেন্টো অনুসন্ধানে এখনও খুব অভাব ছিল।
অন্যদিকে Lucene, সরবরাহ করে এবং ইতিমধ্যে Magento ইনস্টলের অন্তর্ভুক্ত, এটি সক্ষম করার জন্য এটির একটি মডিউল প্রয়োজন।