লুসিন সূচী নথি কিভাবে?


98

আমি লুসিন সম্পর্কে কিছু নথি পড়েছি; এছাড়াও আমি এই লিঙ্কটিতে দস্তাবেজটি পড়েছি ( http://lucene.sourceforge.net/talks/pisa )।

আমি কীভাবে লুসিন সূচী নথিগুলি বুঝতে পারি না এবং বুঝতে পারি না যে কোন অ্যালগরিদম লুসিন সূচীকরণের জন্য ব্যবহার করে?

উপরের লিঙ্কটিতে এটি বলে যে লুসিন সূচকের জন্য এই অ্যালগরিদম ব্যবহার করে:

  • ইনক্রিমেন্টাল অ্যালগরিদম:
    • বিভাগের সূচকগুলির একটি স্ট্যাক বজায় রাখুন
    • প্রতিটি আগত নথির জন্য সূচক তৈরি করুন
    • স্ট্যাকের উপরে নতুন সূচকগুলি ঠেলাও
    • বি = 10 কে একত্রিতকরণ ফ্যাক্টর হতে দিন; এম = 8

for (size = 1; size < M; size *= b) {
    if (there are b indexes with size docs on top of the stack) {
        pop them off the stack;
        merge them into a single index;
        push the merged index onto the stack;
    } else {
        break;
    }
}

এই অ্যালগরিদম কীভাবে অনুকূলিত সূচক সরবরাহ করে?

লুসিন কি ইনডেক্সিংয়ের জন্য বি-ট্রি অ্যালগোরিদম বা এর মতো অন্য কোনও অ্যালগোরিদম ব্যবহার করে - বা এর কোনও নির্দিষ্ট অ্যালগরিদম আছে?


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

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

উত্তর:


48

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

সুতরাং একবার উল্টানো (শব্দ) সূচক - যা স্কিপ-তালিকা ডেটা কাঠামোর উপর ভিত্তি করে - নথি থেকে তৈরি হয়ে গেলে, সূচকটি ডিস্কে সঞ্চিত হয়। Lucene তারপর লোড (যেমন ইতিমধ্যে বললঃ সম্ভবত একমাত্র কিছু) একটি মধ্যে যারা পদ নির্দিষ্ট রাজ্য পরিণত করার যন্ত্র , একটি FST বাস্তবায়নের ঢিলেঢালাভাবে অনুপ্রাণিত দ্বারা Morfologick

মাইকেল ম্যাকক্যান্ডলেস (এছাড়াও) লুসিন মেমরিতে লুসিন স্টোরগুলি শর্তাদির জন্য কীভাবে এবং কেন একটি (ন্যূনতম অ্যাসাইক্লিক) এফএসটি ব্যবহার করে তা মূলত একটি হিসাবে SortedMap<ByteSequence,SomeOutput>এবং কীভাবে FSTs কাজ করে (যেমন, এফএসটি কীভাবে এই ম্যাপিংয়ের মেমরির ব্যবহার সাব-লিনিয়ার বাড়ানোর জন্য বাইট সিকোয়েন্সগুলি (যেমন সূচিকৃত শর্তাদি) সংযোগ করে। এবং তিনি সেই কাগজটির দিকে ইঙ্গিত করেছেন যা নির্দিষ্ট এফএসটি অ্যালগরিদম লুসিনেরও বর্ণনা করে

সেই অদ্ভুত কেন Lucene এড়িয়ে তালিকাভুক্ত করে ব্যবহার করে, যখন সবচেয়ে ডাটাবেস ব্যবহার (বি + +) জন্য - এবং / অথবা (খ) -Trees, কটাক্ষপাত করা অধিকার এইরকম উত্তর দেন এই প্রশ্নের (এড়ান তালিকাভুক্ত করে বনাম বি-গাছ) সংক্রান্ত। মূলত, - এই উত্তরটি একটি প্রশংসনীয় ভাল, গভীর ব্যাখ্যা দেয় না এত করতে সূচক সমবর্তী আপডেট "আরো এক্তিয়ারভুক্ত" (কারণ আপনার না অবিলম্বে পুনরায় সামঞ্জস্য বজায় রাখা একটি বি-বৃক্ষ সিদ্ধান্ত নিতে পারেন, যার ফলে একটি হিসাবে একই সমবর্তী কর্মক্ষমতা সম্পর্কে হত্তন বাদ দিন-তালিকান), বরং, এড়িয়ে যান-তালিকাগুলি আপনাকে (বিলম্বিত বা না) ব্যালেন্সিং অপারেশনটিতে কাজ করা থেকে বাঁচায় (শেষ পর্যন্ত) বি-ট্রি দ্বারা প্রয়োজনীয় (বাস্তবে, উত্তরটি দেখায় / রেফারেন্স হিসাবে, সম্ভবত বি-ট্রি এবং [মাল্টি-লেভেল] এড়িয়ে যাওয়া-তালিকার মধ্যে পারফরম্যান্সের খুব কম পার্থক্য রয়েছে, যদি হয় "সঠিকভাবে সম্পন্ন করা হয়"))


4
আফাইক তারা ডিস্ক সিকের সংখ্যা কমাতে বি-ট্রি এর পরিবর্তে স্কিপ লিস্ট ব্যবহার করছে, যেহেতু স্কিপ লিস্টের অংশটি মেমরিতে থাকে এবং সূচকটি অনুসরণ করার সময় খুব কম ডিস্ক আইও প্রয়োজন
আন্তন

56

এখানে মোটামুটি ভাল নিবন্ধ রয়েছে: https://web.archive.org/web/20130904073403/http://www.ibm.com/developerworks/library/wa-lucene/

12/2014 সম্পাদনা করুন: আসল মুছে ফেলার কারণে একটি সংরক্ষণাগার সংস্করণে আপডেট হয়েছে, সম্ভবত সবচেয়ে ভাল বিকল্প হ'ল http://lucene.apache.org/core/3_6_2/fileformats.html

এখানে আরও একটি সাম্প্রতিক সংস্করণ রয়েছে http://lucene.apache.org/core/4_10_2/core/org/apache/lucene/codecs/lucene410/package-summary.html#package_descript , তবে এতে কম তথ্য আছে বলে মনে হয় বয়স্ক একের চেয়ে

সংক্ষেপে, লুসিন যখন কোনও দলিল সূচী করে তখন এটি এটিকে বিভিন্ন পদে ভেঙে দেয়। এরপরে এটি শর্তাদি একটি সূচক ফাইলে সংরক্ষণ করে যেখানে প্রতিটি শব্দটি এতে থাকা নথির সাথে যুক্ত থাকে। আপনি এটিকে কিছুটা হ্যাশটেবলের মতো ভাবতে পারেন।

পদগুলি কোনও বিশ্লেষক ব্যবহার করে তৈরি করা হয় যা প্রতিটি শব্দকে এর মূল আকারে ডেকে তোলে। ইংরেজি ভাষার জন্য সর্বাধিক জনপ্রিয় স্টেমিং অ্যালগরিদম হ'ল পোর্টার স্টেমিং অ্যালগরিদম: http://tartarus.org/~martin/PorterStemmer/

যখন কোনও জিজ্ঞাসা জারি করা হয় তখন এটি একই বিশ্লেষকের মাধ্যমে প্রক্রিয়াজাত করা হয় যা সূচক তৈরিতে ব্যবহৃত হয়েছিল এবং তারপরে সূচকে ম্যাচিং টার্ম (গুলি) সন্ধান করতে ব্যবহৃত হত। এটি ক্যোয়ারীর সাথে মিলেছে এমন নথির একটি তালিকা সরবরাহ করে।


আপনার উত্তর এবং লিঙ্কগুলির জন্য ধন্যবাদ। তবে আমি শুনেছি যে লুসিন প্রকল্পের একটি বিশেষ স্টেমার রয়েছে যার নাম "স্নোবল"? আপনি কি সম্পর্কে কিছু শুনেছেন?
মাহদী আম্রোল্লাহি

এটি একটি পৃথক প্রশ্ন: lucidimagination.com/search/… দেখুন , আপনার প্রশ্নের ধরণটি দেখে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি ' লুসিন ইন অ্যাকশন' বইটি পড়বেন : manning.com/hatcher2 (প্রথম সংস্করণটি কিছুটা তারিখের, তবে হতে পারে একটি মৃত ট্রি সংস্করণে পাওয়া গেছে second দ্বিতীয় সংস্করণটি একটি ই-বুক হিসাবে কেনা যাবে)।
যুওয়াল এফ

5
আপনি কি উত্তরটি পরিবর্তন করতে পারেন, প্রথম লিঙ্কটি যা আইবিএম লিঙ্কটি পাওয়া যায়নি :)
অ্যাডেলিন

