আমি এসকিউএল-তে "সম্পূর্ণ পাঠ্য অনুসন্ধান" উল্লেখ করে একটি পোস্ট পড়েছি।
আমি কেবল ভাবছিলাম যে এফটিএস এবং লাইকের মধ্যে পার্থক্য কী। আমি বেশ কয়েকটি নিবন্ধ পড়েছি তবে এটির ভালভাবে ব্যাখ্যা করা এমন কিছু খুঁজে পেলাম না।
আমি এসকিউএল-তে "সম্পূর্ণ পাঠ্য অনুসন্ধান" উল্লেখ করে একটি পোস্ট পড়েছি।
আমি কেবল ভাবছিলাম যে এফটিএস এবং লাইকের মধ্যে পার্থক্য কী। আমি বেশ কয়েকটি নিবন্ধ পড়েছি তবে এটির ভালভাবে ব্যাখ্যা করা এমন কিছু খুঁজে পেলাম না।
উত্তর:
সাধারণভাবে, "নির্ভুলতা" এবং "প্রত্যাহার" এর মধ্যে একটি বাণিজ্য রয়েছে। উচ্চ নির্ভুলতার অর্থ হ'ল কম অপ্রাসঙ্গিক ফলাফল উপস্থাপন করা হয়েছে (কোনও মিথ্যা ধনাত্মক নয়), উচ্চতর প্রত্যাহারের অর্থ হ'ল কম প্রাসঙ্গিক ফলাফল অনুপস্থিত (কোনও মিথ্যা নেতিবাচক নয়)। LIKE অপারেটরটি ব্যবহার করা আপনাকে পুনঃসমাজের জন্য ছাড় ছাড় দিয়ে 100% নির্ভুলতা দেয়। একটি পূর্ণ পাঠ্য অনুসন্ধানের সুবিধা আপনাকে আরও ভাল পুনরুদ্ধারের জন্য নির্ভুলতাটি নিখুঁত করতে অনেক নমনীয়তা দেয়।
বেশিরভাগ সম্পূর্ণ পাঠ্য অনুসন্ধানের প্রয়োগগুলি একটি "ইনভার্টেড ইনডেক্স" ব্যবহার করে। এটি এমন একটি সূচক যেখানে কীগুলি স্বতন্ত্র পদ হয় এবং সম্পর্কিত মানগুলি রেকর্ডের সেট যা এই শব্দটি ধারণ করে। সম্পূর্ণ রেকর্ড অনুসন্ধানগুলি এই রেকর্ড সেটগুলির ছেদ, ইউনিয়ন ইত্যাদি গণনা করতে অনুকূলিত করা হয় এবং প্রদত্ত রেকর্ড অনুসন্ধানের কীওয়ার্ডগুলির সাথে কতটা দৃ strongly়তার সাথে মেলে তা প্রমাণ করার জন্য সাধারণত একটি র্যাঙ্কিং অ্যালগরিদম সরবরাহ করে।
এসকিউএল লাইক অপারেটরটি অত্যন্ত অদক্ষ হতে পারে। যদি আপনি এটি একটি আনডেক্সড কলামে প্রয়োগ করেন তবে ম্যাচগুলি খুঁজে পাওয়ার জন্য একটি সম্পূর্ণ স্ক্যান ব্যবহার করা হবে (কোনও আন-ইনডেক্স ক্ষেত্রের কোনও প্রশ্নের মতো)। কলামটি যদি সূচিকৃত হয় তবে মেনু সূচি কীগুলির সাথে সম্পাদন করা যেতে পারে তবে বেশিরভাগ সূচীর অনুসন্ধানের চেয়ে কম দক্ষতার সাথে। সবচেয়ে খারাপ ক্ষেত্রে, LIKE প্যাটার্নটিতে এমন নেতৃস্থানীয় ওয়াইল্ডকার্ড থাকবে যার প্রতিটি সূচি কী পরীক্ষা করা দরকার। বিপরীতে, অনেক তথ্য পুনরুদ্ধার সিস্টেম নির্বাচিত ক্ষেত্রের প্রত্যয় গাছ প্রাক-সংকলন করে শীর্ষস্থানীয় ওয়াইল্ডকার্ডগুলির পক্ষে সমর্থন সক্ষম করতে পারে।
সম্পূর্ণ বৈশিষ্ট্য অনুসন্ধানের মতো অন্যান্য বৈশিষ্ট্যগুলি
এফটিএসে রেকর্ডের মাধ্যমে অনেকগুলি অনুসন্ধান দ্রুত করার জন্য একটি পাঠ্য ক্ষেত্রের মধ্যে পৃথক শব্দের সূচীকরণ করা হয়। LIKE ব্যবহার করার জন্য আপনাকে ক্ষেত্রের মধ্যে স্ট্রিং অনুসন্ধান (লিনিয়ার বা এর মতো) করতে হবে।
মাইএসকিউএল সক্ষম হওয়া পূর্ণ-পাঠ্য অনুসন্ধান কলামের শব্দগুলি থেকে একটি সূচক তৈরি করে এবং এই সূচীতে অনুসন্ধান সম্পাদন করে। মাইএসকিউএল অনুসন্ধান কোয়েরির সাথে মিলিত সারিগুলি নির্ধারণ করতে একটি পরিশীলিত অ্যালগরিদম ব্যবহার করে।
এছাড়াও, এই এসও উত্তর থেকে :
সম্পূর্ণ পাঠ্য অনুসন্ধানে কয়েকটি সুবিধা রয়েছে।
ইন্ডেক্সিং:
কিছুটা এইরকম:
WHERE Foo LIKE '%Bar';
কোনও সূচকের সুবিধা নিতে পারে না। এটি প্রতিটি একক সারিতে দেখতে হবে এবং এটি মিলছে কিনা তা দেখতে হবে। একটি পূর্ণ পাঠ্য সূচী, তবে, পারেন। আসলে, ফুলটেক্সট সূচীগুলি শব্দের সাথে মিলে যাওয়া শৃঙ্খলার ক্ষেত্রে, এই শব্দগুলি একসাথে কীভাবে হওয়া ইত্যাদি আরও অনেক বেশি নমনীয়তার প্রস্তাব দিতে পারে can
গৌন:
একটি পূর্ণ পাঠ্য অনুসন্ধান শব্দ কান্ড করতে পারে। আপনি যদি অনুসন্ধানের জন্য অনুসন্ধান করেন তবে আপনি "দৌড়" বা "দৌড়" এর জন্য ফলাফল পেতে পারেন। বেশিরভাগ ফুলটেক্সট ইঞ্জিনগুলির বিভিন্ন ভাষায় স্টেম অভিধান রয়েছে।
ওজনযুক্ত ফলাফল:
একটি পূর্ণ পাঠ্য সূচী একাধিক কলাম অন্তর্ভুক্ত করতে পারে। উদাহরণস্বরূপ, আপনি "পীচ পাই" অনুসন্ধান করতে পারেন এবং সূচীতে একটি শিরোনাম, কীওয়ার্ড এবং একটি বডি অন্তর্ভুক্ত থাকতে পারে। শিরোনামের সাথে মেলে এমন ফলাফলগুলি আরও বেশি প্রাসঙ্গিক হিসাবে ওজনযুক্ত হতে পারে এবং শীর্ষের কাছাকাছি দেখানোর জন্য বাছাই করা যেতে পারে।
অসুবিধা:
একটি পূর্ণ পাঠ্য সূচকটি সম্ভাব্য পরিমাণে বিশাল হতে পারে, মান বি-ট্রে সূচকগুলির চেয়ে বহুগুণ বড়। এই কারণে, অনেক হোস্ট হোস্ট প্রোভাইডার যারা ডেটাবেস উদাহরণগুলি অফার করে তারা এই বৈশিষ্ট্যটি অক্ষম করে বা কমপক্ষে এটির জন্য অতিরিক্ত চার্জ দেয়। উদাহরণস্বরূপ, সর্বশেষ আমি পরীক্ষা করেছিলাম, উইন্ডোজ আজুর ফুলটেক্সট ক্যোয়ারী সমর্থন করে না।
ফুলটেক্সট সূচীগুলি আপডেট করাও ধীর হতে পারে। যদি ডেটা অনেক পরিবর্তন হয় তবে মানক সূচকের তুলনায় কিছু ল্যাগ আপডেটিং সূচি থাকতে পারে।
লাইক কেবল ওয়াইল্ডকার্ড ব্যবহার করে এবং এটি সমস্ত শক্তিশালী নয়।
সম্পূর্ণ পাঠ্যটি আরও, এবং, বা, না, এমনকি অনুরূপ সাউন্ডিং ফলাফল (সাউন্ডেক্স) এবং আরও অনেক আইটেম সহ আরও জটিল অনুসন্ধানের অনুমতি দেয়।
আমি কী কী উপলভ্য তা আরও ভালভাবে বুঝতে সহায়তা করার জন্য এসকিউএল কনটেনগুলি () নিখরচায় () এবং সম্পর্কিত সম্পূর্ণ পাঠ্য অনুসন্ধান আইটেমগুলিতে সন্ধান করা শুরু করব।
আসল পার্থক্য হ'ল স্ক্যানিং পদ্ধতিগুলি। পূর্ণ-পাঠ্য অনুসন্ধানের জন্য, শব্দগুলি (পদগুলি) হ্যাশ কী হিসাবে ব্যবহৃত হয় - যার প্রত্যেকটিই দস্তাবেজের একটি অ্যারের সাথে সম্পর্কিত যা কী (পদগুলি) উপস্থিত হয় Its এটি এর মতো:
Document sets = {d1, d2, d3, d4, ... dn}
Term sets = {t1, t2, t3, .. tn}
এখন টার্ম-ডকুমেন্ট ম্যাট্রিক্স (কোন ডকুমেন্টের টার্ম সদস্য) হিসাবে উপস্থাপিত হতে পারে:
t1 -> {d1, d5, d9,.. dn}
t2 -> {d11, d50, d2,.. dn}
t3 -> {d23, d67, d34,.. dn}
:
tn -> {d90, d87, d57,.. dn}
যখন অনুরোধটি আসে "শব্দ / শব্দ t1যুক্ত সমস্ত নথি আমাকে পান" - তারপরে দস্তাবেজ সেট {d1, d5, d9,.. dn
returned ফিরে আসে।
ডকুমেন্টস সংরক্ষণের জন্য আপনি একটি ডি-নরমালাইজ টেবিল স্কিমা হ্যাক করতে পারেন - মাইএসকিউএল টেবিলের প্রতিটি সারিটি "নথি" হিসাবে বিবেচিত হবে এবং একটি পাঠ্য কলামে একটি অনুচ্ছেদ থাকতে পারে etc. নথি আইডি হিসাবে।
মনে রাখবেন যে এই এসকিউএল ক্যোয়ারির কম-বেশি O (1) এর কর্মক্ষমতা থাকবে। কোয়েরিটি স্বাধীন হবে
উদাহরণস্বরূপ এই এসকিউএল প্রদত্ত শব্দ XYZ এর সাথে মিলে থাকা সমস্ত সারি বের করার জন্য নিক্ষেপ করা যেতে পারে:
SELECT *
FROM my_table
WHERE MATCH (my_text_column) against ('XYZ' IN boolean mode) ;
সতর্কতা: আপনি যদি এই ক্যোয়ারিতে অর্ডার যোগ করেন তবে আপনার রানটাইমগুলি বিভিন্ন পরামিতিগুলির উপর নির্ভর করে পরিবর্তিত হবে, যার মধ্যে একটি সারি / নথিগুলির সাথে মিল রয়েছে। তাই সাবধান।
লাইক অবশ্য এর কিছুই পায় নি। এটি বাক্য / স্ট্রিংকে রৈখিকভাবে স্ক্যান করতে এবং সমস্ত মিলে যাওয়া শর্তাবলী সন্ধান করতে বাধ্য হয়। ওয়াইল্ড কার্ড যুক্ত করা ঝামেলা বাড়িয়ে তোলে। এটি ছোট দৈর্ঘ্যের স্ট্রিংয়ের জন্য দুর্দান্ত কাজ করে, যেমন আপনি কল্পনা করতে পারেন, তবে দীর্ঘতর বাক্যগুলির জন্য খারাপভাবে ব্যর্থ হবেন। এবং অনুচ্ছেদে বা পাঠ্যের পুরো পৃষ্ঠা ইত্যাদির সাথে অবশ্যই তুলনাযোগ্য নয় etc.
এফটিএস আরও দক্ষ, শক্তিশালী (বিশেষত ওয়ার্ড ব্রেকার এবং স্টেমিং ফাংশনালিটির জন্য) ... তবে আপনার প্রয়োজনীয়তাগুলি যাচাই করুন কারণ কখনও কখনও ডিবি সমস্ত ভাষা সমর্থন করে না যেমন এমএসএসকিউএল গ্রীক সমর্থন করে না (এই পৃষ্ঠায় http: // msdn দেখুন) check microsoft.com/en-us/library/ms176076(v=sql.110).aspx )