কিভাবে Lucene কাজ করে


90

লুসিন অনুসন্ধান এত দ্রুত কীভাবে কাজ করে তা আমি জানতে চাই। ওয়েবে আমি কোনও দরকারী ডক্স পাচ্ছি না। আপনার যদি কিছু পড়তে (লুসিন উত্স কোডের সংক্ষিপ্ত) থাকে তবে আমাকে জানান।

সূচকের সাথে mysql5 পাঠ্য অনুসন্ধান ব্যবহার করে একটি পাঠ্য অনুসন্ধান ক্যোয়ারী আমার ক্ষেত্রে প্রায় 18 মিনিট সময় নেয়। একই ক্যোয়ারির জন্য লুসিন অনুসন্ধানে এক সেকেন্ডেরও কম সময় লাগে।


4
আমি কি এই প্রশ্নটিকে সম্প্রদায় উইকিতে রূপান্তর করার জন্য অনুরোধ করতে পারি? Lucene এখন একটি প্ল্যাটফর্ম মত শোনাচ্ছে।
অ্যাসিঙ্কয়েট

উত্তর:


75

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

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

যাইহোক, দিনের শেষে, আপনি যদি সত্যিই জানতে চান তবে আপনার উত্সটি পড়তে হবে। আপনার উল্লেখ করা উভয় জিনিসই সর্বোপরি ওপেন সোর্স।


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

4
@bmargulies, সূচক "শব্দ প্রতি" হয়, তাহলে কেন Stackoverflow ব্যবহারকারী অনুসন্ধান করে stackoverflow.com/users ম্যাচ সাবস্ট্রিং অনুমতি?
পেসারিয়ার

4
পুরো বইয়ের উত্তরের জন্য এটি স্থান নয়। সেখানে বেসিক ধারণাটি সম্পর্কে বিস্তৃত কয়েকটি সংখ্যা রয়েছে।
bmargulies

"প্রতিটি শব্দের জন্য একটি সূচক" বলতে কী বোঝায় ... আমি যদি "abc" টাইপ করতে শুরু করি তবে এটি নথিতে কীভাবে "abc" সন্ধান করবে?
আলেকজান্ডার মিলস

4
শব্দের থেকে নথিতে একটি সূচক (বি-ট্রি) নথিতে শব্দের দ্বারা নথির সন্ধান করতে পারে কারণ এই জাতীয় সূচকের সারণীটি (শব্দ, নথি) যেখানে সূচক শব্দের কলামে থাকে। একটি ক্যোয়ারির মতো বিবেচনা করুন: তাদের মধ্যে 'পুলিশ', 'অপরাধ', 'পরিসংখ্যান' শব্দযুক্ত নথিগুলি সন্ধান করুন। ইনডেক্স শব্দটি অনুসন্ধান করে আপনি তিনটি লগ (এন) অনুসন্ধান করতে পারেন যাতে ও (এন) নথির মধ্যে একটি শব্দ রয়েছে documents তারপরে আপনি তিনটি শব্দযুক্ত নথি সম্বলিত একটি সেট তৈরি করতে দুটি ও (এন) লুপ করতে পারেন। যদিও এটি তাত্ত্বিকভাবে একটি ও (এন) অপারেশন, বেশিরভাগ নথিতে তিনটি শব্দই থাকে না কারণ এর ও (এন) যেখানে এন <এন।
ক্যালিকোডার

34

লুসিন একটি বড় সূচক তৈরি করে। সূচীতে শব্দের আইডি, শব্দটি উপস্থিত রয়েছে এমন নথির সংখ্যা এবং সেই নথিতে শব্দের অবস্থান রয়েছে। সুতরাং আপনি যখন একটি একক শব্দ ক্যোয়ারী দেন তখন এটি সূচকটি (ও (1) সময়ের জটিলতা) সন্ধান করে। তারপরে ফলাফলটি বিভিন্ন অ্যালগোরিদম ব্যবহার করে র‌্যাঙ্ক করা হয়। মাল্টি-ওয়ার্ড ক্যোয়ারির জন্য কেবল শব্দগুলির উপস্থিত ফাইলগুলির সেটটির ছেদ করুন। সুতরাং Lucene খুব দ্রুত।

আরও তথ্যের জন্য গুগল বিকাশকারীদের এই নিবন্ধটি পড়ুন- http://infolab.stanford.edu/~backrub/google.html


8
এই কাগজ উপর স্কিমেড, এটি বেশ সহায়ক ছিল। বিশেষত "4.5 অনুসন্ধান" এর উত্তর আমি খুঁজছিলাম had বিশেষত, এটি পৃথক শব্দের জন্য হে (1) হ্যাশ অনুসন্ধানের মতো ব্যবহৃত হয় বলে মনে হয়, তবে তারপরে 40,000 নথির সীমাতে ফলাফলগুলিতে যোগ দিতে একটি ও (এন) স্ক্যান ব্যবহার করা হয়। আমি ধরে নিয়েছি একটি মানচিত্র-হ্রাস অ্যালগরিদম এই কাজটি বিভক্ত করতে ব্যবহৃত হয় যাতে ব্যবহারকারী তাত্ক্ষণিক ফলাফল পান।
ক্রিস ডাট্রো