এছাড়াও, ক্ষেত্রগুলি পুরো ছবিতে কীভাবে প্রবেশ করবে? যদি কোনও কোয়েরি একটি নির্দিষ্ট ক্ষেত্রে থাকে তবে লুসিন কীভাবে এবং কীভাবে জানতে পারে যে নথিতে যে শব্দটি নির্দেশ করে তা নথির কোথাও নয়, তবে একটি অনুরোধ করা ক্ষেত্রের অভ্যন্তরে?
লেভন তামরাজভ

24

আপনার সূচকগুলি নিজেই সূচীকরণের চেয়ে সূচকে মার্জ করা সম্পর্কে আরও প্রশ্ন।

আপনি নিম্ন-স্তরের বিবরণ উপেক্ষা করলে সূচীকরণ প্রক্রিয়াটি বেশ সহজ। ডকুমেন্টগুলি থেকে লুসিনকে "ইনভার্টেড ইনডেক্স" বলা হয়। সুতরাং "হতে হবে বা না হওয়া" এবং আইডি = 1 পাঠ্য সহ নথিটি যদি আসে তবে উল্টানো সূচীটি দেখতে পাবেন:

[to] → 1
[be] → 1
[or] → 1
[not] → 1

এটি মূলত এটি - শব্দটি থেকে প্রদত্ত শব্দযুক্ত নথির তালিকার সূচক । এই সূচকের প্রতিটি লাইনকে (শব্দ) পোস্টিং লিস্ট বলা হয়। এই সূচকটি দীর্ঘমেয়াদী স্টোরেজে ততক্ষণ টিকে থাকে।

