RediSearch علاوه بر نمایه سازی هش های Redis، می تواند اسناد JSON را نیز نمایه کند. برای فهرست و جستجوی JSON، باید هر دو ماژول RediSearch و RedisJSON را نصب کنید.
پیش نیازها
قبل از اینکه بتوانید اسناد JSON را فهرست و جستجو کنید، به یک پایگاه داده با یکی از این دو نیاز دارید:
Redis Stack که به طور خودکار شامل RediSearch و RedisJSON می شود
Redis v6. x یا جدیدتر و ماژول های زیر نصب و فعال شده اند:
- RediSearch نسخه 2. 2 یا بالاتر
- RedisJSON نسخه 2. 0 یا بالاتر
ایجاد فهرست با طرحواره JSON
هنگامی که با دستور FT. CREATE یک نمایه ایجاد می کنید، کلمه کلیدی ON JSON را برای فهرست کردن اسناد JSON موجود و آینده ذخیره شده در پایگاه داده اضافه کنید.
برای تعریف SCHEMA، می توانید عبارات JSONPath را ارائه دهید. نتیجه هر عبارت JSONPath ایندکس می شود و با یک نام منطقی به نام ویژگی (که قبلاً به عنوان یک فیلد شناخته می شد) مرتبط می شود. شما می توانید از این ویژگی ها در کوئری ها استفاده کنید.
توجه: ویژگی برای FT. CREATE اختیاری است.
برای ایجاد ایندکس JSON از سینتکس زیر استفاده کنید:
به عنوان مثال، این دستور یک نمایه ایجاد می کند که نام، توضیحات، قیمت و جاسازی بردار تصویر هر سند JSON را نمایان می کند که یک آیتم موجودی را نشان می دهد:
برای جزئیات بیشتر درباره محدودیتهای شاخص JSON SCHEMA به محدودیتهای فهرست مراجعه کنید.
اسناد JSON را اضافه کنید
پس از ایجاد ایندکس، RediSearch به طور خودکار هر سند JSON موجود، اصلاح شده یا تازه ایجاد شده ذخیره شده در پایگاه داده را نمایه می کند. برای اسناد موجود، نمایه سازی به صورت ناهمزمان در پس زمینه اجرا می شود، بنابراین ممکن است مدتی طول بکشد تا سند در دسترس باشد. اسناد اصلاح شده و جدید ایجاد شده به صورت همزمان ایندکس می شوند، بنابراین تا زمانی که دستور افزودن یا تغییر به پایان برسد، سند در دسترس خواهد بود.
می توانید از هر دستور نوشتن RedisJSON مانند JSON. SET و JSON. ARRAPPEND برای ایجاد یا تغییر اسناد JSON استفاده کنید.
نمونههای زیر از این اسناد JSON برای نمایش اقلام موجودی فردی استفاده میکنند.
مورد 1 سند JSON:
مورد 2 سند JSON:
از JSON. SET برای ذخیره این اسناد در پایگاه داده استفاده کنید:
از آنجایی که نمایه سازی در این حالت همزمان است، به محض بازگشت دستور JSON. SET، سند روی فهرست در دسترس خواهد بود. هر درخواست بعدی که با محتوای نمایه شده مطابقت داشته باشد، سند را برمی گرداند.
فهرست را جستجو کنید
برای جستجوی فهرست اسناد JSON، از دستور FT. SEARCH استفاده کنید. شما می توانید هر ویژگی تعریف شده در SCHEMA را جستجو کنید.
به عنوان مثال، از این عبارت برای جستجوی مواردی که کلمه "earbuds" در نام آنها وجود دارد استفاده کنید:
این پرس و جو برای همه مواردی که شامل "بلوتوث" و "هدفون" در توضیحات است ، جستجو می کند:
اکنون هدفون بلوتوث را با قیمت کمتر از 70 جستجو کنید:
و در آخر ، هدفون بلوتوث را جستجو کنید که بیشتر شبیه تصویری هستند که تعبیه آنها [1. 0 ، 1. 0 ، 1. 0 ، 1. 0] است:
برای کسب اطلاعات بیشتر در مورد پرس و جوهای جستجو ، به Search Query Syntax مراجعه کنید.
نمایش داده شدگان ft. search نیاز به اصلاح کننده های ویژگی دارند. از عبارات JSONPATH در نمایش داده ها استفاده نکنید زیرا تجزیه کننده پرس و جو از آنها کاملاً پشتیبانی نمی کند.
آرایه های JSON index به عنوان برچسب
اگر می خواهید مقادیر رشته یا بولی را به عنوان برچسب در یک آرایه JSON فهرست کنید ، از اپراتور JsonPath Wildcard استفاده کنید.
برای فهرست بندی لیست موردی از رنگ های موجود ، jsonpath $ . colors را مشخص کنید.* در تعریف طرحواره در هنگام ایجاد شاخص:
اکنون می توانید هدفون های نقره ای را جستجو کنید:
آرایه های JSON به عنوان متن
با شروع با Redisearch v2. 6. 0 ، جستجوی کامل متن را می توان در آرایه رشته ها یا روی jsonpath انجام داد که منجر به چندین رشته می شود.
اگر می خواهید مقادیر رشته ای را به عنوان متن فهرست کنید ، از jsonPath استفاده کنید که منجر به یک آرایه از رشته ها شود ، یا یک JSONPATH منجر به مقادیر رشته های مختلف ، با استفاده از اپراتورهای JSONPATH مانند Wildcard ، Filter ، Union ، Array Clice و/یا بازگشتی شود. نزول
برای فهرست بندی لیست موردی از رنگ های موجود ، jsonPath $ . colors را در تعریف طرحواره در هنگام ایجاد شاخص مشخص کنید:
اکنون می توانید جستجوی متن کامل را برای هدفون های رنگی روشن انجام دهید:
محدودیت ها
هنگامی که یک jsonPath ممکن است به مقادیر متعددی منجر شود و نه تنها به یک آرایه واحد ، به عنوان مثال ، هنگامی که یک jsonPath حاوی کارت های وحشی و غیره است ، مشخص کردن شیب یا inorder در ft. search خطایی را برمی گرداند ، زیرا ترتیب مقادیر مطابق با JSONPATH است. به خوبی تعریف نشده و منجر به نتایج بالقوه متناقض می شود.
به عنوان مثال ، استفاده از jsonPath مانند $ .. b [*] در یک مقدار JSON مانند
بسته به اجرای خاص کتابخانه JSONPATH که مورد استفاده قرار می گیرد ، ممکن است مقادیر را در ترتیب های مختلف مطابقت دهد.
از آنجا که شیب و inorder ترتیب نسبی را در بین مقادیر ایندکس شده در نظر بگیرید و نتایج ممکن است در نسخه های آینده تغییر کند ، بنابراین خطا بازگردانده می شود.
هنگامی که JSONPATH منجر به مقادیر متعدد می شود:
- مقادیر رشته ایندکس می شوند
- مقادیر تهی رد می شوند
- هر نوع ارزش دیگری باعث خرابی نمایه سازی می شود
Sortby فقط با مقدار اول مرتب می شود
بدون پشتیبانی برجسته
بازگشت یک ویژگی طرحواره ، که JsonPath آن منجر به مقادیر متعدد می شود ، فقط مقدار اول را برمی گرداند (به عنوان یک رشته JSON)
اگر یک JSONPATH با بازگشت مشخص شود ، به جای یک ویژگی Schema ، تمام مقادیر بازگردانده می شوند (به عنوان یک رشته JSON)
دست زدن به عبارات در شکافهای مختلف آرایه:
هنگام نمایه سازی ، از یک دلتای از پیش تعریف شده برای افزایش جبران خسارت بین شکافهای آرایه برای مقادیر چند متن استفاده می شود. این دلتا سطح جدایی بین عبارات را در شکافهای مختلف آرایه (مربوط به پارامتر شیب ft. search) کنترل می کند. این مقدار از پیش تعریف شده توسط پارامتر پیکربندی redisearch multi_text_slop (در زمان بار ماژول) تنظیم شده است. مقدار پیش فرض 100 است.
آرایه های json index به عنوان عددی
با شروع با Redisearch v2. 6. 1 ، جستجو را می توان در مجموعه ای از مقادیر عددی یا در jsonPath انجام داد که منجر به مقادیر عددی متعدد می شود.
اگر می خواهید چندین مقدار عددی را به عنوان عددی فهرست کنید ، از jsonPath استفاده کنید که منجر به یک آرایه از اعداد شود ، یا یک jsonPath که منجر به شماره های مختلف می شود ، با استفاده از اپراتورهای JSONPATH مانند Wildcard ، Filter ، Union ، Array Clice و/یا تبار بازگشتی استفاده کنید. واد
به عنوان مثال ، بیایید به لیست موارد اضافه کنیم Max_Level از حجم موجود (در دسی بل):
برای فهرست بندی آرایه MAX_LEVEL ، JSONPATH $ . max_level را در تعریف طرحواره در هنگام ایجاد شاخص مشخص کنید:
اکنون می توانیم هدفون هایی با حداکثر حجم حداکثر را جستجو کنیم ، به عنوان مثال ، بین 70 تا 80 (فراگیر) ، مواردی را با حداقل یک مقدار در آرایه max_level خود ، که در محدوده درخواست شده است ، بازگردانیم:
ما همچنین می توانیم مواردی را با تمام مقادیر در یک محدوده خاص جستجو کنیم ، به عنوان مثال ، تمام مقادیر در محدوده [90 ، 120] هستند (شامل)
محدودیت ها
هنگامی که JSONPATH به چندین مقدار عددی منتهی می شود:
- مقادیر عددی فهرست بندی می شوند
- مقادیر تهی رد می شوند
- هر نوع ارزش دیگری باعث خرابی نمایه سازی می شود
آرایه های JSON به عنوان GEO
با شروع با Redisearch v2. 6. 1 ، جستجو را می توان در مجموعه ای از مقادیر GEO (جغرافیایی) یا در یک JSONPATH که منجر به چندین مقادیر GEO می شود ، انجام داد.
قبل از Redisearch v2. 6. 1 ، فقط یک مقدار GEO واحد در هر ویژگی GEO پشتیبانی می شد. مقدار GEO با استفاده از یک رشته محدود کاما در فرم "طول ، عرض جغرافیایی" مشخص شد ، به عنوان مثال ، "15. 447083،78. 238306".
با Redisearch v2. 6. 1 ، یک آرایه JSON از چنین مقادیر GEO نیز پشتیبانی می شود.
به منظور فهرست بندی چندین مقادیر GEO ، کاربر یا یک JSONPATH که منجر به یک آرایه واحد از GEO می شود ، یا یک JSONPATH که منجر به چندین مقادیر GEO می شود ، با استفاده از اپراتورهای JSONPATH مانند Wildcard ، Filter ، Union ، Array Clice و/یا تبار بازگشتی.
- مقادیر تهی رد می شوند
- مقادیر دیگر باعث خرابی نمایه سازی می شوند (BOOL ، شماره ، شی ، آرایه ، رشته GEO به اشتباه فرمت شده ، مختصات نامعتبر)
به عنوان مثال ، بیایید به سادگی به لیست کالاها افزودیم که فروشنده_ید که در آن می توان یک مورد را از نظر جسمی خریداری کرد:
و بیایید برخی از فروشندگان را با مکان های ژئوریمی خود اضافه کنیم:
برای فهرست بندی آرایه عددی فروشنده_ید ، JSONPATH $ . VENDOR_ID را در تعریف طرحواره در هنگام ایجاد شاخص مشخص کنید:
برای نمایه سازی مکان GEO Array ، JSONPATH $ . location را در تعریف طرحواره در هنگام ایجاد شاخص مشخص کنید:
اکنون می توانیم یک فروشنده نزدیک به یک مکان خاص را جستجو کنیم. به عنوان مثال ، مشتری در GEO Coordinates 34. 5،31. 5 قرار دارد و ما می خواهیم فروشندگانی را که در محدوده 40 کیلومتر از مکان ما قرار دارند ، بگیریم.
اکنون می توانیم به دنبال محصولاتی که توسط این فروشندگان ارائه شده است ، به عنوان مثال:
آرایه های JSON به عنوان بردار
با شروع با Redisearch 2. 6. 0 ، می توانید یک JSONPATH را که منجر به مجموعه ای از مقادیر عددی به عنوان یک نوع بردار در طرح فهرست می شود ، فهرست کنید.
اگر می خواهید چندین آرایه عددی را به عنوان وکتور فهرست کنید ، از jsonPath استفاده کنید که منجر به چندین آرایه عددی با استفاده از اپراتورهای JSONPATH مانند Wildcard ، Filter ، Union ، Array Clice و/یا تبار بازگشتی شود.
به عنوان مثال ، فرض کنیم که موارد JSON ما شامل مجموعه ای از تعبیه های بردار است ، که در آن هر بردار تصویری متفاوت از همان محصول را نشان می دهد. برای فهرست بندی این بردارها ، jsonpath $ . embeddings [*] را در تعریف طرحواره در هنگام ایجاد شاخص مشخص کنید:
بر خلاف مورد با نوع عددی ، تنظیم یک مسیر استاتیک مانند $ $ تعبیه در طرح برای نوع بردار به شما امکان نمی دهد چندین بردار ذخیره شده در زیر آن قسمت را فهرست بندی کنید. از این رو ، اگر شما را به عنوان مسیری برای طرحواره شاخص تنظیم کنید ، مشخص کردن مجموعه ای از بردارها در قسمت تعبیه در JSON شما باعث خرابی نمایه سازی می شود.
اکنون می توانید دو هدفون را که بیشتر شبیه به یک تصویر تعبیه شده با استفاده از Query Search Search Search Vector Search است ، جستجو کنید.:مثلا:
توجه داشته باشید که 0. 771500051022 فاصله L2 بین بردار پرس و جو و [-0. 8 ، -0. 15،0. 33 ، -0. 01] است که عنصر دوم در آرایه تعبیه شده است و از فاصله L2 بین بردار پرس و جو و [-پایین تر است. 0. 7 ، -0. 51،0. 88،0. 14] ، که اولین عنصر در آرایه تعبیه است.
برای اطلاعات بیشتر در مورد نحو شباهت بردار ، به قسمت های بردار مراجعه کنید.
شاخص اشیاء JSON
شما نمی توانید اشیاء JSON را فهرست کنید. اگر بیان jsonPath یک شی را برگرداند ، نادیده گرفته می شود.
برای نمایه سازی محتوای یک شیء JSON ، باید عناصر فردی را در درون شیء در ویژگی های جداگانه نمایه کنید.
به عنوان مثال ، برای فهرست بندی اتصال JSON ، $ . connection. wireless و $ . connection. type را هنگام ایجاد فهرست به عنوان ویژگی های جداگانه تعریف کنید:
پس از ایجاد فهرست جدید ، می توانید مواردی را با برچسب بی سیم تنظیم کنید که روی True تنظیم شده است:
همچنین می توانید مواردی را با نوع اتصال بلوتوث جستجو کنید:
پیش بینی
ft. search کل سند JSON را به طور پیش فرض برمی گرداند. اگر می خواهید نتایج جستجوی برگشتی را به ویژگی های خاص محدود کنید ، می توانید از Projection Field استفاده کنید.
ویژگی های خاص را برگردانید
هنگامی که یک پرس و جو جستجو را اجرا می کنید ، می توانید از کلمه کلیدی بازگشت استفاده کنید تا مشخص کنید کدام ویژگی هایی را که می خواهید در نتایج جستجو بگنجانید. برای بازگشت نیز باید تعداد فیلدها را مشخص کنید.
به عنوان مثال ، این پرس و جو فقط نام و قیمت هر مجموعه هدفون را برمی گرداند:
پروژه با JsonPath
برای استخراج هر بخشی از سند JSON ، حتی زمینه هایی که در طرح شاخص تعریف نشده اند ، می توانید از عبارات JSONPath در یک بیانیه بازگشت استفاده کنید.
به عنوان مثال ، پرس و جو زیر از بیان JsonPath $ . stock برای بازگشت سهام هر مورد علاوه بر ویژگی های نام و قیمت استفاده می کند.
توجه داشته باشید که نام املاک برگشتی خود عبارت JsonPath است: "$ . stock".
می توانید از گزینه AS برای مشخص کردن نام مستعار برای ویژگی برگشتی استفاده کنید:
این پرس و جو به جای بیان JSONPATH "$ . stock" ، این زمینه را به عنوان "سهام" نام مستعار باز می گرداند.
اصطلاحات جستجو را برجسته کنید
می توانید اصطلاحات جستجوی مربوطه را در هر ویژگی متن فهرست بندی شده برجسته کنید.
برای ft. search ، شما باید صریحاً تنظیم کنید که ویژگی هایی را که می خواهید بعد از پارامترهای بازگشت و برجسته برجسته کنید.
برای مشخص کردن رشته هایی که اصطلاحات جستجوی تطبیق را احاطه کرده اند (یا برجسته می شوند) از کلمه کلیدی برچسب های اختیاری استفاده کنید.
به عنوان مثال ، کلمه "بلوتوث" را با برچسب های جسورانه HTML در نام ها و توضیحات مورد برجسته کنید:
جمع با jsonpath
می توانید از تجمع برای تولید آمار یا ایجاد نمایش داده های جنبه استفاده کنید.
گزینه Load عبارات JSONPATH را می پذیرد. شما می توانید از هر مقدار در خط لوله استفاده کنید ، حتی اگر مقدار فهرست بندی نشده باشد.
در این مثال از تجمع برای محاسبه تخفیف 10 ٪ قیمت برای هر مورد استفاده می شود و مواردی را از کم هزینه تا گران ترین مرتب می کند:
نمایش داده شدگان ft. aggregate نیاز به اصلاح کننده های ویژگی دارند. به جز گزینه بار ، از عبارات JsonPath در نمایش داده شد ، زیرا تجزیه کننده پرس و جو از آنها کاملاً پشتیبانی نمی کند.
محدودیت های شاخص
نقشه برداری طرحواره
در حین ایجاد شاخص ، شما باید عناصر JSON را در زمینه های طرحواره به شرح زیر نقشه برداری کنید:
- رشته ها به عنوان متن ، برچسب یا GEO.
- اعداد به صورت عددی.
- Booleans به عنوان برچسب.
- آرایه JSON
- مجموعه ای از رشته ها به عنوان برچسب یا متن.
- آرایه اعداد به عنوان عددی یا بردار.
- مجموعه ای از مختصات GEO به عنوان Geo.
- مقادیر تهی در چنین آرایه هایی نادیده گرفته می شود.
برچسب قابل مرتب سازی
اگر شما یک فهرست برای اسناد JSON با JSONPath که منجر به آرایه یا چند مقادیر می شود ، ایجاد می کنید ، فقط مقدار اول با مرتب سازی در نظر گرفته می شود
در این صفحه
این یک وب سایت جامعه است که توسط Redis Ltd. © 2022 حمایت می شود. Redis و آرم مکعب علائم تجاری ثبت شده Redis Ltd. شرایط استفاده و خط مشی رازداری هستند.< Pan> ft. aggregate نمایش داده شد به اصلاح کننده های ویژگی نیاز دارند. به جز گزینه بار ، از عبارات JsonPath در نمایش داده شد ، زیرا تجزیه کننده پرس و جو از آنها کاملاً پشتیبانی نمی کند.