একটি জনপ্রিয় অ্যালগরিদম হল কবুতর র‌্যাঙ্ক অ্যালগোরিদম। যদিও আমি এ সম্পর্কে তেমন কিছু জানি না।
এলিয়েন কোডার

4
সেই কাগজটি মজাদার: "এই কাগজে আমরা গুগল উপস্থাপন করি ..."। আমার ধারণা গুগল সবসময় কোনও মেগা-কর্পোরেশন ছিল না।
বাটনস 840

লুসিনকে চিনি না, তবে একটি প্রশ্ন: প্রতিটি অনুসন্ধানে র‌্যাঙ্কিং হয়? বা এটি পূর্ব-স্থানযুক্ত নথিগুলি বজায় রাখে? এটি যদি আগে থেকে র‌্যাঙ্ক অনুযায়ী নথিগুলি বজায় রাখে তবে কীভাবে এটি একাধিক শব্দের প্রশ্নের জন্য রক্ষণাবেক্ষণ করে?
বিকাশ প্রসাদ

লিঙ্কটি এখন ভেঙে গেছে। @
এলিয়েন

20

এক কথায়: ইনডেক্সিং।

Lucene আপনার দস্তাবেজের একটি সূচক তৈরি করে যা এটি আরও দ্রুত অনুসন্ধান করতে দেয়।

এটি একটি তালিকা ও (এন) ডেটা কাঠামো এবং একটি হ্যাশ টেবিল ও (1) ডেটা কাঠামোর মধ্যে একই পার্থক্য। আপনি কী চান তা তালিকাকে পুরো সংগ্রহের মধ্য দিয়ে যেতে হবে। হ্যাশ টেবিলটিতে একটি সূচক রয়েছে যা এটি পছন্দসই আইটেমটি ঠিক কোথায় রয়েছে তা খুঁজে বের করতে এবং এটিকে সহজেই এনে দেয়।

হালনাগাদ:

"লুসিন সূচক অনুসন্ধানগুলি মাইএসকিএল সূচক অনুসন্ধানের চেয়ে অনেক দ্রুত" আপনি কী বোঝাতে চেয়েছেন তা আমি নিশ্চিত নই।

আমার অনুমান যে আপনি মাইএসকিউএল "যেখানে ডকুমেন্টটি 'যেমন'% শব্দগুচ্ছ% '" নথির সন্ধানের জন্য ব্যবহার করছেন তা ব্যবহার করছেন। যদি এটি সত্য হয়, তবে মাইএসকিউএলকে প্রতিটি সারিতে একটি টেবিল স্ক্যান করতে হবে, যা ও (এন) হবে।

Lucene ডকুমেন্টটি টোকেনগুলিতে বিশ্লেষণ করে, আপনার নির্দেশে এটিকে এন-গ্রামে ভাগ করবে এবং সেইগুলির প্রত্যেকটির জন্য সূচী গণনা করবে। ইনডেক্সড লুসিন ডকুমেন্টে একটি শব্দ খুঁজে পাওয়া ও (1)


10
হ্যাঁ আমি সূচকের অংশটি বুঝতে পারি, তবে আবার, লুসিন সূচক অনুসন্ধানগুলি মাইএসকিএল সূচক অনুসন্ধানগুলির চেয়ে অনেক দ্রুত। কীভাবে ঘটে
মিডহাট

9

Lucene টার্ম ফ্রিকোয়েন্সি এবং বিপরীত নথির ফ্রিকোয়েন্সি নিয়ে কাজ করে । এটি নথির সাথে প্রতিটি শব্দের ম্যাপিংয়ের একটি সূচক তৈরি করে এবং এর ফ্রিকোয়েন্সি গণনা যা নথিতে বিপরীত সূচক ছাড়া কিছুই নয়।

উদাহরণ :

ফাইল 1: এলোমেলো অ্যাক্সেস মেমরি প্রধান স্মৃতি।

ফাইল 2: হার্ড ডিস্কগুলি গৌণ মেমরি।

Lucene একটি বিপরীত সূচক কিছু তৈরি করে

ফাইল 1:

শব্দ: এলোমেলো

ফ্রিকোয়েন্সি: 1

অবস্থান: 0

শব্দ: স্মৃতি

ফ্রিকোয়েন্সি: 2

অবস্থান: 3

অবস্থান: 6

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

মূল

ফাইল 1: ফ্রিকোয়েন্সি - 1

স্মৃতি

ফাইল 1: ফ্রিকোয়েন্সি - 2

ফাইল 2: ফ্রিকোয়েন্সি - 1

ফলাফল ফাইল 1 এর পরে ফাইল 2 হবে । 'এবং', 'বা', 'বেশিরভাগ সাধারণ শব্দের উপর ওজন বহন বন্ধ করার জন্য এটি বিপরীত দলিলের ফ্রিকোয়েন্সি বিবেচনা করে (যেমন' এটি শব্দের ওজন হ্রাস করে যা ডকুমেন্ট সেটের মধ্যে সর্বাধিক জনপ্রিয়)।

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