{"id":106767,"date":"2025-04-29T13:56:42","date_gmt":"2025-04-29T09:26:42","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/"},"modified":"2025-04-29T13:56:42","modified_gmt":"2025-04-29T09:26:42","slug":"semantic-search-with-spring-boot-redis-48l0","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/","title":{"rendered":"\u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u0639\u0646\u0627\u06cc\u06cc \u0628\u0627 \u0628\u0648\u062a \u0628\u0647\u0627\u0631 \u0648 redis"},"content":{"rendered":"<div data-article-id=\"2430663\" id=\"article-body\">\n<blockquote>\n<p><strong>tl \u061b \u062f\u06a9\u062a\u0631:<\/strong><br \/>\u0634\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0633\u0627\u062e\u062a \u06cc\u06a9 <strong>\u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u0639\u0646\u0627\u06cc\u06cc<\/strong> \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <strong>\u0686\u06a9\u0645\u0647 \u0628\u0647\u0627\u0631\u06cc<\/strong> \u0648\u062a <strong>\u0645\u062c\u062f\u062f\u0627\u064b<\/strong>\u0628\u0634\u0631<\/p>\n<p>\u0628\u0647 \u062c\u0627\u06cc \u0645\u0637\u0627\u0628\u0642\u062a \u0628\u0627 \u06a9\u0644\u0645\u0627\u062a \u062f\u0642\u06cc\u0642 \u060c \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u0639\u0646\u0627\u06cc\u06cc \u067e\u06cc\u062f\u0627 \u0645\u06cc \u06a9\u0646\u062f <strong>\u0645\u0639\u0646\u06cc<\/strong> \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <strong>\u062c\u0633\u062a\u062c\u0648\u06cc \u0634\u0628\u0627\u0647\u062a \u0628\u0631\u062f\u0627\u0631 (VSS)<\/strong>\u0628\u0634\u0631<\/p>\n<p>\u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627 \u062a\u0628\u062f\u06cc\u0644 \u062e\u0644\u0627\u0635\u0647 \u062f\u0627\u0633\u062a\u0627\u0646 \u0647\u0627\u06cc \u0641\u06cc\u0644\u0645 \u0628\u0647 <strong>\u0628\u0631\u062f\u0627\u0631<\/strong> \u0628\u0627 <strong>\u0645\u062f\u0644 \u0647\u0627\u06cc \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647<\/strong>\u060c \u0630\u062e\u06cc\u0631\u0647 \u0622\u0646\u0647\u0627 \u062f\u0631 <strong>\u0645\u062c\u062f\u062f\u0627\u064b<\/strong> (\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0628\u0627\u0646\u06a9 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0628\u0631\u062f\u0627\u0631) \u060c \u0648 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0646 \u0646\u0632\u062f\u06cc\u06a9\u062a\u0631\u06cc\u0646 \u0645\u0633\u0627\u0628\u0642\u0627\u062a \u0628\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631.<\/p>\n<\/blockquote>\n<p><\/p>\n<blockquote>\n<p>\u0648\u06cc\u062f\u0626\u0648: \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u0639\u0646\u0627\u06cc\u06cc \u0686\u06cc\u0633\u062a\u061f<\/p>\n<\/blockquote>\n<p>\u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u062c\u0633\u062a\u062c\u0648\u06af\u0631 \u0633\u0646\u062a\u06cc \u0628\u0627 \u062a\u0637\u0628\u06cc\u0642 \u06a9\u0644\u0645\u0627\u062a \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u06a9\u0644\u0645\u0627\u062a \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u062f\u0631 \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u06cc\u0627 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u0633\u0646\u0627\u062f \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f. \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 \u0645\u0633\u0627\u0628\u0642\u0627\u062a \u062f\u0642\u06cc\u0642 \u06cc\u0627 \u062c\u0632\u0626\u06cc \u0628\u062f\u0648\u0646 \u062f\u0631\u06a9 \u0645\u0639\u0646\u06cc \u062f\u0631 \u067e\u0634\u062a \u06a9\u0644\u0645\u0627\u062a \u0627\u0633\u062a.<\/p>\n<p>\u0627\u0632 \u0637\u0631\u0641 \u062f\u06cc\u06af\u0631 \u060c \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u0639\u0646\u0627\u06cc\u06cc \u0633\u0639\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0645\u0639\u0646\u0627\u06cc \u067e\u0634\u062a \u0622\u0646\u0686\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0645\u06cc \u067e\u0631\u0633\u062f \u062f\u0631\u06a9 \u06a9\u0646\u062f. <strong>\u0627\u06cc\u0646 \u0628\u0631 \u0631\u0648\u06cc \u0645\u0641\u0627\u0647\u06cc\u0645 \u0645\u062a\u0645\u0631\u06a9\u0632 \u0627\u0633\u062a \u060c \u0646\u0647 \u0641\u0642\u0637 \u06a9\u0644\u0645\u0627\u062a \u06a9\u0644\u06cc\u062f\u06cc \u060c<\/strong> \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0646 \u0622\u0646\u0686\u0647 \u062f\u0631 \u0648\u0627\u0642\u0639 \u0645\u06cc \u062e\u0648\u0627\u0647\u0646\u062f \u060c \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0631\u0627 \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062f\u0647 \u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u060c \u062f\u0631 \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u067e\u062e\u0634 \u0641\u06cc\u0644\u0645 \u060c \u0627\u06af\u0631 \u062e\u0644\u0627\u0635\u0647 \u062f\u0627\u0633\u062a\u0627\u0646 \u06cc\u06a9 \u0641\u06cc\u0644\u0645 \u062f\u0631 \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0634\u0648\u062f <strong>&#8220;\u06cc\u06a9 \u0639\u0631\u0648\u0633\u06a9 \u06a9\u0627\u0628\u0648\u06cc \u0648\u0642\u062a\u06cc \u06cc\u06a9 \u0627\u0633\u0628\u0627\u0628 \u0628\u0627\u0632\u06cc \u0641\u0636\u0627\u06cc\u06cc \u062c\u062f\u06cc\u062f \u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647 \u0635\u0627\u062d\u0628 \u0627\u0648 \u0642\u0631\u0627\u0631 \u0645\u06cc \u06af\u06cc\u0631\u062f \u060c \u0627\u062d\u0633\u0627\u0633 \u062a\u0647\u062f\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f.&#8221;<\/strong> \u0627\u0645\u0627 \u06a9\u0627\u0631\u0628\u0631 \u062c\u0633\u062a\u062c\u0648 \u0645\u06cc \u06a9\u0646\u062f <strong>&#8220;\u0627\u0633\u0628\u0627\u0628 \u0628\u0627\u0632\u06cc \u0647\u0627\u06cc \u062d\u0633\u0627\u062f\u062a \u0628\u0627 \u0631\u0642\u06cc\u0628 \u062c\u062f\u06cc\u062f \u0645\u0628\u0627\u0631\u0632\u0647 \u0645\u06cc \u06a9\u0646\u062f \u060c&#8221;<\/strong> \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u062c\u0633\u062a\u062c\u0648\u06cc \u0633\u0646\u062a\u06cc \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0641\u06cc\u0644\u0645 \u0631\u0627 \u067e\u06cc\u062f\u0627 \u0646\u06a9\u0646\u062f \u0632\u06cc\u0631\u0627 \u06a9\u0644\u0645\u0627\u062a \u062f\u0642\u06cc\u0642 \u062e\u0637 \u0646\u0645\u06cc \u0634\u0648\u0646\u062f. <\/p>\n<p>\u0627\u0645\u0627 \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u0639\u0646\u0627\u06cc\u06cc \u0645\u0639\u0646\u0627\u06cc\u06cc \u0647\u0646\u0648\u0632 \u0647\u0645 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0627\u06cc\u0646 \u062f\u0648 \u0627\u06cc\u062f\u0647 \u0631\u0627 \u0628\u0647 \u0647\u0645 \u0648\u0635\u0644 \u06a9\u0646\u062f \u0648 \u0641\u06cc\u0644\u0645 \u0645\u0646\u0627\u0633\u0628\u06cc \u0631\u0627 \u0628\u0647 \u0648\u062c\u0648\u062f \u0622\u0648\u0631\u062f. \u0627\u06cc\u0646 \u062f\u0631\u06a9 \u0645\u06cc \u06a9\u0646\u062f <em>\u0645\u0639\u0646\u06cc<\/em> \u067e\u0634\u062a \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0634\u0645\u0627 &#8211; \u0646\u0647 \u0641\u0642\u0637 \u06a9\u0644\u0645\u0627\u062a \u062f\u0642\u06cc\u0642.<\/p>\n<p>\u062f\u0631 \u067e\u0634\u062a \u0635\u062d\u0646\u0647 \u060c \u0627\u06cc\u0646 \u0628\u0647 \u0644\u0637\u0641 <strong>\u062c\u0633\u062a\u062c\u0648\u06cc \u0634\u0628\u0627\u0647\u062a \u0628\u0631\u062f\u0627\u0631<\/strong>\u0628\u0634\u0631 \u0645\u062a\u0646 (\u06cc\u0627 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06cc\u0627 \u0635\u0648\u062a\u06cc) \u0631\u0627 \u0628\u0647 \u0628\u0631\u062f\u0627\u0631\u0647\u0627 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc \u06a9\u0646\u062f &#8211; \u0644\u06cc\u0633\u062a \u0627\u0639\u062f\u0627\u062f \u0622\u0646\u0647\u0627 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0648\u06a9\u062a\u0648\u0631 \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u062f \u0648 \u0633\u067e\u0633 \u0645\u0648\u0627\u0631\u062f\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0647 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0634\u0645\u0627 \u0646\u0632\u062f\u06cc\u06a9\u062a\u0631 \u0627\u0633\u062a \u067e\u06cc\u062f\u0627 \u0645\u06cc \u06a9\u0646\u062f. <\/p>\n<p>\u0627\u0645\u0631\u0648\u0632 \u060c <strong>\u0645\u0627 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0633\u062a\u062c\u0648\u06cc \u0634\u0628\u0627\u0647\u062a \u0648\u06a9\u062a\u0648\u0631 \u0628\u0633\u0627\u0632\u06cc\u0645 \u06a9\u0647 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0641\u06cc\u0644\u0645 \u0647\u0627 \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 *\u0645\u0639\u0646\u06cc *\u062e\u0644\u0627\u0635\u0647 \u062f\u0627\u0633\u062a\u0627\u0646 \u062e\u0648\u062f \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0646\u062f &#8211; \u0646\u0647 \u0641\u0642\u0637 \u0645\u0637\u0627\u0628\u0642\u062a \u0628\u0627 \u06a9\u0644\u0645\u0627\u062a \u06a9\u0644\u06cc\u062f\u06cc \u062f\u0642\u06cc\u0642<\/strong>\u0628\u0634\u0631 \u0628\u0647 \u0637\u0648\u0631\u06cc \u06a9\u0647 \u062d\u062a\u06cc \u0627\u06af\u0631 \u0622\u0646\u0647\u0627 \u0639\u0646\u0648\u0627\u0646 \u0631\u0627 \u0646\u0645\u06cc \u062f\u0627\u0646\u0646\u062f \u060c \u0647\u0646\u0648\u0632 \u0647\u0645 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0641\u06cc\u0644\u0645 \u0645\u0646\u0627\u0633\u0628\u06cc \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0639\u0645\u0648\u0645\u06cc \u0627\u0632 \u062e\u0644\u0627\u0635\u0647 \u062f\u0627\u0633\u062a\u0627\u0646 \u0628\u062f\u0633\u062a \u0622\u0648\u0631\u0646\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u060c \u0645\u0627 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0648\u062a \u0628\u0647\u0627\u0631 \u0631\u0627 \u0627\u0632 \u0627\u0628\u062a\u062f\u0627 \u0645\u06cc \u0633\u0627\u0632\u06cc\u0645 \u0648 \u0628\u0647 \u0622\u0646 \u0648\u0635\u0644 \u0645\u06cc \u0634\u0648\u06cc\u0645 <strong>redis \u062f\u0631 \u0645\u0648\u0631\u062f \u0628\u0647\u0627\u0631<\/strong>\u0628\u0634\u0631 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0645\u0627 \u0631\u0627 \u0628\u0647 \u0628\u0631\u062f\u0627\u0631\u0647\u0627 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc \u06a9\u0646\u062f \u060c \u0622\u0646\u0647\u0627 \u0631\u0627 \u062f\u0631 Redis \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0647\u0646\u06af\u0627\u0645 \u0627\u0631\u0633\u0627\u0644 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u060c \u062c\u0633\u062a\u062c\u0648\u0647\u0627\u06cc \u0628\u0631\u062f\u0627\u0631 \u0633\u0631\u06cc\u0639 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"\u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#redis_%D8%A8%D9%87_%D8%B9%D9%86%D9%88%D8%A7%D9%86_%DB%8C%DA%A9_%D8%A8%D8%A7%D9%86%DA%A9_%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA%DB%8C_%D8%A8%D8%B1%D8%AF%D8%A7%D8%B1\" >redis \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0628\u0627\u0646\u06a9 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0628\u0631\u062f\u0627\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#redis_%D8%AF%D8%B1_%D9%85%D9%88%D8%B1%D8%AF_%D8%A8%D9%87%D8%A7%D8%B1\" >redis \u062f\u0631 \u0645\u0648\u0631\u062f \u0628\u0647\u0627\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87_%D8%AF%D8%A7%D8%AF%D9%87\" >\u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#%D8%B3%D8%A7%D8%AE%D8%AA_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87\" >\u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#0_%D9%85%D8%AE%D8%B2%D9%86_GitHub\" >0. \u0645\u062e\u0632\u0646 GitHub<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#1_%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C_%D9%87%D8%A7%DB%8C_%D9%85%D9%88%D8%B1%D8%AF_%D9%86%DB%8C%D8%A7%D8%B2_%D8%B1%D8%A7_%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\" >1. \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#2_%D9%85%D9%88%D8%AC%D9%88%D8%AF%DB%8C%D8%AA_%D9%81%DB%8C%D9%84%D9%85_%D8%B1%D8%A7_%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%DA%A9%D9%86%DB%8C%D8%AF\" >2. \u0645\u0648\u062c\u0648\u062f\u06cc\u062a \u0641\u06cc\u0644\u0645 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#3_%D8%B1%D8%A7%D8%A8%D8%B7_%D9%85%D8%AE%D8%B2%D9%86\" >3. \u0631\u0627\u0628\u0637 \u0645\u062e\u0632\u0646<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#4_%D8%B3%D8%B1%D9%88%DB%8C%D8%B3_%D8%AC%D8%B3%D8%AA%D8%AC%D9%88\" >4. \u0633\u0631\u0648\u06cc\u0633 \u062c\u0633\u062a\u062c\u0648<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#5_%D8%B3%D8%B1%D9%88%DB%8C%D8%B3_%D9%81%DB%8C%D9%84%D9%85_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A8%D8%A7%D8%B1%DA%AF%DB%8C%D8%B1%DB%8C_%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7\" >5. \u0633\u0631\u0648\u06cc\u0633 \u0641\u06cc\u0644\u0645 \u0628\u0631\u0627\u06cc \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#5_%DA%A9%D9%86%D8%AA%D8%B1%D9%84_%DA%A9%D9%86%D9%86%D8%AF%D9%87_%D8%AC%D8%B3%D8%AA%D8%AC%D9%88\" >5. \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u062c\u0633\u062a\u062c\u0648<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#6_%D8%A8%D9%88%D8%AA_%D8%A7%D8%B3%D8%AA%D8%B1%D9%BE\" >6. \u0628\u0648\u062a \u0627\u0633\u062a\u0631\u067e<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#7_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%D9%87%D8%A7%DB%8C_%D9%86%D9%85%D9%88%D9%86%D9%87\" >7. \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u0646\u0645\u0648\u0646\u0647<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#%D9%BE%DB%8C%DA%86%DB%8C%D8%AF%D9%86\" >\u067e\u06cc\u0686\u06cc\u062f\u0646<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#%D9%85%D9%86%D8%A7%D8%A8%D8%B9_%D9%87%D9%88%D8%B4_%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C_%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1\" >\u0645\u0646\u0627\u0628\u0639 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0628\u06cc\u0634\u062a\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/nabfollower.com\/blog\/semantic-search-with-spring-boot-redis-48l0\/#%DA%A9%D9%86%D8%AC%DA%A9%D8%A7%D9%88_%D8%A8%D9%85%D8%A7%D9%86\" >\u06a9\u0646\u062c\u06a9\u0627\u0648 \u0628\u0645\u0627\u0646!<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"redis_%D8%A8%D9%87_%D8%B9%D9%86%D9%88%D8%A7%D9%86_%DB%8C%DA%A9_%D8%A8%D8%A7%D9%86%DA%A9_%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA%DB%8C_%D8%A8%D8%B1%D8%AF%D8%A7%D8%B1\"><\/span>\n<p>  redis \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0628\u0627\u0646\u06a9 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0628\u0631\u062f\u0627\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<blockquote>\n<p>\u0648\u06cc\u062f\u0626\u0648: \u0628\u0627\u0646\u06a9 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0628\u0631\u062f\u0627\u0631 \u0686\u06cc\u0633\u062a\u061f<\/p>\n<\/blockquote>\n<p>\u062f\u0631 15 \u0633\u0627\u0644 \u06af\u0630\u0634\u062a\u0647 \u060c Redis \u0628\u0647 \u0632\u06cc\u0631\u0633\u0627\u062e\u062a \u0647\u0627\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc Realtime \u062a\u0628\u062f\u06cc\u0644 \u0634\u062f. \u0627\u0645\u0631\u0648\u0632 \u060c \u0628\u0627 Redis 8 \u060c \u0645\u062a\u0639\u0647\u062f \u0634\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0632\u06cc\u0631\u0633\u0627\u062e\u062a \u0647\u0627\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u062a\u0628\u062f\u06cc\u0644 \u0634\u0648\u062f. <\/p>\n<p>Redis 8 \u0646\u0647 \u062a\u0646\u0647\u0627 \u0646\u0633\u062e\u0647 \u062c\u0627\u0645\u0639\u0647 Redis \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0631\u062f\u0627\u0631 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc \u06a9\u0646\u062f \u060c \u0628\u0644\u06a9\u0647 \u0622\u0646 \u0631\u0627 \u0633\u0631\u06cc\u0639\u062a\u0631\u06cc\u0646 \u0648 \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u062a\u0631\u06cc\u0646 \u0628\u0627\u0646\u06a9 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0627\u0645\u0631\u0648\u0632 \u062f\u0631 \u0628\u0627\u0632\u0627\u0631 \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u062f. <strong>Redis 8 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0628\u062f\u0648\u0646 \u0645\u062c\u0627\u0632\u0627\u062a \u062a\u0623\u062e\u06cc\u0631 \u0628\u0647 \u06cc\u06a9 \u0645\u06cc\u0644\u06cc\u0627\u0631\u062f \u0628\u0631\u062f\u0627\u0631 \u0645\u0642\u06cc\u0627\u0633 \u062f\u0647\u06cc\u062f.<\/strong><\/p>\n<p>\u0628\u06cc\u0634\u062a\u0631 \u0628\u06cc\u0627\u0645\u0648\u0632\u06cc\u062f: https:\/\/redis.io\/blog\/searching-1-billion-vectors-with-redis-8\/<\/p>\n<h2><span class=\"ez-toc-section\" id=\"redis_%D8%AF%D8%B1_%D9%85%D9%88%D8%B1%D8%AF_%D8%A8%D9%87%D8%A7%D8%B1\"><\/span>\n<p>  <strong>redis \u062f\u0631 \u0645\u0648\u0631\u062f \u0628\u0647\u0627\u0631<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0648 \u0645\u0634\u062a\u0631\u06cc\u0627\u0646 \u0645\u0627 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0627\u0632 \u0647\u0645\u0647 \u06a9\u0627\u0631\u0647\u0627\u06cc\u06cc \u06a9\u0647 Redis \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f &#8211; \u0628\u0627 \u0633\u0631\u0639\u062a Redis \u0634\u0646\u0627\u062e\u062a\u0647 \u0634\u0648\u062f &#8211; \u0645\u0627 \u062a\u0635\u0645\u06cc\u0645 \u06af\u0631\u0641\u062a\u06cc\u0645 \u06a9\u0647 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645 <strong>redis \u062f\u0631 \u0645\u0648\u0631\u062f \u0628\u0647\u0627\u0631<\/strong>\u060c \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0627\u06cc \u06a9\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0628\u0647\u0627\u0631\u06cc \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a. <\/p>\n<p>\u0628\u0647\u0627\u0631 redis om \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0645\u0627 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0628\u0627 redis \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0631\u0642\u0631\u0627\u0631 \u06a9\u0646\u0646\u062f \u060c \u0646\u0647\u0627\u062f\u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u06af\u0648\u0628\u0631\u062f\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f <strong>jsons<\/strong> \u06cc\u0627 \u0647\u0634 \u060c \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646\u0647\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0645\u0624\u062b\u0631 \u0627\u0632 \u0622\u0646\u0647\u0627 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u06a9\u0646\u06cc\u062f <strong>\u0645\u0648\u062a\u0648\u0631 \u067e\u0631\u0633 \u0648 \u062c\u0648 Redis<\/strong> \u0648 \u062d\u062a\u06cc \u0627\u0632 \u0633\u0627\u062e\u062a\u0627\u0631\u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0627\u062d\u062a\u0645\u0627\u0644\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <strong>Count-Min Sketch \u060c \u0641\u06cc\u0644\u062a\u0631\u0647\u0627\u06cc \u0634\u06a9\u0648\u0641\u0647 \u060c \u0641\u06cc\u0644\u062a\u0631\u0647\u0627\u06cc \u0641\u0627\u062e\u062a\u0647<\/strong>\u060c \u0648 \u0628\u06cc\u0634\u062a\u0631 <\/p>\n<p>\u0628\u0647\u0627\u0631 redis om on github: https:\/\/github.com\/redis\/redis-om-spring<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87_%D8%AF%D8%A7%D8%AF%D9%87\"><\/span>\n<p>  \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u06cc \u06a9\u0647 \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 \u0622\u0646 \u062e\u0648\u0627\u0647\u06cc\u0645 \u0628\u0648\u062f \u060c \u06a9\u0627\u062a\u0627\u0644\u0648\u06af \u0647\u0632\u0627\u0631\u0627\u0646 \u0641\u06cc\u0644\u0645 \u0627\u0633\u062a. \u0647\u0631 \u06cc\u06a9 \u0627\u0632 \u0627\u06cc\u0646 \u0641\u06cc\u0644\u0645 \u0647\u0627 \u062f\u0627\u0631\u0627\u06cc \u0627\u0628\u0631\u062f\u0627\u062f\u0647 \u0627\u06cc \u0645\u0627\u0646\u0646\u062f \u0639\u0646\u0648\u0627\u0646 \u060c \u0628\u0627\u0632\u06cc\u06af\u0631\u0627\u0646 \u060c \u0698\u0627\u0646\u0631 \u060c \u0633\u0627\u0644 \u0648 \u062e\u0644\u0627\u0635\u0647 \u062f\u0627\u0633\u062a\u0627\u0646 \u0622\u0646 \u0647\u0633\u062a\u0646\u062f. \u067e\u0631\u0648\u0646\u062f\u0647 JSON \u06a9\u0647 \u0627\u06cc\u0646 \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u062f\u0631 \u0645\u062e\u0632\u0646 \u0647\u0645\u0631\u0627\u0647 \u0628\u0627 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u06cc\u0627\u0641\u062a.<\/p>\n<p>\u0646\u0645\u0648\u0646\u0647:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>{\n  \"title\": \"Toy Story\",\n  \"year\": 1995,\n  \"cast\": [\n   \"Tim Allen\",\n   \"Tom Hanks\",\n   \"Don Rickles\"\n  ],\n  \"genres\": [\n   \"Animated\",\n   \"Comedy\"\n  ],\n  \"href\": \"Toy_Story\",\n  \"extract\": \"Toy Story is a 1995 American computer-animated comedy film directed by John Lasseter, produced by Pixar Animation Studios and released by Walt Disney Pictures. The first installment in the  Toy Story franchise, it was the first entirely computer-animated feature film, as well as the first feature film from Pixar. It was written by Joss Whedon, Andrew Stanton, Joel Cohen, and Alec Sokolow from a story by Lasseter, Stanton, Pete Docter, and Joe Ranft. The film features music by Randy Newman, was produced by Bonnie Arnold and Ralph Guggenheim, and was executive-produced by Steve Jobs and Edwin Catmull. The film features the voices of Tom Hanks, Tim Allen, Don Rickles, Jim Varney, Wallace Shawn, John Ratzenberger, Annie Potts, R. Lee Ermey, John Morris, Laurie Metcalf, and Erik von Detten.\",\n  \"thumbnail\": \"https:\/\/upload.wikimedia.org\/wikipedia\/en\/1\/13\/Toy_Story.jpg\",\n  \"thumbnail_width\": 250,\n  \"thumbnail_height\": 373\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B3%D8%A7%D8%AE%D8%AA_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87\"><\/span>\n<p>  \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Boot Spring \u0628\u0627 Redis Om Spring \u0633\u0627\u062e\u062a\u0647 \u062e\u0648\u0627\u0647\u062f \u0634\u062f. <strong>\u0627\u06cc\u0646 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0641\u06cc\u0644\u0645 \u0647\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u0639\u0646\u0627\u06cc\u06cc \u0628\u0647 \u062c\u0627\u06cc \u062a\u0637\u0628\u06cc\u0642 \u06a9\u0644\u0645\u0627\u062a \u06a9\u0644\u06cc\u062f\u06cc \u060c \u062a\u0648\u0633\u0637 \u062e\u0644\u0627\u0635\u0647 \u062f\u0627\u0633\u062a\u0627\u0646 \u0622\u0646\u0647\u0627 \u062c\u0633\u062a\u062c\u0648 \u0634\u0648\u0646\u062f. ** \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0622\u0646 \u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0627 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062e\u0648\u062f \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f ** \u062c\u0633\u062a\u062c\u0648\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u0646\u062f<\/strong>\u0628\u0627 <strong>\u062a\u06a9\u0646\u06cc\u06a9\u06cc \u06a9\u0647 \u0634\u0628\u0627\u0647\u062a \u0628\u0631\u062f\u0627\u0631 \u0631\u0627 \u0628\u0627 \u0641\u06cc\u0644\u062a\u0631 \u0648 \u0645\u0631\u062a\u0628 \u0633\u0627\u0632\u06cc \u0633\u0646\u062a\u06cc \u062a\u0631\u06a9\u06cc\u0628 \u0645\u06cc \u06a9\u0646\u062f.<\/strong><\/p>\n<h3><span class=\"ez-toc-section\" id=\"0_%D9%85%D8%AE%D8%B2%D9%86_GitHub\"><\/span>\n<p>  0. \u0645\u062e\u0632\u0646 GitHub<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>** \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0645\u0644 \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u062f\u0631 GitHub \u06cc\u0627\u0641\u062a: ** https: \/\/github.com\/redis\/redis-om-ompring\/tree\/main\/demos\/roms-vss-movies\/<\/p>\n<h3><span class=\"ez-toc-section\" id=\"1_%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C_%D9%87%D8%A7%DB%8C_%D9%85%D9%88%D8%B1%D8%AF_%D9%86%DB%8C%D8%A7%D8%B2_%D8%B1%D8%A7_%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  1. \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0632 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0648\u062a \u0628\u0647\u0627\u0631 \u060c \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u067e\u0631\u0648\u0646\u062f\u0647 maven \u06cc\u0627 Gradle \u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f: <\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code><!-- Redis OM Spring for Redis object mapping and vector search -->\n<dependency>\n    <groupid>com.redis.om.spring<\/groupid>\n    <artifactid>redis-om-spring<\/artifactid>\n    <version>0.9.11<\/version>\n<\/dependency>\n\n<!-- Redis OM Spring uses Spring AI for creating embeddings (vectors) -->\n<dependency>\n    <groupid>org.springframework.ai<\/groupid>\n    <artifactid>spring-ai-openai<\/artifactid>\n    <version>1.0.0-M6<\/version>\n<\/dependency>\n<dependency>\n    <groupid>org.springframework.ai<\/groupid>\n    <artifactid>spring-ai-transformers<\/artifactid>\n    <version>1.0.0-M6<\/version>\n<\/dependency>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"2_%D9%85%D9%88%D8%AC%D9%88%D8%AF%DB%8C%D8%AA_%D9%81%DB%8C%D9%84%D9%85_%D8%B1%D8%A7_%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  2. \u0645\u0648\u062c\u0648\u062f\u06cc\u062a \u0641\u06cc\u0644\u0645 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Redis Om Spring \u062f\u0648 \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0627\u0639\u062b \u0645\u06cc \u0634\u0648\u062f \u0628\u0631\u062f\u0627\u0631 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0648 \u0627\u0646\u062c\u0627\u0645 \u062c\u0633\u062a\u062c\u0648\u06cc \u0634\u0628\u0627\u0647\u062a \u0628\u0631\u062f\u0627\u0631 \u0627\u0632 \u062f\u0631\u0648\u0646 \u0628\u0648\u062a \u0628\u0647\u0627\u0631 \u0622\u0633\u0627\u0646 \u0634\u0648\u062f.<\/p>\n<ul>\n<li>\n<p>Vectorize: \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062a\u0639\u0628\u06cc\u0647 \u0647\u0627\u06cc \u0628\u0631\u062f\u0627\u0631 \u0631\u0627 \u0627\u0632 \u0642\u0633\u0645\u062a \u0645\u062a\u0646 \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>indexed: \u0628\u0631\u0627\u06cc \u062c\u0633\u062a\u062c\u0648\u06cc \u06a9\u0627\u0631\u0622\u0645\u062f \u060c \u0646\u0645\u0627\u06cc\u0647 \u0633\u0627\u0632\u06cc \u0628\u0631\u062f\u0627\u0631 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0632\u0645\u06cc\u0646\u0647 \u0627\u0645\u06a9\u0627\u0646 \u067e\u0630\u06cc\u0631 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<\/ul>\n<p>\u0647\u0633\u062a\u0647 \u0627\u0635\u0644\u06cc \u0627\u062c\u0631\u0627\u06cc \u06a9\u0644\u0627\u0633 \u0641\u06cc\u0644\u0645 \u0628\u0627 \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0648\u06a9\u062a\u0648\u0631 Redis:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>@RedisHash \/\/ This annotation is used by Redis OM Spring to store the entity as a hash in Redis\npublic class Movie {\n\n    @Id \/\/ IDs are automatically generated by Redis OM Spring as ULID\n    private String title;\n\n    @Indexed(sortable = true) \/\/ This annotation enables indexing on the field for filtering and sorting\n    private int year;\n\n    @Indexed\n    private List<string> cast;\n\n    @Indexed\n    private List<string> genres;\n\n    private String href;\n\n    \/\/ This annotation automatically generates vector embeddings from the text\n    @Vectorize(\n            destination = \"embeddedExtract\", \/\/ The field where the embedding will be stored\n            embeddingType = EmbeddingType.SENTENCE, \/\/ Type of embedding to generate (Sentence, Image, face, or word)\n            provider = EmbeddingProvider.OPENAI, \/\/ The provider for generating embeddings (OpenAI, Transformers, VertexAI, etc.)\n            openAiEmbeddingModel = OpenAiApi.EmbeddingModel.TEXT_EMBEDDING_3_LARGE \/\/ The specific OpenAI model to use for embeddings\n    )\n    private String extract;\n\n    \/\/ This defines the vector field that will store the embeddings\n    \/\/ The indexed annotation enables vector search on this field\n    @Indexed(\n            schemaFieldType = SchemaFieldType.VECTOR, \/\/ Defines the field type as a vector\n            algorithm = VectorField.VectorAlgorithm.FLAT, \/\/ The algorithm used for vector search (FLAT or HNSW)\n            type = VectorType.FLOAT32,\n            dimension = 3072, \/\/ The dimension of the vector (must match the embedding model)\n            distanceMetric = DistanceMetric.COSINE, \/\/ The distance metric used for similarity search (Cosine or Euclidean)\n            initialCapacity = 10\n    )\n    private byte[] embeddedExtract;\n\n    private String thumbnail;\n    private int thumbnailWidth;\n    private int thumbnailHeight;\n\n    \/\/ Getters and setters...\n}\n<\/string><\/string><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"3_%D8%B1%D8%A7%D8%A8%D8%B7_%D9%85%D8%AE%D8%B2%D9%86\"><\/span>\n<p>  3. \u0631\u0627\u0628\u0637 \u0645\u062e\u0632\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u06cc\u06a9 \u0631\u0627\u0628\u0637 \u0645\u062e\u0632\u0646 \u0633\u0627\u062f\u0647 \u06a9\u0647 \u0628\u0627\u0639\u062b \u0627\u0641\u0632\u0627\u06cc\u0634 \u0645\u062c\u062f\u062f \u0645\u062c\u062f\u062f Repository \u0645\u06cc \u0634\u0648\u062f. \u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0631\u0648\u0634 SaveAll () \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>public interface MovieRepository extends RedisEnhancedRepository<movie string=\"\"> {}\n<\/movie><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u0627\u0635\u0644\u06cc CRUD \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0648\u062c\u0648\u062f\u0627\u062a \u0641\u06cc\u0644\u0645 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f \u060c \u0628\u0627 \u0627\u0648\u0644\u06cc\u0646 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u0639\u0645\u0648\u0645\u06cc \u0646\u0648\u0639 \u0645\u0648\u062c\u0648\u062f\u06cc\u062a \u0648 \u0646\u0648\u0639 \u062f\u0648\u0645 \u0646\u0648\u0639 ID \u0627\u0633\u062a.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"4_%D8%B3%D8%B1%D9%88%DB%8C%D8%B3_%D8%AC%D8%B3%D8%AA%D8%AC%D9%88\"><\/span>\n<p>  <strong>4. \u0633\u0631\u0648\u06cc\u0633 \u062c\u0633\u062a\u062c\u0648<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0633\u0631\u0648\u06cc\u0633 \u062c\u0633\u062a\u062c\u0648 \u0627\u0632 \u062f\u0648 \u0644\u0648\u0628\u06cc\u0627\u06cc \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 Redis Om Spring \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<ul>\n<li>\n<p>EntityStream: \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u062c\u0631\u06cc\u0627\u0646 \u0627\u0632 \u0646\u0647\u0627\u062f\u0647\u0627 \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u062c\u0633\u062a\u062c\u0648. \u062c\u0631\u06cc\u0627\u0646 \u0646\u0647\u0627\u062f \u0646\u0628\u0627\u06cc\u062f \u0628\u0627 API Java Streams \u0627\u0634\u062a\u0628\u0627\u0647 \u06af\u0631\u0641\u062a\u0647 \u0634\u0648\u062f. \u062c\u0631\u06cc\u0627\u0646 \u0645\u0648\u062c\u0648\u062f\u06cc\u062a \u06cc\u06a9 \u062f\u0633\u062a\u0648\u0631 redis \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0647 Redis \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f \u062a\u0627 Redis \u0628\u062a\u0648\u0627\u0646\u062f \u062c\u0633\u062a\u062c\u0648 \u060c \u0641\u06cc\u0644\u062a\u0631 \u0648 \u0645\u0631\u062a\u0628 \u0633\u0627\u0632\u06cc \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0627\u0631\u0622\u0645\u062f \u062f\u0631 \u0633\u0645\u062a \u062e\u0648\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f.<\/p>\n<\/li>\n<li>\n<p>\u062a\u0639\u0628\u06cc\u0647: \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u062a\u0639\u0628\u06cc\u0647 \u0628\u0631\u0627\u06cc \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0627\u0631\u0633\u0627\u0644 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f. \u067e\u0633 \u0627\u0632 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc Vectorize \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u062f\u0631 \u06a9\u0644\u0627\u0633 \u0641\u06cc\u0644\u0645 \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u0634\u0648\u062f\/<\/p>\n<\/li>\n<\/ul>\n<p>\u0639\u0645\u0644\u06a9\u0631\u062f \u062c\u0633\u062a\u062c\u0648 \u062f\u0631 SearchService \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>@Service\npublic class SearchService {\n\n    private static final Logger logger = LoggerFactory.getLogger(SearchService.class);\n    private final EntityStream entityStream;\n    private final Embedder embedder;\n\n    public SearchService(EntityStream entityStream, Embedder embedder) {\n        this.entityStream = entityStream;\n        this.embedder = embedder;\n    }\n\n    public List<pair double=\"\">&gt; search(\n            String query,\n            Integer yearMin,\n            Integer yearMax,\n            List<string> cast,\n            List<string> genres,\n            Integer numberOfNearestNeighbors) {\n        logger.info(\"Received text: {}\", query);\n        logger.info(\"Received yearMin: {} yearMax: {}\", yearMin, yearMax);\n        logger.info(\"Received cast: {}\", cast);\n        logger.info(\"Received genres: {}\", genres);\n\n        if (numberOfNearestNeighbors == null) numberOfNearestNeighbors = 3;\n        if (yearMin == null) yearMin = 1900;\n        if (yearMax == null) yearMax = 2100;\n\n        \/\/ Convert query text to vector embedding\n        byte[] embeddedQuery = embedder.getTextEmbeddingsAsBytes(List.of(query), Movie$.EXTRACT).getFirst();\n\n        \/\/ Perform vector search with additional filters\n        SearchStream<movie> stream = entityStream.of(Movie.class);\n        return stream\n                \/\/ KNN search for nearest vectors\n                .filter(Movie$.EMBEDDED_EXTRACT.knn(numberOfNearestNeighbors, embeddedQuery))\n                \/\/ Additional metadata filters (hybrid search)\n                .filter(Movie$.YEAR.between(yearMin, yearMax))\n                .filter(Movie$.CAST.eq(cast))\n                .filter(Movie$.GENRES.eq(genres))\n                \/\/ Sort by similarity score\n                .sorted(Movie$._EMBEDDED_EXTRACT_SCORE)\n                \/\/ Return both the movie and its similarity score\n                .map(Fields.of(Movie$._THIS, Movie$._EMBEDDED_EXTRACT_SCORE))\n                .collect(Collectors.toList());\n    }\n}\n<\/movie><\/string><\/string><\/pair><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u0633\u0631\u0648\u06cc\u0633 \u062c\u0633\u062a\u062c\u0648:<\/p>\n<ul>\n<li>\n<p>\u0627\u0632 EntityStream \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u062c\u0631\u06cc\u0627\u0646 \u062c\u0633\u062a\u062c\u0648 \u0628\u0631\u0627\u06cc \u0645\u0648\u062c\u0648\u062f\u0627\u062a \u0641\u06cc\u0644\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u067e\u0631\u0633 \u0648 \u062c\u0648 \u0645\u062a\u0646 \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u0648\u06a9\u062a\u0648\u0631 \u062a\u0639\u0628\u06cc\u0647 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0627\u0632 \u062c\u0633\u062a\u062c\u0648\u06cc K-Nearest \u0647\u0645\u0633\u0627\u06cc\u06af\u0627\u0646 (KNN) \u0628\u0631\u0627\u06cc \u06cc\u0627\u0641\u062a\u0646 \u0628\u0631\u062f\u0627\u0631\u0647\u0627\u06cc \u0645\u0634\u0627\u0628\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0641\u06cc\u0644\u062a\u0631\u0647\u0627\u06cc \u0627\u0636\u0627\u0641\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u062c\u0633\u062a\u062c\u0648\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc \u0627\u0639\u0645\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f (\u062a\u0631\u06a9\u06cc\u0628 \u0628\u0631\u062f\u0627\u0631 \u0648 \u062c\u0633\u062a\u062c\u0648\u06cc \u0633\u0646\u062a\u06cc)<\/p>\n<\/li>\n<li>\n<p>\u062c\u0641\u062a \u0641\u06cc\u0644\u0645 \u0647\u0627 \u0648 \u0646\u0645\u0631\u0627\u062a \u0634\u0628\u0627\u0647\u062a \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f<\/p>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"5_%D8%B3%D8%B1%D9%88%DB%8C%D8%B3_%D9%81%DB%8C%D9%84%D9%85_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A8%D8%A7%D8%B1%DA%AF%DB%8C%D8%B1%DB%8C_%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7\"><\/span>\n<p>  5. \u0633\u0631\u0648\u06cc\u0633 \u0641\u06cc\u0644\u0645 \u0628\u0631\u0627\u06cc \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Movieservice \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0641\u06cc\u0644\u0645 \u0631\u0627 \u0628\u0647 Redis \u0645\u06cc \u0631\u0633\u0627\u0646\u062f. \u0627\u06cc\u0646 \u06cc\u06a9 \u067e\u0631\u0648\u0646\u062f\u0647 JSON \u062d\u0627\u0648\u06cc \u062a\u0627\u0631\u06cc\u062e \u0641\u06cc\u0644\u0645 \u0631\u0627 \u0645\u06cc \u062e\u0648\u0627\u0646\u062f \u0648 \u0641\u06cc\u0644\u0645 \u0647\u0627 \u0631\u0627 \u062f\u0631 Redis \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f. <\/p>\n<blockquote>\n<p>\u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u06cc\u06a9 \u06cc\u0627 \u062f\u0648 \u062f\u0642\u06cc\u0642\u0647 \u0637\u0648\u0644 \u0628\u06a9\u0634\u062f \u062a\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u0631\u0627\u06cc \u0647\u0632\u0627\u0631\u0627\u0646 \u0641\u06cc\u0644\u0645 \u062f\u0631 \u067e\u0631\u0648\u0646\u062f\u0647 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0634\u0648\u062f \u0632\u06cc\u0631\u0627 \u0646\u0633\u0644 \u062a\u0639\u0628\u06cc\u0647 \u062f\u0631 \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f. \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc Vectorize \u0642\u0628\u0644 \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647 \u0641\u06cc\u0644\u0645 \u062f\u0631 Redis \u060c \u062a\u0639\u0628\u06cc\u0647 \u0628\u0631\u0627\u06cc \u0632\u0645\u06cc\u0646\u0647 \u0639\u0635\u0627\u0631\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<\/blockquote>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>@Service\npublic class MovieService {\n\n    private static final Logger log = LoggerFactory.getLogger(MovieService.class);\n    private final ObjectMapper objectMapper;\n    private final ResourceLoader resourceLoader;\n    private final MovieRepository movieRepository;\n\n    public MovieService(ObjectMapper objectMapper, ResourceLoader resourceLoader, MovieRepository movieRepository) {\n        this.objectMapper = objectMapper;\n        this.resourceLoader = resourceLoader;\n        this.movieRepository = movieRepository;\n    }\n\n    public void loadAndSaveMovies(String filePath) throws Exception {\n        Resource resource = resourceLoader.getResource(\"classpath:\" + filePath);\n        try (InputStream is = resource.getInputStream()) {\n            List<movie> movies = objectMapper.readValue(is, new TypeReference&lt;&gt;() {});\n            List<movie> unprocessedMovies = movies.stream()\n                    .filter(movie -&gt; !movieRepository.existsById(movie.getTitle()) &amp;&amp;\n                            movie.getYear() &gt; 1980\n                    ).toList();\n            long systemMillis = System.currentTimeMillis();\n            movieRepository.saveAll(unprocessedMovies);\n            long elapsedMillis = System.currentTimeMillis() - systemMillis;\n            log.info(\"Saved \" + movies.size() + \" movies in \" + elapsedMillis + \" ms\");\n        }\n    }\n\n    public boolean isDataLoaded() {\n        return movieRepository.count() &gt; 0;\n    }\n}\n<\/movie><\/movie><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"5_%DA%A9%D9%86%D8%AA%D8%B1%D9%84_%DA%A9%D9%86%D9%86%D8%AF%D9%87_%D8%AC%D8%B3%D8%AA%D8%AC%D9%88\"><\/span>\n<p>  5. \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u062c\u0633\u062a\u062c\u0648<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u06a9\u0646\u062a\u0631\u0644\u0631 REST \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062c\u0633\u062a\u062c\u0648 \u0631\u0627 \u062f\u0631 \u0645\u0639\u0631\u0636 \u0646\u0645\u0627\u06cc\u0634 \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>@RestController\npublic class SearchController {\n\n    private final SearchService searchService;\n\n    public SearchController(SearchService searchService) {\n        this.searchService = searchService;\n    }\n\n    @GetMapping(\"\/search\")\n    public Map<string object=\"\"> search(\n            @RequestParam(required = false) String text,\n            @RequestParam(required = false) Integer yearMin,\n            @RequestParam(required = false) Integer yearMax,\n            @RequestParam(required = false) List<string> cast,\n            @RequestParam(required = false) List<string> genres,\n            @RequestParam(required = false) Integer numberOfNearestNeighbors\n    ) {\n        List<pair double=\"\">&gt; matchedMovies = searchService.search(\n                text,\n                yearMin,\n                yearMax,\n                cast,\n                genres,\n                numberOfNearestNeighbors\n        );\n        return Map.of(\n                \"matchedMovies\", matchedMovies,\n                \"count\", matchedMovies.size()\n        );\n    }\n}\n<\/pair><\/string><\/string><\/string><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"6_%D8%A8%D9%88%D8%AA_%D8%A7%D8%B3%D8%AA%D8%B1%D9%BE\"><\/span>\n<p>  6. \u0628\u0648\u062a \u0627\u0633\u062a\u0631\u067e<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u06a9\u0644\u0627\u0633 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0635\u0644\u06cc REDIS OM Spring \u0631\u0627 \u0622\u063a\u0627\u0632 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0645\u06cc \u06a9\u0646\u062f. \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc EnabledisEnhancedReposities \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u062e\u0632\u0646 Redis Om Spring \u0631\u0627 \u0641\u0639\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>@SpringBootApplication\n@EnableRedisEnhancedRepositories(basePackages = {\"dev.raphaeldelio.redis8demo*\"})\npublic class Redis8DemoVectorSimilaritySearchApplication {\n\n    public static void main(String[] args) {\n        SpringApplication.run(Redis8DemoVectorSimilaritySearchApplication.class, args);\n    }\n\n    @Bean\n    CommandLineRunner loadData(MovieService movieService) {\n        return args -&gt; {\n            if (movieService.isDataLoaded()) {\n                System.out.println(\"Data already loaded. Skipping data load.\");\n                return;\n            }\n            movieService.loadAndSaveMovies(\"movies.json\");\n        };\n    }\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"7_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%D9%87%D8%A7%DB%8C_%D9%86%D9%85%D9%88%D9%86%D9%87\"><\/span>\n<p>  7. \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u0646\u0645\u0648\u0646\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062c\u0633\u062a\u062c\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>GET http:\/\/localhost:8082\/search?text=A movie about a young boy who goes to a wizardry school\n\nGET http:\/\/localhost:8082\/search?numberOfNearestNeighbors=1&amp;yearMin=1970&amp;yearMax=1990&amp;text=A movie about a kid and a scientist who go back in time\n\nGET http:\/\/localhost:8082\/search?cast=Dee Wallace,Henry Thomas&amp;text=A boy who becomes friend with an alien\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0646\u0645\u0648\u0646\u0647:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>GET http:\/\/localhost:8082\/search?numberOfNearestNeighbors=1&amp;yearMin=1970&amp;yearMax=1990&amp;text=A movie about a kid and a scientist who go back in time\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>\u067e\u0627\u0633\u062e \u0646\u0645\u0648\u0646\u0647:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>{<br\/>\"count\": 1,<br\/>\"matchedMovies\": [<br\/>{<br\/>\"first\": { \/\/ matched movie<br\/>\"title\": \"Back to the Future\",<br\/>\"year\": 1985,<br\/>\"cast\": [<br\/>\"Michael J. Fox\",<br\/>\"Christopher Lloyd\"<br\/>],<br\/>\"genres\": [<br\/>\"Science Fiction\"<br\/>],<br\/>\"extract\": \"Back to the Future is a 1985 American science fiction film directed by Robert Zemeckis and written by Zemeckis, and Bob Gale. It stars Michael J. Fox, Christopher Lloyd, Lea Thompson, Crispin Glover, and Thomas F. Wilson. Set in 1985, it follows Marty McFly (Fox), a teenager accidentally sent back to 1955 in a time-traveling DeLorean automobile built by his eccentric scientist friend Emmett \\\"Doc\\\" Brown (Lloyd), where he inadvertently prevents his future parents from falling in love \u2013 threatening his own existence \u2013 and is forced to reconcile them and somehow get back to the future.\",<br\/>\"thumbnail\": \"https:\/\/upload.wikimedia.org\/wikipedia\/en\/d\/d2\/Back_to_the_Future.jpg\"<br\/>},<br\/>\"second\": 0.463297247887 \/\/ similarity score (the lowest the closest)<br\/>}<br\/>]<br\/>}<br\/><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%DA%86%DB%8C%D8%AF%D9%86\"><\/span>\n<p>\u067e\u06cc\u0686\u06cc\u062f\u0646<br \/><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0648 \u0627\u06cc\u0646 \u0647\u0645\u0627\u0646 \u0627\u0633\u062a &#8211; \u0634\u0645\u0627 \u0627\u06a9\u0646\u0648\u0646 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u0639\u0646\u0627\u06cc\u06cc \u06a9\u0627\u0631 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Spring Boot \u0648 Redis \u062f\u0627\u0631\u06cc\u062f. <\/p>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0628\u0647 \u062c\u0627\u06cc \u062a\u06a9\u06cc\u0647 \u0628\u0631 \u0645\u0633\u0627\u0628\u0642\u0627\u062a \u062f\u0642\u06cc\u0642 \u06a9\u0644\u0645\u0627\u062a \u06a9\u0644\u06cc\u062f\u06cc \u060c \u0645\u0639\u0646\u0627\u06cc \u067e\u0634\u062a \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0631\u0627 \u062f\u0631\u06a9 \u0645\u06cc \u06a9\u0646\u062f. Redis \u0628\u062e\u0634 \u0633\u0646\u06af\u06cc\u0646 \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc \u06a9\u0646\u062f: \u062a\u0639\u0628\u06cc\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u060c \u062c\u0633\u062a\u062c\u0648\u06cc \u0634\u0628\u0627\u0647\u062a \u0648 \u062d\u062a\u06cc \u0641\u06cc\u0644\u062a\u0631\u0647\u0627\u06cc \u0633\u0646\u062a\u06cc &#8211; \u0647\u0645\u0647 \u0628\u0627 \u0633\u0631\u0639\u062a \u0631\u0639\u062f \u0648 \u0628\u0631\u0642.<\/p>\n<p>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0647\u0627\u0631 redis om \u060c \u0634\u0645\u0627 \u0631\u0627\u0647\u06cc \u0622\u0633\u0627\u0646 \u0628\u0631\u0627\u06cc \u0627\u062f\u063a\u0627\u0645 \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u06cc\u062f. \u0634\u0645\u0627 \u0641\u0642\u0637 \u0628\u0647 \u062f\u0648 \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f: Vectorize \u0648 Indexed \u0648 \u062f\u0648 \u0644\u0648\u0628\u06cc\u0627: EntityStream \u0648 Embedder. <\/p>\n<p>\u0627\u06cc\u0646 \u06a9\u0647 \u0622\u06cc\u0627 \u0634\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0633\u0627\u062e\u062a \u062c\u0633\u062a\u062c\u0648 \u060c \u062a\u0648\u0635\u06cc\u0647 \u0647\u0627 \u06cc\u0627 \u062f\u0633\u062a\u06cc\u0627\u0631\u0627\u0646 \u062f\u0627\u0631\u0627\u06cc \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0647\u0633\u062a\u06cc\u062f \u060c \u0627\u06cc\u0646 \u0645\u062c\u0645\u0648\u0639\u0647 \u06cc\u06a9 \u067e\u0627\u06cc\u0647 \u0645\u062d\u06a9\u0645 \u0648 \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u0628\u0647 \u0634\u0645\u0627 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0622\u0646 \u0631\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0646\u06cc\u062f \u060c \u0641\u06cc\u0644\u062a\u0631\u0647\u0627 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f \u060c \u0645\u062f\u0644 \u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 \u0631\u0627 \u06a9\u0627\u0648\u0634 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0628\u06cc\u0646\u06cc\u062f \u06a9\u0647 \u0686\u0642\u062f\u0631 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0631\u0648\u06cc\u062f!<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D9%86%D8%A7%D8%A8%D8%B9_%D9%87%D9%88%D8%B4_%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C_%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1\"><\/span>\n<p>  \u0645\u0646\u0627\u0628\u0639 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0628\u06cc\u0634\u062a\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0627\u0647 \u0628\u0631\u0627\u06cc \u0645\u0627\u0646\u062f\u0646 \u062f\u0631 \u0645\u0633\u06cc\u0631 \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u060c \u067e\u06cc\u0631\u0648\u06cc \u0627\u0632 \u062f\u0633\u062a\u0648\u0631 \u0627\u0644\u0639\u0645\u0644 \u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u0645\u062e\u0632\u0646 GitHub Redis AI Resources \u0627\u0633\u062a. \u062f\u0631 \u0622\u0646\u062c\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0647 \u0647\u0627 \u062f\u0633\u062a\u0648\u0631 \u0627\u0644\u0639\u0645\u0644 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0634\u0645\u0627 \u0631\u0627 \u0628\u0647 \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc AI \u0633\u0631\u06cc\u0639 \u060c \u0633\u0631\u06cc\u0639!<\/p>\n<p><strong>GitHub-Redis-Developer\/Redis-Ai-Resources: \u2728 \u0644\u06cc\u0633\u062a\u06cc \u0627\u0632 \u0645\u0646\u0627\u0628\u0639 \u0639\u0627\u0644\u06cc \u062c\u0627\u0645\u0639\u0647 \u060c \u0627\u062f\u063a\u0627\u0645 \u0647\u0627 \u0648 \u0646\u0645\u0648\u0646\u0647 \u0647\u0627\u06cc\u06cc \u0627\u0632 Redis \u062f\u0631 \u0627\u06a9\u0648\u0633\u06cc\u0633\u062a\u0645 AI.<\/strong><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%DA%A9%D9%86%D8%AC%DA%A9%D8%A7%D9%88_%D8%A8%D9%85%D8%A7%D9%86\"><\/span>\n<p>  \u06a9\u0646\u062c\u06a9\u0627\u0648 \u0628\u0645\u0627\u0646!<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>tl \u061b \u062f\u06a9\u062a\u0631:\u0634\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0633\u0627\u062e\u062a \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u0639\u0646\u0627\u06cc\u06cc \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0686\u06a9\u0645\u0647 \u0628\u0647\u0627\u0631\u06cc \u0648\u062a \u0645\u062c\u062f\u062f\u0627\u064b\u0628\u0634\u0631 \u0628\u0647 \u062c\u0627\u06cc \u0645\u0637\u0627\u0628\u0642\u062a \u0628\u0627 \u06a9\u0644\u0645\u0627\u062a \u062f\u0642\u06cc\u0642 \u060c \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u0639\u0646\u0627\u06cc\u06cc \u067e\u06cc\u062f\u0627 \u0645\u06cc \u06a9\u0646\u062f \u0645\u0639\u0646\u06cc \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062c\u0633\u062a\u062c\u0648\u06cc \u0634\u0628\u0627\u0647\u062a \u0628\u0631\u062f\u0627\u0631 (VSS)\u0628\u0634\u0631 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627 \u062a\u0628\u062f\u06cc\u0644 \u062e\u0644\u0627\u0635\u0647 \u062f\u0627\u0633\u062a\u0627\u0646 \u0647\u0627\u06cc \u0641\u06cc\u0644\u0645 \u0628\u0647 \u0628\u0631\u062f\u0627\u0631 \u0628\u0627 \u0645\u062f\u0644 \u0647\u0627\u06cc \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647\u060c \u0630\u062e\u06cc\u0631\u0647 \u0622\u0646\u0647\u0627 \u062f\u0631 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":106768,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-106767","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/106767","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=106767"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/106767\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/106768"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=106767"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=106767"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=106767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}