অনুসন্ধানের ধরণ: লাইক, সম্পূর্ণ পাঠ্য বা সম্মিলিত?


48

বিভিন্ন অনুসন্ধানের প্রকারের মধ্যে পার্থক্য কী?

  • মত
  • সম্পূর্ণ লিখা
  • মিলিত

আমি কীভাবে সেই সেটিংগুলির জন্য অনুসন্ধানের আচরণ এবং কার্য সম্পাদন সম্পর্কে পরিবর্তন করতে আগ্রহী।

উত্তর:


63

সকলেই সর্বদা ম্যাজেন্টো অনুসন্ধান সম্পর্কে অভিযোগ করে তবে আমি বিশ্বাস করি আপনি যদি এটির পরিকল্পনা ও কনফিগার করার সময় ব্যয় করেন তবে এটি সত্যিই ভাল কাজ করতে পারে।


মত

কীওয়ার্ড ভিত্তিক অনুসন্ধানের পদ্ধতি, আপনার প্রশ্নকে পৃথক শব্দের মধ্যে ভাঙা। ক্লাসে 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_Mysql444 নং লাইনে দেখতে পাচ্ছেন :

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;
        }

আপনি দেখতে পাচ্ছেন এটি সম্পূর্ণ ফলাফলগুলি ফিরে আসার পরে পছন্দ মতো ফলাফল যুক্ত করে।


বিষয়গুলি লক্ষণীয়

  1. আমি আরও ভাল পারফরম্যান্স এবং প্রাসঙ্গিক ফলাফলের জন্য FULLTEXT ব্যবহার করার দৃEXT় পরামর্শ দিচ্ছি
  2. প্রতিটি বৈশিষ্ট্যের মধ্য দিয়ে যান এবং এটিকে পূর্ণ পাঠ্য সূচীতে যুক্ত করা প্রয়োজন কিনা তা বিবেচনা করুন ('দ্রুত অনুসন্ধানে ব্যবহার করুন')
  3. ডিফল্টরূপে পণ্য বর্ণনাকে ফুলটেক্স ইনডেক্সিংয়ে অন্তর্ভুক্ত করা হয়। অপ্রাসঙ্গিক প্রসঙ্গে ব্যবহৃত শব্দগুলির সাথে প্রাসঙ্গিকতার স্কোরগুলিকে দূষিত করার কারণে আমি প্রায়শই বর্ণনাগুলি সরিয়ে ফেলি।
  4. আপনার মেটা বৈশিষ্ট্যগুলি পূর্ণ পাঠ্য সূচীতে ব্যবহৃত হয়েছে তা নিশ্চিত করুন। অর্থবহ বিষয়বস্তু দিয়ে এগুলিকে বসান।
  5. মাইএসকিউএল ফুলট্যাক্টে কিছু গণ্ডগোল রয়েছে - এতে অবহেলিত শব্দের একটি তালিকা রয়েছে যা যদি আপনার পণ্যের নামগুলি এই শব্দগুলি দিয়ে তৈরি করা হয় তবে সমস্যা হতে পারে!
  6. মাইএসকিউএল ডিফল্টরূপে 4 টি অক্ষরের নীচে ফুলটেক্সট ক্যোয়ারী উপেক্ষা করে । সংক্ষিপ্ত মানগুলির বৈশিষ্ট্যগুলি উপেক্ষা করা হবে যদি না আপনি এই মানটি পরিবর্তন করেন।

সম্মিলিত পদ্ধতিটি ব্যবহার করে আপনি 5 এবং 6 পয়েন্টের আশেপাশে কাজ করতে পারেন - LIKE ফলাফলগুলি পুরো শব্দটিকে অগ্রাহ্য করা কোনও শব্দের ক্ষতিপূরণ দিতে হবে।


7

"মত" অনুসন্ধানটি '% কীওয়ার্ড%' ক্যোরির মতো ব্যবহার করে যথারীতি ম্যাচের মতো করবে। এই ধরণের অনুসন্ধানের একটি সুবিধা হ'ল এটি আংশিক শব্দের সাথে মিলবে। যদিও এর গুরুতর ত্রুটি রয়েছে:

  • দ্রুত একটি পারফরম্যান্স সমস্যা হয়ে উঠবে
  • প্রাসঙ্গিকতা খারাপ। "প্রাসঙ্গিকতা" এর মত প্রশ্নের মতো আসলে কোন ধারণা নেই

