الستیک سرچ (Elasticsearch) جذاب - قسمت اول

ممکن نیست تو فضای کاری تولید نرم افزار باشی و حداقل یه بار اسم الستیک سرچ رو نشنیده و ندیده باشی! (میگی نه؟ عنوان این مطلب رو ببین، دیدی گفتم ممکن نیس!!! D: )حالا اصن این الستیک سرچ چی هست؟الستیک سرچ یه پایگاه داده است که جستجو و تجزیه و تحلیل تقریبا realtime رو برای انواع مختلف داده فراهم می کنه. این کتابخونه یکی از بهترین کتابخونه های جستجو متنه که پایه و اساسش کتابخونه معروف Lucene هستش و در جاوا توسعه داده شده.اگه بخوام دقیق تر بگم، الستیک سرچ یک full text search engine هستش و روی داده های ساختارمند، بدون ساختار، عددی و مکانی (geospatial)، در قالب داکیومنت های json کار می کنه.و خود full text search engine یک شیوه پیشرفته جست و جو در دیتابیسه که برخلاف جست و جوی عادی که یک کلمه در داکیومنت رو با سرعت کمی تطبیق میده و پیدا می کنه، اول موقعیت مکانی تمام کلمات یک داکیومنت رو شاخص گذاری می کنه تا جست و جوی کاربر توسط شاخص (index) ها به نتیجه برسه و لازم نباشه کل یک داکیومنت برای هر جست و جو پیمایش بشه. در نتیجه همه چی سریعتره. از جمله کارهای باحال الستیک سرچ spell checking ، auto complete ، fuzzy search ، related search هست که فیچر سرچ نرم افزارتون در حد گوگل علیه السلام، حرفه ای می کنه. الستیک سرچ مزایای زیادی هم داره. از جمله :سرعت بالا در جستجو و پاسخگویی به کوئری هاامنیت بالا و نظارت بر زیرساخت (تغییرات اسناد به صورت توزیع شده در چند نود ذخیره میشه تا امکان از دست رفتن دیتا به حداقل برسه)مقیاس پذیری برای تعداد زیادی سرور و پشتیبانی از big dataامکان اتصال به ابزار قدرتمند کیبانا برای realtime visualizationامکان استفاده از یادگیری ماشین برای مدل سازی خودکار رفتار داده هارابط restfullحالا وقتشه که بریم یکم بیشتر با این موجود دوست داشتنی آشنا بشیم. یه سری مفاهیم اصلی تو الستیک سرچ وجود داره که بر هر کاربری واجبه برای کار با الستیک اون ها رو بشناسه:Index: این مفهوم مثل مفهوم جدول در دیتابیس های رابطه ای می مونه که داکیومنت های json با schema خاص در آن ذخیره می شن.Documents : رکوردها در یه index مثل یه ردیف در یک پایگاه داده رابطه ای هستن. هر داکیومنت یک فرمت json، یک شناسه منحصر به فرد مرتبط با اون داره و مربوط به یک schema/mapping خاص در index هست.Fields: فیلد ها attribute های یک document هستن( مثل ستون های جدول های رابطه ای)Data types:الستیک سرچ هم مثل همه پایگاه داده ها از دیتا تایپ های numeric ، date ، boolean و string پشتیبانی می کنه اما یه سری دیتا تایپ های خاص مثل ip ، geometric و nested هم داره که از عوامل جذابیت اش هستن. خوبه بدونین که دیتا تایپ string خودش شامل دو نوع text , keyword است. وقتی که نیاز داریم موقع سرچ بخشی از متن برگردونده بشه در واقع انالایزر الستیک متن را قبل از ایندکس کردن توکنایز (تکه تکه) کنه، داده را با تایپ text ذخیره می کنیم اما اگر نیاز داریم که داده توکنایز نشه و به صورت کامل سرچ بشه اون را با تایپ keyword ذخیره می کنیم همچنین برای aggregation و sort هم از keyword استفاده می کنیمهمچنین دیتا تایپ nested هم آرایه ای از اشیا json رو به صورت flat ذخیره می کنه:ابجکت جی سان :{&quotname&quot:&quotABC United&quot, &quothomeGround&quot:&quotOld Trafford&quot, &quotplayers&quot:[ { &quotfirstName&quot:&quotJames&quot, &quotlastName&quot:&quotCohen&quot, &quotposition&quot:&quotGoal Keeper&quot }, { &quotfirstName&quot:&quotPaul&quot, &quotlastName&quot:&quotPogba&quot, &quotposition&quot:&quotMidfielder&quot } ] } نحوه ذخیره سازی در الستیک{&quotname&quot:&quotABC United&quot,&quothomeGround&quot:&quotOld Trafford&quot,&quotplayers.firstName&quot:[&quotJames&quot, &quotPaul&quot],&quotplayers.lastName&quot:[&quotCohen, &quotPogba&quot]&quotplayers.position&quot:[&quotGoal Keeper&quot, &quotMidfielder&quot]}MultiFields : در الستیک این قابلیت وجود داره که برای یه فیلد دو نوع تایپ تعریف کنیم:&quotstudent_name&quot:{ &quottype&quot:&quottext&quot, &quotfields&quot:{ &quotkeyword&quot:{ &quottype&quot:&quotkeyword&quot } } } }بر اساس این مثال، برای جستجوی با تطبیق جزئی، مستقیما از student_name در جستجوی خودمون استفاده می کنیم و برای اینکه مطابقت دقیق و کامل بخوایم، از student_name.keyword استفاده می کنیم (خیلی هم زیبا و هیجان انگیز!! ). Mapping: درواقع برای تعیین schema یک index استفاده می شه. در mapping، فیلد ها، datatype هر فیلد و نحوه کنترل هر فیلد توسط الستیک سرچ تعریف می شه.Settings: الستیک سرچ یه سری تنظیمات داره که می تونیم از اون ها برای custom کردن رفتار index استفاده کنیم. همچنین امکان تعریف آنالایزر و نرمالایزر های custom را برای تجزیه و تحلیل فیلد های مختلف می ده.(احسنت!!!)بعد از یادگیری الفبای الستیک سرچ جان نوبت به دانلود و استفاده ازش میرسه:اول باید الستیک سرچ و کیبانا را به صورت جداگانه دانلود کرده، آنها را از حالت زیپ خارج و با تنظیمات پیش فرض اجرا کنین.یادتون باشه، مطمئن بشین که جاوا روی سیستمتون نصب هست و متغیر محیطی JAVA_HOME در ویندوز هم تنظیم شده. حالا دو تا فایلی که دانلود شد رو از حالت زیپ دربیارین و با ورود به پوشه اصلی الستیک سرچ، پوشه bin را باز کرده، بر روی elasticsearch.bat کلیک کنین (فایل دوم ).اگر مشکلی پیش نیاد( معمولاً اگر رم کمی داشته باشین ممکنه اجرای الاستیک به مشکل بخوره) وقتی تو مرورگرتون آدرس localhost:9200 رو تایپ کنین تصویر زیر را می بینین (هورررررااااا). با این کار، اطلاعات کلی الستیک مثل شماره نسخه اش به شما نمایش داده میشه :در مرحله بعدی، برای کار با الستیک، با توجه به اینکه الستیک، از طریق پروتکل http درخواست ها رو دریافت و به اون ها را پاسخ می ده (یعنی API‌ آن از نوع REST است) نیاز به ابزاری برای ارسال درخواستهای http داریم . یکی از بهترین ابزارها، نرم افزار PostMan هست اما خود محیط کیبانا که داشبورد تحلیل داده الستیکه، این امکان رو به ما می ده (دمش گرم). درنتیجه ما هم با کیبانا کار میکنیم. حالا وارد پوشه کیبانا بشین، داخل پوشه bin فایل kibana.bat (فایل اول) را اجرا (ترجیحاً از خط فرمان) کنین .همونطور که میبینین کیبانا پشت پورت ۵۶۰۱ منتظر پاسخگویی به درخواست های کاربرانه. بنابراین در مرورگر آدرس localhost:5601 را تایپ کنین.به همین راحتی مفاهیم اولیه و نصب و راه اندازی الستیک سرچ رو یاد گرفتیم. حالا وقتشه که بریم سراغ کار کردن باهاش. قسمت بعدی رو دنبال کنین تا بیشتر با این موجود جذاب آشنا بشین!!!! https://virgool.io/@zbolhasani/%D8%A7%D9%84%D8%B3%D8%AA%DB%8C%DA%A9-%D8%B3%D8%B1%DA%86-elasticsearch-%D8%AC%D8%B0%D8%A7%D8%A8-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-sthk24ecoerf منابع :https://www.elastic.co/guide/en/elasticsearch/reference/current/index.htmlhttps://medium.com/expedia-group-tech/getting-started-with-elastic-search-6af62d7df8ddhttps://bigdata-ir.com/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D9%84%D8%B3%D8%AA%DB%8C%DA%A9-%D8%B3%D8%B1%DA%86-elastic-search-%D9%86%D8%B5%D8%A8-%D9%88-%D8%A7%D8%AC%D8%B1%D8%A7/