বাস্তবে জিনিসগুলি আরও জটিল:

  • প্রদত্ত বিশেষ বিশ্লেষকের উপর ভিত্তি করে Lucene কিছু শব্দ এড়িয়ে যেতে পারে;
  • ভাষার স্টাচিং অ্যালগরিদম ব্যবহার করে শব্দগুলির প্রিক্রোসেস করা যেতে পারে ভাষার ফ্লেক্সিয়া হ্রাস করতে;
  • পোস্টিং তালিকায় কেবলমাত্র নথির শনাক্তকারীই থাকতে পারে না, তবে ডকুমেন্টের অভ্যন্তরে প্রদত্ত শব্দটির অফসেট (সম্ভাব্য বেশ কয়েকটি উদাহরণ) এবং কিছু অন্যান্য অতিরিক্ত তথ্য থাকতে পারে।

আরও অনেক জটিলতা রয়েছে যা প্রাথমিক বোঝার জন্য এতটা গুরুত্বপূর্ণ নয়।

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

সুতরাং প্রশ্ন উত্থাপিত হয় - আমরা ইতিমধ্যে সূচী নথিটি কীভাবে পরিবর্তন করতে পারি ?

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

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

এই সহজ প্রক্রিয়াটি ব্যবহার করে Lucene অনুসন্ধানের পারফরম্যান্সের ক্ষেত্রে সূচকটি ভাল আকারে বজায় রাখতে সক্ষম।

আশা করি এটি সাহায্য করবে


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

4
হ্যাঁ আপনি সঠিক. কেবলমাত্র উল্লেখ করার বিষয় হ'ল চূড়ান্ত ক্রমটি বাছাইয়ের নিয়মগুলি (তুচ্ছ মামলায় প্রাসঙ্গিকতা সূচক) ব্যবহার করে সংজ্ঞায়িত করা হয়, সুতরাং যে বিভাগগুলিতে অনুসন্ধান করা হয় তা প্রাসঙ্গিক নয়।
ডেনিস বাজনোভ

13

এটি উল্টানো সূচক , তবে এটি কোন কাঠামোটি ব্যবহার করে তা নির্দিষ্ট করে না। লুসিনে সূচক বিন্যাসে সম্পূর্ণ তথ্য রয়েছে।
'ফাইল এক্সটেনশনের সংক্ষিপ্তসার' দিয়ে শুরু করুন।

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


4
লুসিনের ইনভার্টেড ইনডেক্সটি কোনও বি-ট্রি নয়, স্কিপ-লিস্টের ভিত্তিতে তৈরি। এখনও খুব বিস্তৃত অর্থে একটি গাছের মতো কাঠামো, তবে কেবল সম্পূর্ণ হতে পারে - যেমন, দেখুন এই পুনরায় প্রশ্নটি পুনরায়। বয়কট-তালিকার Lucene ব্যবহার এবং এই এতো প্রশ্ন করছিস কেন লাফালাফি তালিকাভুক্ত করে বি-গাছের উপর বাঞ্ছনীয় হতে পারে
fnl
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.