الستیک یک شرکت ارائهدهنده خدمات جستوجو، ذخیره و visualization اطلاعات هست. اگر براتون سوال پیش اومده که الستیکسرچ چی هست میتونید این دو لینک (لینک ۱ و لینک ۲) رو ببینید.
برای اینکه این سرویس را برای خود راه بیاندازید، ابتدا باید تصمیم بگیرید که به عنوان پایگاهداده اصلی قرار است استفاده بشه یا پایگاه داده دوم. معمولا الستیکسرچ را به عنوان پایگاهداده دوم انتخاب میکنند و با استفاده از پایگاهداده اصلی، الستیکسرچ را بروز میکنند.
راهاندازی الستیکسرچ آسان هست چرا که هم روی داکر موجود هست، هم در helm (برای راهاندازی روی کوبرنتیز) و نصب خود آن بر روی سیستم (که فایل دانلود آن به صورت رایگان در سایت این شرکت موجود است). در این لینک توضیحاتی برای راهاندازی آن روی سیستم موجود هست که پیشنهاد میکنم ببینید.
بعد از راهاندازی سرویس، باید با استفاده از Mapping مدلهای دادهها را تعریف کنیم. برای مثال مدلی برای کاربران که شامل نام، نامکاربری، ایمیل و تاریخ عضویت در سرویس میباشد به صورت زیر است:
در این Mappingها، چند مشخصه مهم داریم. نوع ویژگی با type مشخص میشه. برای مثال نامکاربری از نوع text و روز عضویت از نوع date هست. index مشخص میکنه که آیا نیاز به سرچ بر روی این ویژگی داریم یا نه. analyzer نیز برای این است که متن را با استفاده از یک سری قواعد زبان، پردازش و جستوجو کنیم. لیست انواع دادهها را اینجا میتونید ببینید.
بعد از مشخص کردن Mapping، اون را بر روی ایندکس خود تنظیم میکنیم و اطلاعات را با همین ساختار که طبق Mapping مشخص شده، وارد الستیکسرچ میکنیم.
پس از ساخته شدن Index، نوبت به وارد کردن اطلاعات در الستیکسرچ میرسه. به دو صورت میشه این کار را انجام داد؛ به صورت تکی یا دستهای (bulk). اندپوینت اضافهکردن داده به صورت تکی
PUT index_name/doc/<id>
هست که در بدنه اون، ویژگیهایی از دادهای که میخوایم به ایندکس اضافه کنیم را قرار میدیم. برای مثال:
PUT users/doc/3 { "username": "amirho3ein13", "last_activity": "2019/04/21 12:48:20", "email": "amirhossein@gmail.com" }
اما این کار بصرفه نیست چرا که عملیات نوشتن در الستیکسرچ هزینه زیادی داره. راه بهینه این کار اضافه کردن به صورت دستهای هست. اندپوینت اضافهکردن داده به صورت دستهای POST _bulk
هست. در بدنه این درخواست، تغییراتی که میخوایم انجام بدیم (create, update, delete) را قرار میدیم. برای مثال:
POST _bulk { "create" : { "_index" : "test", "_id" : "1" } } { "field1" : "value1", "field2" : "value2" } { "delete" : { "_index" : "test", "_id" : "2" } } { "create" : { "_index" : "test", "_id" : "3" } } { "field1" : "value3" } { "update" : {"_id" : "1", "_index" : "test"} } { "doc" : {"field2" : "value3"} }
توجه کنید که جدا کننده هر خط در بدنه این درخواست، کاراکتر n\
است.
بعد از این که دادهها را به ایندکسها اضافه کردیم، میتونیم با استفاده از اندپوینت _search بر روی دادهها جستوجو کنیم. برای مثال:
GET /users/doc/_search { "query": { "match": { "username": "amirho3ein13" } } }
در این مطلب هم توضیحاتی برای این کار هست که پیشنهاد میکنم ببینید.
در آینده مطلبهای دیگهای مینویسم که چه کارهایی میشه با الستیکسرچ انجام داد، برای مثال انجام خودکار ایندکس دادهها، جستوجوهای پیشرفته و غیره که امیدوارم مفید واقع بشه.