ফুলটেক্সট অনুসন্ধানটি মাইআইএসএএম ফুলটেক্সট অনুসন্ধান ( http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html ) ব্যবহার করে কাজ করবে । আপনার এটি পড়া উচিত, তবে সংক্ষেপে:

  • পারফরম্যান্স আরও ভাল
  • এটি স্টপওয়ার্ডগুলি বাদ দেবে (যেমন "এবং", "সহ" ইত্যাদি)
  • এটি প্রাসঙ্গিকতার ভিত্তিতে প্রতিটি ফলাফলকে ডিফল্টরূপে একটি স্কোর বরাদ্দ করবে

ফুলটেক্সট এর অপূর্ণতা হ'ল এটি আংশিক মিলগুলি করতে পারে না, অর্থাত্ "Pho" এর অনুসন্ধানে "ফোন" পাওয়া যাবে না

"সম্মিলিত" অনুসন্ধান ফলাফলের সাথে মেলে একটি "পছন্দ" শর্ত ব্যবহার করবে তবে সেগুলি সাজানোর জন্য পূর্ণ পাঠ্য অনুসন্ধানের স্কোরকেও বিবেচনা করবে। এর অর্থ হ'ল আপনি আরও ফলাফল পাবেন (যেমন সন্ধানটি আংশিক মিলও করবে) এবং পূর্ণ পাঠ্য স্কোরের কারণে সেগুলি আরও ভাল অর্ডার দেওয়া হবে।

অন্য লোকেরা যেমন বলেছিল, আপনি যদি অনুসন্ধানে গুরুতর হন তবে আপনার সোলার ব্যবহার করা উচিত। এটি উপায়টি দ্রুত এবং আরও অনেক প্রাসঙ্গিক। আপনাকে Magento EE এর মালিক হতে হবে এবং সোলার নিজেই ইনস্টল করতে হবে।


1
এই উত্তরের জন্য ধন্যবাদ। আমার কেন ম্যাজেন্টো ইই দরকার?
পাইপ নাম্বার

1
সোলার অনুসন্ধানটি ম্যাজেন্টো এন্টারপ্রাইজের অংশ (সম্প্রদায়ের কোনও বৈশিষ্ট্য নয়)। এমন কিছু এক্সটেনশন রয়েছে যা magentocommerce.com/magento-connect/solr-bridge-search.html এর মতো সম্প্রদায়গুলিতে অনুসন্ধান প্রয়োগ করবে । যদিও আমি সেগুলি ব্যবহার করি নি।
পল গ্রিগোরুটা

6

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

তবে আপনি যদি কোনও পাওয়ারফুল অনুসন্ধান সমাধান খুঁজছেন তবে এই প্রকল্পটি দেখুন: 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


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

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

@ ফিয়াসকো ল্যাবস, আপনি কীভাবে এতে পরিবর্তন ORকরবেন AND?
মাইকেল ইয়েগার

3

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 | 

(প্রতিটি "|" এবং "/" এর আগে এবং পরে স্পেস নোট করুন এবং প্রথম শব্দের আগে একটি স্থান)


1
আপনি ওভাররাইডের কথা উল্লেখ করেছেন app/code/local/Mage/Core/Model/Resource/Helper/Abstract.php। এই ফাইলটি অনুসন্ধান কার্যকারিতা ব্যতীত অন্য কোথাও ব্যবহৃত হয় না?
অমিতশ্রী

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

2

উপরের কোনওটি নয়, ব্লাস্ট লুসিন অনুসন্ধান বা এক্সটেন্ডিওয়্যার লুসিন অনুসন্ধানের মতো কিছু ইনস্টল করে বিল্ট ইন জেন্ড লুসিন অনুসন্ধান ইঞ্জিন ব্যবহার করুন। প্রাসঙ্গিকতা মাইএসকিউএল অফারগুলির যে কোনওটি প্রহার করে।

হ্যাঁ, আমি গৃহীত উত্তরের সমস্ত পুনরাবৃত্তি পেরিয়ে গিয়েছিলাম, তবে সত্যি বলতে, অপ্টিমাইজড স্টক ম্যাজেন্টো অনুসন্ধানে এখনও খুব অভাব ছিল।

অন্যদিকে Lucene, সরবরাহ করে এবং ইতিমধ্যে Magento ইনস্টলের অন্তর্ভুক্ত, এটি সক্ষম করার জন্য এটির একটি মডিউল প্রয়োজন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.