{"id":28464,"date":"2023-03-29T03:49:39","date_gmt":"2023-03-28T22:49:39","guid":{"rendered":"https:\/\/kmwllc.com\/?p=28464"},"modified":"2025-06-02T20:15:10","modified_gmt":"2025-06-02T15:15:10","slug":"building-vector-search-on-opensearch","status":"publish","type":"post","link":"https:\/\/kmwllc.com\/index.php\/2023\/03\/29\/building-vector-search-on-opensearch\/","title":{"rendered":"Building A Vector Search Application on OpenSearch"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"28464\" class=\"elementor elementor-28464\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-593706b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"593706b\" data-element_type=\"section\" data-e-type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\"><div class=\"elementor-row\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-bc55d67\" data-id=\"bc55d67\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9563203 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-post-info\" data-id=\"9563203\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"post-info.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-inline-items elementor-icon-list-items elementor-post-info\">\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-91a0f52 elementor-inline-item\" itemprop=\"datePublished\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-date\">\n\t\t\t\t\t\t\t\t\t\t<time>March 29, 2023<\/time>\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-121d3ee flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"121d3ee\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"styled-subtitle elementor-heading-title elementor-size-default\">We created a POC vector search application using OpenSearch. In this post, we discuss what we did to get it working as well as investigate how popular search features like sorting, aggregating and filtering can be utilized in vector search.<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c113cbf elementor-author-box--image-valign-top flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-author-box\" data-id=\"c113cbf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"author-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-author-box\">\n\t\t\t\t\t\t\t<div  class=\"elementor-author-box__avatar\">\n\t\t\t\t\t<img src=\"https:\/\/kmwllc.com\/wp-content\/uploads\/2023\/01\/Jake-300x300.png\" alt=\"Picture of Jake Horban\" loading=\"lazy\">\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t<div class=\"elementor-author-box__text\">\n\t\t\t\t\t\t\t\t\t<div >\n\t\t\t\t\t\t<div class=\"elementor-author-box__name\">\n\t\t\t\t\t\t\tJake Horban\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-author-box__bio\">\n\t\t\t\t\t\t<p>Search Engineer at KMW Technology<\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8baabb4 elementor-widget-divider--view-line flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-divider\" data-id=\"8baabb4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bb3fe40 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"bb3fe40\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-120ff0e flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"120ff0e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-large\">Introduction<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2d88918 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"2d88918\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Vector search has the potential to uncover the semantic meaning of a body of text and provide an ability to match documents from different domains. We thought an interesting use case for semantic understanding\/vector search would be talent acquisition \u2013 matching a job description with a candidate\u2019s resume and vice versa. To satisfy this use case, we created a reference implementation of an OpenSearch application able to retrieve documents based on k-Nearest Neighbors search between a job description embedding and resume embedding.<\/span><\/p><p><span style=\"font-weight: 400;\">Our main goal was to create a vector search application that we can use to evaluate the technology and document what\u2019s necessary to get it working.\u00a0 We wanted to uncover how vector search may or may not work with standard lexical search features like faceting, sorting and filtering.\u00a0 We were also interested in solving some of the operational challenges of working with a vector search application such as how to generate embeddings and how to fine-tune sentence embedding models. <\/span><\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aa638d6 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"aa638d6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-05a3dcf flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"05a3dcf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-large\">Ingest Architecture<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ee4d4a2 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"ee4d4a2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p>To leverage approximate kNN search in OpenSearch, sentence embeddings must be included as document fields during indexing and as a search parameter during querying. Moreover, both of these vectors must have the same dimensionality and be generated by the same fine-tuned model. T<span id=\"db6dbc30-18c5-4cdb-a0ad-9f2906e6fb31\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"db6dbc30-18c5-4cdb-a0ad-9f2906e6fb31\">hese <\/span>requirements motivated us to create a RESTful service to generate embeddings for both documents (at ingest time) and queries (at query time) using a sentence transformer model such as <a href=\"https:\/\/www.sbert.net\/\">SBERT<\/a>.<\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3685a1f flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"3685a1f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1915b86 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-image\" data-id=\"1915b86\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" width=\"1024\" height=\"358\" src=\"https:\/\/kmwllc.com\/wp-content\/uploads\/2023\/01\/image-20221219-200928-1024x358.png\" class=\"attachment-large size-large wp-image-28516\" alt=\"\" srcset=\"https:\/\/kmwllc.com\/wp-content\/uploads\/2023\/01\/image-20221219-200928-1024x358.png 1024w, https:\/\/kmwllc.com\/wp-content\/uploads\/2023\/01\/image-20221219-200928-300x105.png 300w, https:\/\/kmwllc.com\/wp-content\/uploads\/2023\/01\/image-20221219-200928-768x268.png 768w, https:\/\/kmwllc.com\/wp-content\/uploads\/2023\/01\/image-20221219-200928-1536x537.png 1536w, https:\/\/kmwllc.com\/wp-content\/uploads\/2023\/01\/image-20221219-200928.png 1571w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Architecture diagram<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ab4e06d flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"ab4e06d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-061630e flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"061630e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-medium\">1. Embedding Service<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6751da0 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"6751da0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p>The <span id=\"be8fa3b3-9554-4d0c-83bd-af62f096b6d1\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"be8fa3b3-9554-4d0c-83bd-af62f096b6d1\">embedd<\/span>ing service was created in Python using FastAPI and the <a class=\"css-tgpl01\" title=\"https:\/\/huggingface.co\/docs\/transformers\/index\" href=\"https:\/\/huggingface.co\/docs\/transformers\/index\" data-renderer-mark=\"true\">Hugging Face<\/a> transformer library. When the service starts, <span id=\"7ac1c11c-b99a-4f4e-bad6-16a1f1a68f76\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"7ac1c11c-b99a-4f4e-bad6-16a1f1a68f76\">it loads the pre-trained models like SBERT from Hugging Face<\/span> or from local files based on a configurable list. The service accepts text and returns embeddings at ingest time for the document and at query time for the query.\u00a0 A request can specify which model should be used to generate the embeddings. Otherwise, a default model is used.<span id=\"0a34dc41-0753-4bac-ba4f-5f1167215bac\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"0a34dc41-0753-4bac-ba4f-5f1167215bac\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7fe9c56 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"7fe9c56\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79b5fb9 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"79b5fb9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-medium\">2. Lucille (ETL) Stage<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-433b3bf flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"433b3bf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p>Documents are indexed into OpenSearch with <a href=\"https:\/\/bitbucket.org\/kmwllc\/lucille\/src\/master\/README.md\">Lucille<\/a>, an open-source Java framework for ETL pipelines created by KMW Technology.\u00a0 An embedding stage was added to Lucille to connect to the embedding service and retrieve the embeddings for the specified fields during indexing. This stage allows specifying multiple pairs of field mappings and will retrieve the embeddings for the source fields and add them to the respective target fields.<\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bd7aadf flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\" data-id=\"bd7aadf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language- \">\n\t\t\t\t<code readonly=\"true\" class=\"language-\">\n\t\t\t\t\t<xmp>pipelines: [\r\n  {\r\n    name: \"pipeline1\",\r\n    stages: [\r\n      {\r\n        class:\"com.kmwllc.lucille.stage.EmbedText\",\r\n        connection:\"http:\/\/127.0.0.1:8000\",\r\n        fieldMapping {\r\n          \"resume\": \"resume_embedded\",\r\n        }\r\n      }\r\n    ]\r\n  }\r\n]<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c482338 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"c482338\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2de8dd2 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"2de8dd2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-medium\">3. OpenSearch <\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-22b82ce flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"22b82ce\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p>Before indexing the documents, we need to enable the kNN index, <span id=\"db0b4e8c-432b-4b50-8e84-54374f76716b\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"db0b4e8c-432b-4b50-8e84-54374f76716b\">specify the field type <\/span>for holding the embeddings as <code class=\"code css-z5oxh7\" data-renderer-mark=\"true\">knn_vector<\/code>, and set the dimensionality to the same size as the embeddings generated by the language model used by the embedding service during ingest.<\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-09d11ee flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\" data-id=\"09d11ee\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language- \">\n\t\t\t\t<code readonly=\"true\" class=\"language-\">\n\t\t\t\t\t<xmp>{\r\n  \"settings\": {\r\n    \"index.knn\": true\r\n  },\r\n  \"mappings\": {\r\n    \"properties\": {\r\n      \"resume_embedded\": {\r\n        \"type\": \"knn_vector\",\r\n        \"dimension\": 384\r\n      }\r\n    }\r\n  }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-18e73cf flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"18e73cf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fed7d2c flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"fed7d2c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">OpenSearch also allows additional parameters such as specifying the nearest neighbors indexing algorithm preferred for the dataset and the type of computing resources available in the cluster, which you can view <\/span><a href=\"https:\/\/opensearch.org\/docs\/2.6\/search-plugins\/knn\/knn-index\/\"><span style=\"font-weight: 400;\">here<\/span><\/a><span style=\"font-weight: 400;\">. <\/span><\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-399e29d flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"399e29d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f9d3ce2 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"f9d3ce2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p>Once the documents are indexed, we will be ready to make an approximate kNN query.<\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ab2b6b7 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\" data-id=\"ab2b6b7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language- \">\n\t\t\t\t<code readonly=\"true\" class=\"language-\">\n\t\t\t\t\t<xmp>{\r\n  \"size\": 300,\r\n  \"query\": {\r\n    \"knn\": {\r\n      \"resume_embedded\": {\r\n        \"k\": 50,\r\n        \"vector\": [\r\n          -0.04631288722157478,\r\n          -0.03802000731229782,\r\n          ...\r\n        ]\r\n      }\r\n    }\r\n  }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0b570f1 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"0b570f1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c8d115e flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"c8d115e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-large\">Approximate KNN Search<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5f1c222 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"5f1c222\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">A kNN search query traditionally uses a brute-force approach to compute similarity, which produces exact results but can be slow for large, high-dimensional datasets. Approximate kNN search methods can improve efficiency by restructuring indexes and reducing dimensionality. This approach <\/span><i><span style=\"font-weight: 400;\">reduces the accuracy<\/span><\/i><span style=\"font-weight: 400;\"> of the results but increases search processing speeds significantly.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">OpenSearch offers several different search methods that support approximate kNN. If a search method is not specified at index creation, OpenSearch will use the <a href=\"https:\/\/github.com\/nmslib\/nmslib\">nmslib\u00a0<\/a> engine to create Hierarchical Navigable Small World (HNSW) graphs. HNSW graphs support more efficient approximate kNN search. For more information about the implementation of approximate kNN search in OpenSearch, refer to their <\/span><a href=\"https:\/\/opensearch.org\/docs\/2.6\/search-plugins\/knn\/approximate-knn\/\"><span style=\"font-weight: 400;\">documentation.<\/span><\/a><\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2c0366f flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"2c0366f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-28dd4e5 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"28dd4e5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-large\">Traditional Search Feature Support<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0b8490e flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"0b8490e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Computing facets\/aggregations, sorting, and filtering are some of the most common search features used in lexical search. As part of our POC, we wanted to investigate how these features worked in conjunction with kNN queries.<\/span><\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9ae1ed4 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"9ae1ed4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-09d0a5b flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"09d0a5b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-medium\">Aggregations<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7733a25 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"7733a25\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">As is typical in lexical search, the aggregation will be computed for the documents in the approximate kNN query result set. Here is an example query:<\/span><\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9a25ce8 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\" data-id=\"9a25ce8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language- \">\n\t\t\t\t<code readonly=\"true\" class=\"language-\">\n\t\t\t\t\t<xmp>{\r\n  \"size\":10,\r\n  \"aggregations\": {\r\n    \"category\": {\r\n      \"terms\": {\r\n        \"field\": \"category.keyword\"\r\n      }\r\n    }\r\n  },\r\n  \"query\": {\r\n    \"knn\": {\r\n      \"resume_embedded\": {\r\n        \"k\": 10\r\n        \"vector\": [\r\n             0.02731507644057274,\r\n             0.010414771735668182,\r\n            ...\r\n            ],\r\n               \r\n            }\r\n        }\r\n    }\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a1020f0 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"a1020f0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f035d5b flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"f035d5b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-medium\">Sorting<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-883d96c flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"883d96c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">kNN query results can also be sorted according to a keyword field:<\/span><\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1283c8a flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\" data-id=\"1283c8a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language- \">\n\t\t\t\t<code readonly=\"true\" class=\"language-\">\n\t\t\t\t\t<xmp>{\r\n  \"size\":10,\r\n  \"sort\": [\r\n    {\r\n     \"category.keyword\": {\r\n      \"order\": \"asc\"\r\n      }\r\n    }\r\n  ],\r\n  \"query\": {\r\n    \"knn\": {\r\n      \"resume_embedded\": {\r\n        \"k\": 10\r\n        \"vector\": [\r\n             0.02731507644057274,\r\n             0.010414771735668182,\r\n            ...\r\n            ],\r\n            }\r\n        }\r\n    }\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ca1cb8b flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"ca1cb8b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-02fbd3b flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"02fbd3b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-medium\">Filters<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-27ee9ff flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"27ee9ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">The typical filter behavior for lexical queries is to apply a filter before the query is executed, thereby narrowing the scope of documents that need to be searched. This is the default behavior for most search engines and generally known as a \u2018pre-filter.\u2019 For an OpenSearch approximate KNN query, pre-filter queries are only supported if the kNN index is constructed using the Lucene engine to build HNSW graphs.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">As we previously mentioned, the default engine used to construct HNSW graphs in OpenSearch is nmslib, which only supports post-filtering of results using the <code>post_filter<\/code> parameter. This default behavior is important to keep in mind when setting up a vector index in OpenSearch, as post-filtering can impact what results are actually returned for a filter query.\u00a0\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">When a post-filter query is executed, the kNN query will be computed first. Then the filter will be applied, potentially reducing the number of returned documents. It is essential to keep this order in mind when selecting parameters for the query. For example, we can increase the <\/span><span style=\"font-weight: 400;\">size<\/span><span style=\"font-weight: 400;\"> and <\/span><span style=\"font-weight: 400;\">k<\/span><span style=\"font-weight: 400;\"> parameters to ensure that the query returns a sufficiently broad set of results (i.e., to ensure that recall is high enough) before the filter is applied. In most cases, increasing <\/span><span style=\"font-weight: 400;\">k<\/span><span style=\"font-weight: 400;\"> will improve the accuracy of the approximate k-NN search but will also increase the computation time.<\/span><\/p><p>Example kNN query using the <code>post_filter<\/code> parameter:<\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2567208 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\" data-id=\"2567208\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language- \">\n\t\t\t\t<code readonly=\"true\" class=\"language-\">\n\t\t\t\t\t<xmp>{\r\n  \"size\": 300,\r\n  \"post_filter\": {\r\n    \"match\": {\r\n      \"location\": \"New York\"\r\n    }\r\n  },\r\n  \"query\": {\r\n    \"knn\": {\r\n      \"resume_embedded\": {\r\n        \"k\": 5,\r\n        \"vector\": [\r\n          -0.07738623768091202,\r\n          -0.06183512881398201,\r\n          ...\r\n        ]\r\n      }\r\n    }\r\n  }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-45645f8 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"45645f8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f477483 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"f477483\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p data-renderer-start-pos=\"7261\"><span style=\"font-weight: 400;\">If you would like to know more about\u00a0 different kinds of filter queries, their use cases, and their performance in combination with kNN, take a look at this <\/span><a href=\"https:\/\/opensearch.org\/docs\/2.6\/search-plugins\/knn\/filter-search-knn\/\"><span style=\"font-weight: 400;\">documentation<\/span><\/a><span style=\"font-weight: 400;\"> from OpenSearch.<\/span> One of the examples included is a Boolean filter query that allows filtering documents based on <code class=\"code css-z5oxh7\" data-renderer-mark=\"true\">must<\/code>,\u00a0\u00a0<code class=\"code css-z5oxh7\" data-renderer-mark=\"true\">must_not<\/code>, and <code class=\"code css-z5oxh7\" data-renderer-mark=\"true\">should<\/code> parameters. This type of query can <span id=\"42085614-71b6-45c5-81cb-40b20b28d6d4\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"42085614-71b6-45c5-81cb-40b20b28d6d4\"><span id=\"cb0e3e23-4b08-4a05-bc15-95bb8873b3cd\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"cb0e3e23-4b08-4a05-bc15-95bb8873b3cd\">be used to combine lexical and vector search.<\/span><\/span><\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7980dec flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\" data-id=\"7980dec\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language- \">\n\t\t\t\t<code readonly=\"true\" class=\"language-\">\n\t\t\t\t\t<xmp>{\r\n  \"size\": 3,\r\n  \"query\": {\r\n    \"bool\": {\r\n      \"filter\": {\r\n        \"bool\": {\r\n          \"must\": [\r\n            {\r\n              \"match\": {\r\n                \"location\": \"New York\"\r\n              }\r\n            }\r\n          ]\r\n        }\r\n      },\r\n      \"must\": [\r\n        {\r\n          \"knn\": {\r\n            \"resume_embedded\": {\r\n              \"k\": 20,\r\n              \"vector\": [\r\n                -0.07738623768091202,\r\n                -0.06183512881398201,\r\n                ...\r\n              ]\r\n            }\r\n          }\r\n        }\r\n      ]\r\n    }\r\n  }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ca7fac6 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"ca7fac6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e551fc0 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"e551fc0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Our examples here are based on using the <\/span><i><span style=\"font-weight: 400;\">approximate nearest neighbor <\/span><\/i><span style=\"font-weight: 400;\">approach\u00a0 because it scales well for larger datasets. The<\/span> <i><span style=\"font-weight: 400;\"><a href=\"https:\/\/opensearch.org\/docs\/2.6\/search-plugins\/knn\/painless-functions\/\">painless scripting<\/a> <\/span><\/i><span style=\"font-weight: 400;\">approach is preferred if you need to use a distance function as part of your scoring method. On small datasets, the performance impact of brute force kNN may not be as consequential and can potentially provide more accurate results. In this case, one can use the custom<\/span> <a href=\"https:\/\/opensearch.org\/docs\/2.6\/search-plugins\/knn\/knn-score-script\/\"><i><span style=\"font-weight: 400;\">script scoring<\/span><\/i><\/a><span style=\"font-weight: 400;\"> approach with a pre-filter and brute force kNN instead of approximate kNN and post-filter.<\/span><\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aa880cb flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"aa880cb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d105840 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"d105840\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-large\">Model Selection and Fine-Tuning<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-afdaf41 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"afdaf41\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p data-renderer-start-pos=\"8672\">Since our queries and the corpus are about the same length, we decided to use a <em data-renderer-mark=\"true\"><span id=\"7b4ed8fc-ebc6-4137-8c17-14b67418925c\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"7b4ed8fc-ebc6-4137-8c17-14b67418925c\">symmetric semantic search<\/span><\/em><span id=\"7b4ed8fc-ebc6-4137-8c17-14b67418925c\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"7b4ed8fc-ebc6-4137-8c17-14b67418925c\"> <\/span>to have the ability to do two-way matching between resumes and job descriptions. The pre-trained model dimensionality and statistics can be found <a href=\"https:\/\/www.sbert.net\/docs\/pretrained_models.html\">here<\/a>.\u00a0 W<span id=\"cfc6e278-eefb-4c9b-883f-fcf147aabcbb\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"cfc6e278-eefb-4c9b-883f-fcf147aabcbb\">e started our <\/span>experiments with <code class=\"code css-z5oxh7\" data-renderer-mark=\"true\">all-MiniLM-L6-v2<\/code> and <code class=\"code css-z5oxh7\" data-renderer-mark=\"true\">all-MiniLM-L12-v2<\/code> models with dimensions <code class=\"code css-z5oxh7\" data-renderer-mark=\"true\">384<\/code>.<\/p><p data-renderer-start-pos=\"9032\">To evaluate the models, we created a small dataset with job descriptions, resumes, and <span id=\"2d4a2bad-c28c-4f00-8881-fd3d0078e4ef\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"2d4a2bad-c28c-4f00-8881-fd3d0078e4ef\">the expected <\/span>cosine similarity (.9 for good pairs and .1 for poor pairs). We then generated the embeddings and ran brute force kNN, recording the number of documents that appear in the result set with the expected rank. The results were evaluated with <code class=\"code css-z5oxh7\" data-renderer-mark=\"true\">top_1<\/code> and <code class=\"code css-z5oxh7\" data-renderer-mark=\"true\">top_k<\/code> accuracy<span id=\"ac730cca-7231-4b68-8f9b-c40b1723e7b4\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"ac730cca-7231-4b68-8f9b-c40b1723e7b4\"> <\/span><code class=\"code css-z5oxh7\" data-renderer-mark=\"true\"><span id=\"ac730cca-7231-4b68-8f9b-c40b1723e7b4\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"ac730cca-7231-4b68-8f9b-c40b1723e7b4\">\u2208[0, 1]<\/span><\/code>. In the future, we would like to extend our evaluation utility to use the normalized discounted cumulative gain (NDCG) method.<\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-773fcef flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-image\" data-id=\"773fcef\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img width=\"1024\" height=\"202\" src=\"https:\/\/kmwllc.com\/wp-content\/uploads\/2023\/01\/finetune-1024x202.png\" class=\"attachment-large size-large wp-image-28517\" alt=\"\" srcset=\"https:\/\/kmwllc.com\/wp-content\/uploads\/2023\/01\/finetune-1024x202.png 1024w, https:\/\/kmwllc.com\/wp-content\/uploads\/2023\/01\/finetune-300x59.png 300w, https:\/\/kmwllc.com\/wp-content\/uploads\/2023\/01\/finetune-768x152.png 768w, https:\/\/kmwllc.com\/wp-content\/uploads\/2023\/01\/finetune-1536x303.png 1536w, https:\/\/kmwllc.com\/wp-content\/uploads\/2023\/01\/finetune.png 1682w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7e2ca06 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"7e2ca06\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6071032 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"6071032\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p data-renderer-start-pos=\"9535\">To<span id=\"257698f3-5e4f-462a-a946-977895a3c205\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"257698f3-5e4f-462a-a946-977895a3c205\"> fine-tune<\/span> our models, we followed the example from the <a href=\"https:\/\/www.sbert.net\/docs\/training\/overview.html\">SBERT documentation<\/a>. \u00a0The models were trained by creating (job_description, resume, score) tuples and using cosine similarity loss for <code class=\"code css-z5oxh7\" data-renderer-mark=\"true\">n<\/code> number of epochs. From our experiments, the training data&#8217;s size and quality are essential for successful <span id=\"43c2f4a0-f133-47df-adc8-35d914e9e49a\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"43c2f4a0-f133-47df-adc8-35d914e9e49a\">tuning<\/span>, and a large <span id=\"48eade7c-958d-46f0-95db-9e54cb271a99\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"48eade7c-958d-46f0-95db-9e54cb271a99\">number of training epochs <\/span>is required for the model to return <code class=\"code css-z5oxh7\" data-renderer-mark=\"true\">top_k<\/code> correct results. The table above demonstrates the improvement of the evaluation scores for models trained for 50 and <span id=\"b2dc7773-60c4-4bef-b61c-cc71f1d92c77\" data-renderer-mark=\"true\" data-mark-type=\"annotation\" data-mark-annotation-type=\"inlineComment\" data-id=\"b2dc7773-60c4-4bef-b61c-cc71f1d92c77\">100 epochs.<\/span><\/p><p data-renderer-start-pos=\"10055\">Below is the documentation for the fine-tuning utility.<\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c6f4fb0 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\" data-id=\"c6f4fb0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language- \">\n\t\t\t\t<code readonly=\"true\" class=\"language-\">\n\t\t\t\t\t<xmp>usage: tune.py [-h] -f FILE -o OUTPUT [-m MODEL] [-e EPOCHS] [-d DEVICE]\r\n\r\nSentenceTransformer tuning utility\r\n\r\noptional arguments:\r\n  -h, --help            show this help message and exit\r\n  -f FILE, --file FILE  path to csv file with training data\r\n  -o OUTPUT, --output OUTPUT\r\n                        output directory for the trained model\r\n  -m MODEL, --model MODEL\r\n                        base model name or path\r\n  -e EPOCHS, --epochs EPOCHS\r\n                        number of epochs\r\n  -d DEVICE, --device DEVICE\r\n                        device to use (\"cuda\" \/ \"cpu\"). If None, checks if a\r\n                        GPU can be used.<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-83e3828 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"83e3828\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4107101 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"4107101\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-large\">Future Work<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ab611e1 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"ab611e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">The next step is to evaluate the impact to relevancy of using vector search The Home Depot dataset from <\/span><a href=\"https:\/\/www.kaggle.com\/competitions\/home-depot-product-search-relevance\"><span style=\"font-weight: 400;\">Kaggle<\/span><\/a><span style=\"font-weight: 400;\"> is a good candidate for test data because it includes many query\/result document pairs that are labeled (numerically ranked as relevant or irrelevant). By training and evaluating our application on this data set, we can further investigate whether pure vector search provides an improvement compared to lexical search.<\/span><\/p><p><span style=\"font-weight: 400;\">We will also explore utilizing <\/span><a href=\"https:\/\/quepid.com\/\"><span style=\"font-weight: 400;\">Quepid<\/span><\/a><span style=\"font-weight: 400;\"> to visualize queries, search results, and their scores for a vector search application. Finally, we would like to create a user interface that provides traditional search options like filtering &amp; aggregations; simplifies the queries\u2019 embedding generation; and displays the results in a readable format.<\/span><\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c438f51 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"c438f51\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-07e9b39 elementor-hidden-tablet elementor-hidden-mobile\" data-id=\"07e9b39\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-127fbac\" data-id=\"127fbac\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-66cf9a7 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"66cf9a7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"title-h6 elementor-heading-title elementor-size-small\">Share Post<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-da075ed flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-thegem-social-sharing\" data-id=\"da075ed\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"thegem-social-sharing.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n        <div id=\"thegem-custom-69f509dada2703969\" class=\"thegem-te-socials-sharing socials-sharing--left socials-sharing--simple socials-sharing--tiny\">\n            <div class=\"socials-sharing\">\n                <ul>\n\t\t\t\t\t                        <li><a class=\"socials-item facebook\" target=\"_blank\" href=\"https:\/\/www.facebook.com\/sharer\/sharer.php?u=https%3A%2F%2Fkmwllc.com%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F28464\" title=\"Facebook\"><i class=\"socials-item-icon facebook\"><\/i><\/a><\/li>\n\t\t\t\t\t\n\t\t\t\t\t                        <li><a class=\"socials-item twitter\" target=\"_blank\" href=\"https:\/\/twitter.com\/intent\/tweet?text=&#038;url=https%3A%2F%2Fkmwllc.com%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F28464\" title=\"Twitter\"><i class=\"socials-item-icon twitter\"><\/i><\/a><\/li>\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t                        <li><a class=\"socials-item linkedin\" target=\"_blank\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fkmwllc.com%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F28464&#038;title=&amp;summary=\" title=\"LinkedIn\"><i class=\"socials-item-icon linkedin\"><\/i><\/a><\/li>\n\t\t\t\t\t\n\t\t\t\t\t                        <li><a class=\"socials-item reddit\" target=\"_blank\" href=\"https:\/\/www.reddit.com\/submit?url=https%3A%2F%2Fkmwllc.com%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F28464&#038;title=\" title=\"Reddit\"><i class=\"socials-item-icon reddit\"><\/i><\/a><\/li>\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t                        <li><a class=\"socials-item threads\" target=\"_blank\" href=\"https:\/\/www.threads.net\/intent\/post?text=https%3A%2F%2Fkmwllc.com%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F28464\" title=\"Threads\"><i class=\"socials-item-icon threads\"><\/i><\/a><\/li>\n\t\t\t\t\t                <\/ul>\n            <\/div>\n        <\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7540914 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"7540914\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fe2ab3d flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"fe2ab3d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"title-h6 elementor-heading-title elementor-size-small\">More From the KMW Blog<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0746449 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-thegem-bloglist\" data-id=\"0746449\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;thegem_elementor_preset&quot;:&quot;compact-tiny-2&quot;,&quot;source&quot;:[&quot;posts&quot;],&quot;query_type&quot;:&quot;post&quot;,&quot;exclude_blog_posts_type&quot;:&quot;manual&quot;,&quot;order_by&quot;:&quot;default&quot;,&quot;order&quot;:&quot;default&quot;,&quot;items_per_page&quot;:8}\" data-widget_type=\"thegem-bloglist.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"bloglist blog clearfix  blog-style-compact-tiny-2   \" data-page=\"1\" data-paged=\"1\" data-next-page=\"2\" data-pages-count=\"3\" data-load-more-action=\"thegem_bloglist_load_more\">\n\t\t\t\r\n<article id=\"post-30279\" class=\"post-item clearfix post-30279 post type-post status-publish format-standard has-post-thumbnail category-elasticsearch category-lucene category-performance\">\r\n\t\t\t<div class=\"gem-compact-tiny-left\">\r\n\t\t\t<div class=\"gem-news-item-image\">\r\n\t\t\t\t<a href=\"https:\/\/kmwllc.com\/index.php\/2026\/01\/10\/the-mystery-of-elasticsearch-8-17-query-performance-degradation\/\"><img width=\"144\" height=\"144\" src=\"https:\/\/kmwllc.com\/wp-content\/uploads\/2026\/01\/blog_elasticperftest_900x1200-thegem-news-carousel.png\" class=\"img-responsive wp-post-image\" alt=\"blog_elasticperftest_900x1200\" \/><\/a>\r\n\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\r\n\t<div class=\"gem-compact-tiny-right\">\r\n\t\t<div class=\"gem-compact-item-content\">\r\n\t\t\t<div class=\"tiny-post-title gem-news-item-title text-body-tiny\"><a class=\"reverse-link-color \" href=\"https:\/\/kmwllc.com\/index.php\/2026\/01\/10\/the-mystery-of-elasticsearch-8-17-query-performance-degradation\/\" rel=\"bookmark\">The Mystery of Elasticsearch 8.17 Query Performance Degradation<\/a><\/div>\t\t<\/div>\r\n\t\t<div class=\"post-meta\">\r\n\t\t\t<div class=\"entry-meta clearfix text-body-tiny\">\r\n\t\t\t\t<div class=\"post-meta-left gem-news-item-date\">\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-author tiny-post-author\">By Henry Caldwell<\/span><br>\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-date tiny-post-date\">January 10, 2026<\/span>\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"post-meta-right\">\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t<\/div><!-- .entry-meta -->\r\n\t\t<\/div>\r\n\r\n\t<\/div>\r\n<\/article><!-- #post-30279 -->\r\n\r\n<article id=\"post-30125\" class=\"post-item clearfix post-30125 post type-post status-publish format-standard has-post-thumbnail category-ai category-performance category-relevancy category-search category-uncategorized\">\r\n\t\t\t<div class=\"gem-compact-tiny-left\">\r\n\t\t\t<div class=\"gem-news-item-image\">\r\n\t\t\t\t<a href=\"https:\/\/kmwllc.com\/index.php\/2025\/10\/04\/whats-the-best-way-to-do-entity-extraction-for-search\/\"><img loading=\"lazy\" width=\"144\" height=\"144\" src=\"https:\/\/kmwllc.com\/wp-content\/uploads\/2025\/10\/blogpost_entityex-thegem-news-carousel.png\" class=\"img-responsive wp-post-image\" alt=\"blogpost_entityex\" \/><\/a>\r\n\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\r\n\t<div class=\"gem-compact-tiny-right\">\r\n\t\t<div class=\"gem-compact-item-content\">\r\n\t\t\t<div class=\"tiny-post-title gem-news-item-title text-body-tiny\"><a class=\"reverse-link-color \" href=\"https:\/\/kmwllc.com\/index.php\/2025\/10\/04\/whats-the-best-way-to-do-entity-extraction-for-search\/\" rel=\"bookmark\">What&#8217;s the best way to do entity extraction for search?<\/a><\/div>\t\t<\/div>\r\n\t\t<div class=\"post-meta\">\r\n\t\t\t<div class=\"entry-meta clearfix text-body-tiny\">\r\n\t\t\t\t<div class=\"post-meta-left gem-news-item-date\">\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-author tiny-post-author\">By Jacob Squatrito<\/span><br>\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-date tiny-post-date\">October 4, 2025<\/span>\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"post-meta-right\">\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t<\/div><!-- .entry-meta -->\r\n\t\t<\/div>\r\n\r\n\t<\/div>\r\n<\/article><!-- #post-30125 -->\r\n\r\n<article id=\"post-30155\" class=\"post-item clearfix post-30155 post type-post status-publish format-standard has-post-thumbnail category-ai\">\r\n\t\t\t<div class=\"gem-compact-tiny-left\">\r\n\t\t\t<div class=\"gem-news-item-image\">\r\n\t\t\t\t<a href=\"https:\/\/kmwllc.com\/index.php\/2025\/05\/20\/mcp-in-llm-apps-overkill-or-integral\/\"><img loading=\"lazy\" width=\"144\" height=\"144\" src=\"https:\/\/kmwllc.com\/wp-content\/uploads\/2025\/05\/blog_mcp_1200x900_min-thegem-news-carousel.png\" class=\"img-responsive wp-post-image\" alt=\"blog_mcp_1200x900_min\" \/><\/a>\r\n\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\r\n\t<div class=\"gem-compact-tiny-right\">\r\n\t\t<div class=\"gem-compact-item-content\">\r\n\t\t\t<div class=\"tiny-post-title gem-news-item-title text-body-tiny\"><a class=\"reverse-link-color \" href=\"https:\/\/kmwllc.com\/index.php\/2025\/05\/20\/mcp-in-llm-apps-overkill-or-integral\/\" rel=\"bookmark\">MCP in LLM Apps: Overkill or Integral?<\/a><\/div>\t\t<\/div>\r\n\t\t<div class=\"post-meta\">\r\n\t\t\t<div class=\"entry-meta clearfix text-body-tiny\">\r\n\t\t\t\t<div class=\"post-meta-left gem-news-item-date\">\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-author tiny-post-author\">By Kevin Butler<\/span><br>\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-date tiny-post-date\">May 20, 2025<\/span>\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"post-meta-right\">\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t<\/div><!-- .entry-meta -->\r\n\t\t<\/div>\r\n\r\n\t<\/div>\r\n<\/article><!-- #post-30155 -->\r\n\r\n<article id=\"post-29895\" class=\"post-item clearfix post-29895 post type-post status-publish format-standard has-post-thumbnail category-ai category-opensearch category-relevancy category-search category-solr category-vector-search\">\r\n\t\t\t<div class=\"gem-compact-tiny-left\">\r\n\t\t\t<div class=\"gem-news-item-image\">\r\n\t\t\t\t<a href=\"https:\/\/kmwllc.com\/index.php\/2024\/06\/23\/rag-question-answering-system-for-solr-and-opensearch\/\"><img loading=\"lazy\" width=\"144\" height=\"144\" src=\"https:\/\/kmwllc.com\/wp-content\/uploads\/2024\/06\/blog_rag-thegem-news-carousel.png\" class=\"img-responsive wp-post-image\" alt=\"blog_rag\" \/><\/a>\r\n\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\r\n\t<div class=\"gem-compact-tiny-right\">\r\n\t\t<div class=\"gem-compact-item-content\">\r\n\t\t\t<div class=\"tiny-post-title gem-news-item-title text-body-tiny\"><a class=\"reverse-link-color \" href=\"https:\/\/kmwllc.com\/index.php\/2024\/06\/23\/rag-question-answering-system-for-solr-and-opensearch\/\" rel=\"bookmark\">RAG Question Answering System for Solr and OpenSearch\u00a0<\/a><\/div>\t\t<\/div>\r\n\t\t<div class=\"post-meta\">\r\n\t\t\t<div class=\"entry-meta clearfix text-body-tiny\">\r\n\t\t\t\t<div class=\"post-meta-left gem-news-item-date\">\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-author tiny-post-author\">By Akul Sethi<\/span><br>\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-date tiny-post-date\">June 23, 2024<\/span>\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"post-meta-right\">\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t<\/div><!-- .entry-meta -->\r\n\t\t<\/div>\r\n\r\n\t<\/div>\r\n<\/article><!-- #post-29895 -->\r\n\r\n<article id=\"post-29639\" class=\"post-item clearfix post-29639 post type-post status-publish format-standard has-post-thumbnail category-lucene category-opensearch category-performance category-search\">\r\n\t\t\t<div class=\"gem-compact-tiny-left\">\r\n\t\t\t<div class=\"gem-news-item-image\">\r\n\t\t\t\t<a href=\"https:\/\/kmwllc.com\/index.php\/2024\/05\/30\/duplicate-terms-aggregation-plug-in-for-opensearch\/\"><img loading=\"lazy\" width=\"144\" height=\"144\" src=\"https:\/\/kmwllc.com\/wp-content\/uploads\/2024\/05\/blog_opensearch-agg1200x900-min-thegem-news-carousel.png\" class=\"img-responsive wp-post-image\" alt=\"blog_opensearch-agg1200x900-min\" \/><\/a>\r\n\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\r\n\t<div class=\"gem-compact-tiny-right\">\r\n\t\t<div class=\"gem-compact-item-content\">\r\n\t\t\t<div class=\"tiny-post-title gem-news-item-title text-body-tiny\"><a class=\"reverse-link-color \" href=\"https:\/\/kmwllc.com\/index.php\/2024\/05\/30\/duplicate-terms-aggregation-plug-in-for-opensearch\/\" rel=\"bookmark\">Duplicate Terms Aggregation Plug-in for OpenSearch<\/a><\/div>\t\t<\/div>\r\n\t\t<div class=\"post-meta\">\r\n\t\t\t<div class=\"entry-meta clearfix text-body-tiny\">\r\n\t\t\t\t<div class=\"post-meta-left gem-news-item-date\">\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-author tiny-post-author\">By Abijit Rangesh<\/span><br>\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-date tiny-post-date\">May 30, 2024<\/span>\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"post-meta-right\">\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t<\/div><!-- .entry-meta -->\r\n\t\t<\/div>\r\n\r\n\t<\/div>\r\n<\/article><!-- #post-29639 -->\r\n\r\n<article id=\"post-28464\" class=\"post-item clearfix post-28464 post type-post status-publish format-standard has-post-thumbnail category-ai category-opensearch category-search category-vector-search\">\r\n\t\t\t<div class=\"gem-compact-tiny-left\">\r\n\t\t\t<div class=\"gem-news-item-image\">\r\n\t\t\t\t<a href=\"https:\/\/kmwllc.com\/index.php\/2023\/03\/29\/building-vector-search-on-opensearch\/\"><img loading=\"lazy\" width=\"144\" height=\"144\" src=\"https:\/\/kmwllc.com\/wp-content\/uploads\/2024\/05\/blog_vectorSearch_1200x900-min-thegem-news-carousel.png\" class=\"img-responsive wp-post-image\" alt=\"blog_vectorSearch_1200x900-min\" \/><\/a>\r\n\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\r\n\t<div class=\"gem-compact-tiny-right\">\r\n\t\t<div class=\"gem-compact-item-content\">\r\n\t\t\t<div class=\"tiny-post-title gem-news-item-title text-body-tiny\"><a class=\"reverse-link-color \" href=\"https:\/\/kmwllc.com\/index.php\/2023\/03\/29\/building-vector-search-on-opensearch\/\" rel=\"bookmark\">Building A Vector Search Application on OpenSearch<\/a><\/div>\t\t<\/div>\r\n\t\t<div class=\"post-meta\">\r\n\t\t\t<div class=\"entry-meta clearfix text-body-tiny\">\r\n\t\t\t\t<div class=\"post-meta-left gem-news-item-date\">\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-author tiny-post-author\">By Jake Horban<\/span><br>\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-date tiny-post-date\">March 29, 2023<\/span>\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"post-meta-right\">\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t<\/div><!-- .entry-meta -->\r\n\t\t<\/div>\r\n\r\n\t<\/div>\r\n<\/article><!-- #post-28464 -->\r\n\r\n<article id=\"post-28075\" class=\"post-item clearfix post-28075 post type-post status-publish format-standard has-post-thumbnail category-elasticsearch category-search category-solr\">\r\n\t\t\t<div class=\"gem-compact-tiny-left\">\r\n\t\t\t<div class=\"gem-news-item-image\">\r\n\t\t\t\t<a href=\"https:\/\/kmwllc.com\/index.php\/2022\/12\/17\/ingesting-solr-logs-with-the-elk-stack\/\"><img loading=\"lazy\" width=\"144\" height=\"144\" src=\"https:\/\/kmwllc.com\/wp-content\/uploads\/2022\/12\/blog_LogAnalysisElk_min-thegem-news-carousel.png\" class=\"img-responsive wp-post-image\" alt=\"blog_LogAnalysisElk_min\" \/><\/a>\r\n\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\r\n\t<div class=\"gem-compact-tiny-right\">\r\n\t\t<div class=\"gem-compact-item-content\">\r\n\t\t\t<div class=\"tiny-post-title gem-news-item-title text-body-tiny\"><a class=\"reverse-link-color \" href=\"https:\/\/kmwllc.com\/index.php\/2022\/12\/17\/ingesting-solr-logs-with-the-elk-stack\/\" rel=\"bookmark\">Ingesting Solr Logs with the ELK Stack<\/a><\/div>\t\t<\/div>\r\n\t\t<div class=\"post-meta\">\r\n\t\t\t<div class=\"entry-meta clearfix text-body-tiny\">\r\n\t\t\t\t<div class=\"post-meta-left gem-news-item-date\">\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-author tiny-post-author\">By Kira Traynor<\/span><br>\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-date tiny-post-date\">December 17, 2022<\/span>\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"post-meta-right\">\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t<\/div><!-- .entry-meta -->\r\n\t\t<\/div>\r\n\r\n\t<\/div>\r\n<\/article><!-- #post-28075 -->\r\n\r\n<article id=\"post-27467\" class=\"post-item clearfix post-27467 post type-post status-publish format-standard has-post-thumbnail category-search category-solr\">\r\n\t\t\t<div class=\"gem-compact-tiny-left\">\r\n\t\t\t<div class=\"gem-news-item-image\">\r\n\t\t\t\t<a href=\"https:\/\/kmwllc.com\/index.php\/2022\/11\/17\/solrs-query-elevation-component-now-supports-filter-exclusions\/\"><img loading=\"lazy\" width=\"144\" height=\"144\" src=\"https:\/\/kmwllc.com\/wp-content\/uploads\/2022\/11\/blog_QEC1200x900-thegem-news-carousel.png\" class=\"img-responsive wp-post-image\" alt=\"blog_QEC1200x900\" \/><\/a>\r\n\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\r\n\t<div class=\"gem-compact-tiny-right\">\r\n\t\t<div class=\"gem-compact-item-content\">\r\n\t\t\t<div class=\"tiny-post-title gem-news-item-title text-body-tiny\"><a class=\"reverse-link-color \" href=\"https:\/\/kmwllc.com\/index.php\/2022\/11\/17\/solrs-query-elevation-component-now-supports-filter-exclusions\/\" rel=\"bookmark\">Solr&#8217;s query elevation component now supports filter exclusions<\/a><\/div>\t\t<\/div>\r\n\t\t<div class=\"post-meta\">\r\n\t\t\t<div class=\"entry-meta clearfix text-body-tiny\">\r\n\t\t\t\t<div class=\"post-meta-left gem-news-item-date\">\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-author tiny-post-author\">By Rudi Seitz<\/span><br>\t\t\t\t\t<span\r\n\t\t\t\t\t\t\tclass=\"post-meta-date tiny-post-date\">November 17, 2022<\/span>\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"post-meta-right\">\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t<\/div><!-- .entry-meta -->\r\n\t\t<\/div>\r\n\r\n\t<\/div>\r\n<\/article><!-- #post-27467 -->\r\n\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div><\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-bb4f855 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"bb4f855\" data-element_type=\"section\" data-e-type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\"><div class=\"elementor-row\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c70a9ce\" data-id=\"c70a9ce\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7447ea9 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"7447ea9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-50d9341 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-post-navigation\" data-id=\"50d9341\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"post-navigation.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-post-navigation\" role=\"navigation\" aria-label=\"Post Navigation\">\n\t\t\t<div class=\"elementor-post-navigation__prev elementor-post-navigation__link\">\n\t\t\t\t<a href=\"https:\/\/kmwllc.com\/index.php\/2022\/09\/30\/the-kmw-search-audit\/\" rel=\"prev\"><span class=\"elementor-post-navigation__link__prev\"><span class=\"post-navigation__prev--label\">Previous Post<\/span><span class=\"post-navigation__prev--title\">The KMW Search Audit<\/span><\/span><\/a>\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-post-navigation__next elementor-post-navigation__link\">\n\t\t\t\t<a href=\"https:\/\/kmwllc.com\/index.php\/2022\/12\/17\/ingesting-solr-logs-with-the-elk-stack\/\" rel=\"next\"><span class=\"elementor-post-navigation__link__next\"><span class=\"post-navigation__next--label\">Next Post<\/span><span class=\"post-navigation__next--title\">Ingesting Solr Logs with the ELK Stack<\/span><\/span><\/a>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div><\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>We created a POC vector search application using OpenSearch. In this post, we discuss what we did to get it working as well as investigate how popular search features like sorting, aggregating and filtering can be utilized in vector search.<\/p>\n","protected":false},"author":10,"featured_media":29678,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[35,43,36,48],"tags":[],"class_list":{"0":"post-28464","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-ai","8":"category-opensearch","9":"category-search","10":"category-vector-search"},"aioseo_notices":[],"post_meta_fields":{"_wp_page_template":["default"],"_edit_lock":["1748877324:7"],"_last_editor_used_jetpack":["block-editor"],"_edit_last":["7"],"_customize_sidebars":["yes"],"thegem_post_general_item_data":["a:26:{s:20:\"post_layout_settings\";s:6:\"custom\";s:18:\"post_layout_source\";s:7:\"default\";s:21:\"post_builder_template\";s:1:\"0\";s:26:\"show_featured_posts_slider\";i:0;s:21:\"show_featured_content\";s:7:\"default\";s:10:\"video_type\";s:7:\"youtube\";s:5:\"video\";s:0:\"\";s:18:\"video_aspect_ratio\";s:0:\"\";s:20:\"video_play_on_mobile\";s:0:\"\";s:13:\"video_overlay\";s:0:\"\";s:12:\"video_poster\";s:0:\"\";s:11:\"video_start\";s:16:\"open_in_lightbox\";s:10:\"quote_text\";s:0:\"\";s:12:\"quote_author\";s:0:\"\";s:16:\"quote_background\";s:0:\"\";s:18:\"quote_author_color\";s:0:\"\";s:5:\"audio\";s:0:\"\";s:7:\"gallery\";i:0;s:18:\"gallery_autoscroll\";i:0;s:9:\"highlight\";i:0;s:14:\"highlight_type\";s:7:\"squared\";s:15:\"highlight_style\";s:7:\"default\";s:31:\"highlight_title_left_background\";s:9:\"#00BCD4FF\";s:26:\"highlight_title_left_color\";s:9:\"#FFFFFFFF\";s:32:\"highlight_title_right_background\";s:9:\"#00BCD4FF\";s:27:\"highlight_title_right_color\";s:9:\"#FFFFFFFF\";}"],"thegem_show_featured_posts_slider":["0"],"thegem_post_page_elements_data":["a:12:{s:13:\"post_elements\";s:6:\"custom\";s:11:\"show_author\";i:0;s:16:\"blog_hide_author\";i:1;s:14:\"blog_hide_date\";i:1;s:26:\"blog_hide_date_in_blog_cat\";i:1;s:20:\"blog_hide_categories\";i:1;s:14:\"blog_hide_tags\";i:1;s:18:\"blog_hide_comments\";i:1;s:15:\"blog_hide_likes\";i:1;s:20:\"blog_hide_navigation\";i:1;s:17:\"blog_hide_socials\";i:1;s:17:\"blog_hide_realted\";i:0;}"],"thegem_popups_data":["a:2:{s:20:\"popups_layout_source\";s:7:\"default\";s:12:\"thegemPopups\";a:0:{}}"],"thegem_page_data":["a:201:{s:10:\"title_show\";s:7:\"default\";s:11:\"title_style\";s:1:\"2\";s:14:\"title_template\";s:5:\"27835\";s:23:\"title_use_page_settings\";i:1;s:12:\"title_xlarge\";i:0;s:18:\"title_rich_content\";i:0;s:13:\"title_content\";s:0:\"\";s:21:\"title_background_type\";s:5:\"color\";s:22:\"title_background_image\";s:0:\"\";s:29:\"title_background_image_repeat\";i:0;s:27:\"title_background_position_x\";s:6:\"center\";s:27:\"title_background_position_y\";s:3:\"top\";s:21:\"title_background_size\";s:5:\"cover\";s:28:\"title_background_image_color\";s:0:\"\";s:30:\"title_background_image_overlay\";s:0:\"\";s:30:\"title_background_gradient_type\";s:6:\"linear\";s:31:\"title_background_gradient_angle\";i:90;s:34:\"title_background_gradient_position\";s:13:\"center center\";s:38:\"title_background_gradient_point1_color\";s:9:\"#00BCD4BF\";s:41:\"title_background_gradient_point1_position\";i:0;s:38:\"title_background_gradient_point2_color\";s:9:\"#354093BF\";s:41:\"title_background_gradient_point2_position\";i:100;s:23:\"title_background_effect\";s:6:\"normal\";s:36:\"title_background_ken_burns_direction\";s:7:\"zoom_in\";s:43:\"title_background_ken_burns_transition_speed\";i:15000;s:37:\"title_background_video_play_on_mobile\";i:0;s:22:\"title_background_color\";s:7:\"#333144\";s:27:\"title_background_video_type\";s:0:\"\";s:22:\"title_background_video\";s:0:\"\";s:35:\"title_background_video_aspect_ratio\";s:0:\"\";s:36:\"title_background_video_overlay_color\";s:0:\"\";s:38:\"title_background_video_overlay_opacity\";s:0:\"\";s:29:\"title_background_video_poster\";s:0:\"\";s:19:\"title_menu_on_video\";s:0:\"\";s:16:\"title_text_color\";s:7:\"#ffffff\";s:24:\"title_excerpt_text_color\";s:7:\"#ffffff\";s:13:\"title_excerpt\";s:0:\"\";s:18:\"title_hide_excerpt\";i:0;s:17:\"title_title_width\";i:0;s:19:\"title_excerpt_width\";i:0;s:22:\"title_font_preset_html\";s:0:\"\";s:23:\"title_font_preset_style\";s:0:\"\";s:24:\"title_font_preset_weight\";s:0:\"\";s:27:\"title_font_preset_transform\";s:0:\"\";s:30:\"title_excerpt_font_preset_html\";s:0:\"\";s:31:\"title_excerpt_font_preset_style\";s:0:\"\";s:32:\"title_excerpt_font_preset_weight\";s:0:\"\";s:35:\"title_excerpt_font_preset_transform\";s:0:\"\";s:17:\"title_padding_top\";i:80;s:24:\"title_padding_top_tablet\";i:80;s:24:\"title_padding_top_mobile\";i:80;s:20:\"title_padding_bottom\";i:80;s:27:\"title_padding_bottom_tablet\";i:80;s:27:\"title_padding_bottom_mobile\";i:80;s:18:\"title_padding_left\";i:0;s:25:\"title_padding_left_tablet\";i:0;s:25:\"title_padding_left_mobile\";i:0;s:19:\"title_padding_right\";i:0;s:26:\"title_padding_right_tablet\";i:0;s:26:\"title_padding_right_mobile\";i:0;s:16:\"title_top_margin\";s:0:\"\";s:23:\"title_top_margin_tablet\";i:0;s:23:\"title_top_margin_mobile\";i:0;s:24:\"title_excerpt_top_margin\";i:18;s:31:\"title_excerpt_top_margin_tablet\";i:18;s:31:\"title_excerpt_top_margin_mobile\";i:18;s:17:\"title_breadcrumbs\";i:1;s:15:\"title_alignment\";s:0:\"\";s:15:\"title_icon_pack\";s:7:\"elegant\";s:10:\"title_icon\";s:0:\"\";s:16:\"title_icon_color\";s:0:\"\";s:18:\"title_icon_color_2\";s:0:\"\";s:27:\"title_icon_background_color\";s:0:\"\";s:16:\"title_icon_shape\";s:6:\"circle\";s:23:\"title_icon_border_color\";s:0:\"\";s:15:\"title_icon_size\";s:5:\"large\";s:16:\"title_icon_style\";s:0:\"\";s:18:\"title_icon_opacity\";d:0;s:25:\"breadcrumbs_default_color\";s:0:\"\";s:24:\"breadcrumbs_active_color\";s:0:\"\";s:23:\"breadcrumbs_hover_color\";s:0:\"\";s:27:\"title_breadcrumbs_alignment\";s:6:\"center\";s:18:\"header_transparent\";i:0;s:25:\"header_transparent_mobile\";i:0;s:14:\"header_opacity\";i:50;s:22:\"header_menu_logo_light\";i:0;s:20:\"disable_fixed_header\";i:0;s:23:\"sticky_header_on_mobile\";s:0:\"\";s:20:\"header_hide_top_area\";s:7:\"default\";s:27:\"header_hide_top_area_tablet\";s:7:\"default\";s:27:\"header_hide_top_area_mobile\";s:7:\"default\";s:9:\"menu_show\";s:7:\"default\";s:12:\"menu_options\";s:7:\"default\";s:18:\"header_custom_menu\";i:0;s:27:\"header_top_area_transparent\";i:0;s:23:\"header_top_area_opacity\";i:50;s:16:\"top_area_options\";s:7:\"default\";s:13:\"header_source\";s:7:\"default\";s:14:\"header_builder\";s:1:\"0\";s:29:\"header_builder_sticky_desktop\";i:0;s:28:\"header_builder_sticky_mobile\";i:0;s:34:\"header_builder_sticky_hide_desktop\";i:0;s:33:\"header_builder_sticky_hide_mobile\";i:1;s:21:\"header_builder_sticky\";s:1:\"0\";s:29:\"header_builder_sticky_opacity\";i:80;s:26:\"header_builder_light_color\";s:7:\"#FFFFFF\";s:32:\"header_builder_light_color_hover\";s:7:\"#00bcd4\";s:20:\"main_background_type\";s:5:\"color\";s:21:\"main_background_color\";s:7:\"#ffffff\";s:21:\"main_background_image\";s:60:\"https:\/\/kmwllc.com\/wp-content\/uploads\/2022\/11\/Artboard-3.png\";s:28:\"main_background_image_repeat\";i:1;s:26:\"main_background_position_x\";s:4:\"left\";s:26:\"main_background_position_y\";s:3:\"top\";s:20:\"main_background_size\";s:4:\"auto\";s:27:\"main_background_image_color\";s:0:\"\";s:29:\"main_background_image_overlay\";s:0:\"\";s:29:\"main_background_gradient_type\";s:6:\"linear\";s:30:\"main_background_gradient_angle\";i:90;s:33:\"main_background_gradient_position\";s:0:\"\";s:37:\"main_background_gradient_point1_color\";s:9:\"#E9ECDAFF\";s:40:\"main_background_gradient_point1_position\";i:0;s:37:\"main_background_gradient_point2_color\";s:9:\"#D5F6FAFF\";s:40:\"main_background_gradient_point2_position\";i:100;s:23:\"main_background_pattern\";s:0:\"\";s:19:\"content_padding_top\";i:50;s:26:\"content_padding_top_tablet\";i:30;s:26:\"content_padding_top_mobile\";i:20;s:22:\"content_padding_bottom\";i:50;s:29:\"content_padding_bottom_tablet\";i:30;s:29:\"content_padding_bottom_mobile\";i:20;s:20:\"content_area_options\";s:6:\"custom\";s:18:\"footer_custom_show\";s:7:\"default\";s:13:\"footer_custom\";s:5:\"28054\";s:19:\"footer_hide_default\";s:7:\"default\";s:23:\"footer_hide_widget_area\";s:7:\"default\";s:16:\"effects_disabled\";i:0;s:17:\"effects_one_pager\";i:0;s:23:\"effects_parallax_footer\";i:0;s:24:\"effects_no_bottom_margin\";i:0;s:21:\"effects_no_top_margin\";i:0;s:19:\"redirect_to_subpage\";i:0;s:19:\"effects_hide_header\";s:7:\"default\";s:19:\"effects_hide_footer\";s:7:\"default\";s:21:\"effects_page_scroller\";i:0;s:28:\"effects_page_scroller_mobile\";i:0;s:26:\"effects_page_scroller_type\";s:8:\"advanced\";s:22:\"fullpage_disabled_dots\";i:0;s:19:\"fullpage_style_dots\";s:7:\"outline\";s:31:\"fullpage_disabled_tooltips_dots\";i:0;s:25:\"fullpage_fixed_background\";b:0;s:26:\"fullpage_enable_continuous\";i:0;s:24:\"fullpage_disabled_mobile\";i:0;s:22:\"fullpage_scroll_effect\";s:6:\"normal\";s:21:\"enable_page_preloader\";s:7:\"default\";s:14:\"slideshow_type\";s:0:\"\";s:19:\"slideshow_slideshow\";s:0:\"\";s:21:\"slideshow_layerslider\";s:0:\"\";s:19:\"slideshow_revslider\";s:0:\"\";s:19:\"slideshow_preloader\";i:0;s:12:\"sidebar_show\";s:7:\"default\";s:16:\"sidebar_position\";s:5:\"right\";s:14:\"sidebar_sticky\";i:0;s:24:\"product_header_separator\";i:0;s:23:\"page_layout_breadcrumbs\";s:7:\"default\";s:37:\"page_layout_breadcrumbs_default_color\";s:9:\"#99A9B5FF\";s:36:\"page_layout_breadcrumbs_active_color\";s:9:\"#3C3950FF\";s:35:\"page_layout_breadcrumbs_hover_color\";s:9:\"#3C3950FF\";s:33:\"page_layout_breadcrumbs_alignment\";s:4:\"left\";s:38:\"page_layout_breadcrumbs_bottom_spacing\";s:1:\"0\";s:37:\"page_layout_breadcrumbs_shop_category\";i:0;s:26:\"delay_js_execution_desktop\";i:0;s:13:\"disable_cache\";i:0;s:18:\"delay_js_execution\";i:0;s:31:\"title_breadcrumbs_shop_category\";s:1:\"0\";s:20:\"title_padding_locked\";s:0:\"\";s:27:\"title_padding_tablet_locked\";s:0:\"\";s:27:\"title_padding_mobile_locked\";s:0:\"\";s:24:\"title_background_pattern\";s:0:\"\";s:30:\"title_background_video_overlay\";s:0:\"\";s:16:\"title_icon__pack\";s:0:\"\";s:21:\"title_icon_shape_show\";s:0:\"\";s:25:\"footer_widget_woocommerce\";s:1:\"1\";s:25:\"delay_js_execution_mobile\";s:1:\"0\";s:19:\"portfolio_item_data\";a:35:{s:8:\"back_url\";s:0:\"\";s:9:\"highlight\";s:0:\"\";s:14:\"highlight_type\";s:0:\"\";s:14:\"overview_title\";s:0:\"\";s:16:\"overview_summary\";s:0:\"\";s:12:\"project_link\";s:0:\"\";s:12:\"project_text\";s:0:\"\";s:9:\"fullwidth\";s:0:\"\";s:19:\"project_button_show\";s:0:\"\";s:25:\"portfolio_layout_settings\";s:7:\"default\";s:23:\"portfolio_layout_source\";s:7:\"default\";s:26:\"portfolio_builder_template\";s:0:\"\";s:20:\"grid_appearance_type\";s:14:\"featured_image\";s:30:\"grid_appearance_featured_image\";s:0:\"\";s:19:\"grid_appearance_gif\";s:0:\"\";s:25:\"grid_appearance_gif_start\";s:8:\"autoplay\";s:26:\"grid_appearance_gif_poster\";s:0:\"\";s:27:\"grid_appearance_gif_preload\";s:0:\"\";s:21:\"grid_appearance_video\";s:0:\"\";s:26:\"grid_appearance_video_type\";s:0:\"\";s:34:\"grid_appearance_video_aspect_ratio\";s:0:\"\";s:36:\"grid_appearance_video_play_on_mobile\";s:0:\"\";s:29:\"grid_appearance_video_overlay\";s:0:\"\";s:28:\"grid_appearance_video_poster\";s:0:\"\";s:27:\"grid_appearance_video_start\";s:8:\"autoplay\";s:34:\"grid_appearance_gallery_autoscroll\";s:1:\"1\";s:40:\"grid_appearance_gallery_autoscroll_speed\";s:4:\"3000\";s:30:\"grid_appearance_image_behavior\";s:12:\"link_to_page\";s:28:\"grid_appearance_gif_behavior\";s:12:\"link_to_page\";s:30:\"grid_appearance_video_behavior\";s:12:\"link_to_page\";s:32:\"grid_appearance_gallery_behavior\";s:12:\"link_to_page\";s:31:\"grid_appearance_behavior_target\";s:5:\"_self\";s:36:\"grid_appearance_behavior_custom_link\";s:0:\"\";s:43:\"grid_appearance_behavior_custom_link_target\";s:5:\"_self\";s:30:\"grid_appearance_lightbox_image\";s:0:\"\";}s:23:\"portfolio_elements_data\";a:7:{s:23:\"portfolio_page_elements\";s:7:\"default\";s:19:\"portfolio_hide_date\";s:0:\"\";s:19:\"portfolio_hide_sets\";s:0:\"\";s:20:\"portfolio_hide_likes\";s:0:\"\";s:22:\"portfolio_hide_socials\";s:0:\"\";s:29:\"portfolio_hide_top_navigation\";s:0:\"\";s:32:\"portfolio_hide_bottom_navigation\";s:0:\"\";}s:17:\"product_item_data\";a:117:{s:9:\"highlight\";s:0:\"\";s:14:\"highlight_type\";s:7:\"squared\";s:28:\"thegem_product_disable_hover\";s:1:\"0\";s:10:\"size_guide\";s:7:\"default\";s:16:\"size_guide_image\";s:0:\"\";s:23:\"product_layout_settings\";s:7:\"default\";s:21:\"product_layout_source\";s:7:\"default\";s:24:\"product_builder_template\";s:0:\"\";s:19:\"product_page_layout\";s:7:\"default\";s:25:\"product_page_layout_style\";s:15:\"horizontal_tabs\";s:28:\"product_page_layout_centered\";s:1:\"0\";s:39:\"product_page_layout_centered_top_margin\";s:2:\"42\";s:34:\"product_page_layout_centered_boxed\";s:1:\"0\";s:40:\"product_page_layout_centered_boxed_color\";s:0:\"\";s:29:\"product_page_layout_fullwidth\";s:1:\"0\";s:26:\"product_page_layout_sticky\";s:1:\"0\";s:33:\"product_page_layout_sticky_offset\";s:1:\"0\";s:28:\"product_page_skeleton_loader\";s:1:\"0\";s:30:\"product_page_layout_background\";s:0:\"\";s:30:\"product_page_layout_title_area\";s:8:\"disabled\";s:29:\"product_page_ajax_add_to_cart\";s:1:\"1\";s:31:\"product_page_desc_review_source\";s:17:\"extra_description\";s:31:\"product_page_desc_review_layout\";s:4:\"tabs\";s:42:\"product_page_desc_review_layout_tabs_style\";s:10:\"horizontal\";s:46:\"product_page_desc_review_layout_tabs_alignment\";s:4:\"left\";s:44:\"product_page_desc_review_layout_acc_position\";s:13:\"below_gallery\";s:65:\"product_page_desc_review_layout_one_by_one_description_background\";s:9:\"#F4F6F7FF\";s:69:\"product_page_desc_review_layout_one_by_one_additional_info_background\";s:9:\"#FFFFFFFF\";s:61:\"product_page_desc_review_layout_one_by_one_reviews_background\";s:9:\"#F4F6F7FF\";s:36:\"product_page_desc_review_description\";s:1:\"1\";s:42:\"product_page_desc_review_description_title\";s:11:\"Description\";s:40:\"product_page_desc_review_additional_info\";s:1:\"1\";s:46:\"product_page_desc_review_additional_info_title\";s:15:\"Additional Info\";s:32:\"product_page_desc_review_reviews\";s:1:\"1\";s:38:\"product_page_desc_review_reviews_title\";s:7:\"Reviews\";s:36:\"product_page_button_add_to_cart_text\";s:11:\"Add to Cart\";s:36:\"product_page_button_add_to_cart_icon\";s:4:\"f1e7\";s:41:\"product_page_button_add_to_cart_icon_pack\";s:8:\"material\";s:45:\"product_page_button_add_to_cart_icon_position\";s:4:\"left\";s:40:\"product_page_button_add_to_wishlist_icon\";s:4:\"f37b\";s:45:\"product_page_button_add_to_wishlist_icon_pack\";s:8:\"material\";s:42:\"product_page_button_added_to_wishlist_icon\";s:4:\"f377\";s:47:\"product_page_button_added_to_wishlist_icon_pack\";s:8:\"material\";s:41:\"product_page_button_clear_attributes_text\";s:15:\"Clear selection\";s:31:\"product_page_elements_prev_next\";s:1:\"1\";s:38:\"product_page_elements_preview_on_hover\";s:1:\"1\";s:34:\"product_page_elements_back_to_shop\";s:1:\"1\";s:39:\"product_page_elements_back_to_shop_link\";s:9:\"main_shop\";s:50:\"product_page_elements_back_to_shop_link_custom_url\";s:0:\"\";s:27:\"product_page_elements_title\";s:1:\"1\";s:32:\"product_page_elements_attributes\";s:1:\"0\";s:37:\"product_page_elements_attributes_data\";s:0:\"\";s:29:\"product_page_elements_reviews\";s:1:\"1\";s:34:\"product_page_elements_reviews_text\";s:16:\"customer reviews\";s:27:\"product_page_elements_price\";s:1:\"1\";s:41:\"product_page_elements_price_strikethrough\";s:1:\"1\";s:33:\"product_page_elements_description\";s:1:\"1\";s:34:\"product_page_elements_stock_amount\";s:1:\"1\";s:39:\"product_page_elements_stock_amount_text\";s:17:\"Products in stock\";s:32:\"product_page_elements_size_guide\";s:1:\"1\";s:25:\"product_page_elements_sku\";s:1:\"1\";s:31:\"product_page_elements_sku_title\";s:3:\"SKU\";s:32:\"product_page_elements_categories\";s:1:\"1\";s:38:\"product_page_elements_categories_title\";s:10:\"Categories\";s:26:\"product_page_elements_tags\";s:1:\"1\";s:32:\"product_page_elements_tags_title\";s:4:\"Tags\";s:27:\"product_page_elements_share\";s:1:\"1\";s:33:\"product_page_elements_share_title\";s:5:\"Share\";s:36:\"product_page_elements_share_facebook\";s:1:\"1\";s:35:\"product_page_elements_share_twitter\";s:1:\"1\";s:37:\"product_page_elements_share_pinterest\";s:1:\"1\";s:34:\"product_page_elements_share_tumblr\";s:1:\"1\";s:36:\"product_page_elements_share_linkedin\";s:1:\"1\";s:34:\"product_page_elements_share_reddit\";s:1:\"1\";s:28:\"product_page_elements_upsell\";s:1:\"1\";s:34:\"product_page_elements_upsell_title\";s:17:\"You may also like\";s:44:\"product_page_elements_upsell_title_alignment\";s:4:\"left\";s:34:\"product_page_elements_upsell_items\";s:2:\"-1\";s:44:\"product_page_elements_upsell_columns_desktop\";s:2:\"4x\";s:43:\"product_page_elements_upsell_columns_tablet\";s:2:\"3x\";s:43:\"product_page_elements_upsell_columns_mobile\";s:2:\"2x\";s:40:\"product_page_elements_upsell_columns_100\";s:1:\"5\";s:29:\"product_page_elements_related\";s:1:\"1\";s:35:\"product_page_elements_related_title\";s:16:\"Related Products\";s:45:\"product_page_elements_related_title_alignment\";s:4:\"left\";s:35:\"product_page_elements_related_items\";s:2:\"-1\";s:45:\"product_page_elements_related_columns_desktop\";s:2:\"4x\";s:44:\"product_page_elements_related_columns_tablet\";s:2:\"3x\";s:44:\"product_page_elements_related_columns_mobile\";s:2:\"2x\";s:41:\"product_page_elements_related_columns_100\";s:1:\"5\";s:15:\"product_gallery\";s:7:\"enabled\";s:20:\"product_gallery_type\";s:10:\"horizontal\";s:31:\"product_gallery_column_position\";s:4:\"left\";s:28:\"product_gallery_column_width\";s:2:\"50\";s:26:\"product_gallery_show_image\";s:5:\"hover\";s:20:\"product_gallery_zoom\";s:1:\"1\";s:24:\"product_gallery_lightbox\";s:1:\"1\";s:22:\"product_gallery_labels\";s:1:\"1\";s:26:\"product_gallery_label_sale\";s:1:\"1\";s:25:\"product_gallery_label_new\";s:1:\"1\";s:31:\"product_gallery_label_out_stock\";s:1:\"1\";s:27:\"product_gallery_auto_height\";s:1:\"1\";s:30:\"product_gallery_elements_color\";s:0:\"\";s:28:\"product_gallery_grid_columns\";s:2:\"1x\";s:25:\"product_gallery_grid_gaps\";s:2:\"42\";s:30:\"product_gallery_grid_gaps_hide\";s:1:\"0\";s:31:\"product_gallery_grid_top_margin\";s:1:\"0\";s:30:\"product_gallery_video_autoplay\";s:1:\"0\";s:15:\"size_guide_text\";s:10:\"Size guide\";s:28:\"product_page_additional_tabs\";s:7:\"default\";s:33:\"product_page_additional_tabs_data\";s:0:\"\";s:31:\"product_gallery_thumb_on_mobile\";s:1:\"0\";s:30:\"product_gallery_thumb_position\";s:4:\"left\";s:27:\"product_gallery_image_ratio\";s:0:\"\";s:31:\"product_gallery_grid_image_size\";s:7:\"default\";s:32:\"product_gallery_grid_image_ratio\";s:0:\"\";s:32:\"product_page_elements_title_html\";s:0:\"\";}s:25:\"product_archive_item_data\";a:5:{s:29:\"product_archive_layout_source\";s:7:\"default\";s:32:\"product_archive_builder_template\";s:0:\"\";s:24:\"products_layout_settings\";s:7:\"default\";s:22:\"products_layout_source\";s:7:\"default\";s:25:\"products_builder_template\";s:0:\"\";}s:22:\"blog_archive_item_data\";a:3:{s:26:\"blog_archive_layout_source\";s:7:\"default\";s:29:\"blog_archive_builder_template\";s:0:\"\";s:28:\"blog_archive_layout_settings\";s:7:\"default\";}s:24:\"options_current_contents\";N;s:16:\"options_modified\";N;s:34:\"options_outside_parameter_modified\";b:0;s:22:\"options_saved_contents\";N;s:8:\"settings\";a:3:{s:5:\"theme\";s:5:\"light\";s:24:\"background_image_gallery\";a:0:{}s:21:\"colorpicker_favorites\";a:1:{s:7:\"default\";a:0:{}}}s:23:\"custom_fields_item_data\";N;s:18:\"custom_fields_data\";s:0:\"\";s:14:\"page_item_data\";a:3:{s:20:\"page_layout_settings\";s:7:\"default\";s:18:\"page_layout_source\";s:7:\"default\";s:21:\"page_builder_template\";s:0:\"\";}s:24:\"custom_archive_item_data\";a:6:{s:15:\"layout_settings\";s:7:\"default\";s:13:\"layout_source\";s:7:\"default\";s:16:\"builder_template\";s:0:\"\";s:21:\"posts_layout_settings\";s:7:\"default\";s:19:\"posts_layout_source\";s:7:\"default\";s:22:\"posts_builder_template\";s:0:\"\";}s:21:\"custom_post_item_data\";a:26:{s:15:\"layout_settings\";s:7:\"default\";s:13:\"layout_source\";s:7:\"default\";s:16:\"builder_template\";s:0:\"\";s:10:\"video_type\";s:0:\"\";s:18:\"video_aspect_ratio\";s:0:\"\";s:5:\"video\";s:0:\"\";s:20:\"video_play_on_mobile\";s:0:\"\";s:13:\"video_overlay\";s:0:\"\";s:12:\"video_poster\";s:0:\"\";s:11:\"video_start\";s:16:\"open_in_lightbox\";s:5:\"audio\";s:0:\"\";s:10:\"quote_text\";s:0:\"\";s:12:\"quote_author\";s:0:\"\";s:16:\"quote_background\";s:0:\"\";s:18:\"quote_author_color\";s:0:\"\";s:7:\"gallery\";s:0:\"\";s:18:\"gallery_autoscroll\";s:4:\"1500\";s:26:\"show_featured_posts_slider\";s:0:\"\";s:21:\"show_featured_content\";s:0:\"\";s:9:\"highlight\";s:0:\"\";s:14:\"highlight_type\";s:0:\"\";s:15:\"highlight_style\";s:0:\"\";s:31:\"highlight_title_left_background\";s:9:\"#00BCD4FF\";s:32:\"highlight_title_right_background\";s:9:\"#00BCD4FF\";s:26:\"highlight_title_left_color\";s:9:\"#FFFFFFFF\";s:27:\"highlight_title_right_color\";s:9:\"#FFFFFFFF\";}s:19:\"fullpage_dots_color\";s:0:\"\";s:33:\"fullpage_dots_tolltips_text_color\";s:0:\"\";s:31:\"fullpage_dots_tolltips_bg_color\";s:0:\"\";}"],"_elementor_edit_mode":["builder"],"_elementor_template_type":["wp-post"],"_elementor_version":["3.25.10"],"_elementor_pro_version":["3.22.1"],"_elementor_data":["[{\"id\":\"593706b\",\"elType\":\"section\",\"settings\":{\"content_width\":{\"unit\":\"px\",\"size\":1260,\"sizes\":[]},\"gap\":\"no\",\"structure\":\"30\"},\"elements\":[{\"id\":\"bc55d67\",\"elType\":\"column\",\"settings\":{\"_column_size\":33,\"_inline_size\":65,\"_inline_size_tablet\":100,\"space_between_widgets\":0,\"thegem_column_breakpoints_list\":[]},\"elements\":[{\"id\":\"9563203\",\"elType\":\"widget\",\"settings\":{\"icon_list\":[{\"selected_icon\":{\"value\":\"fas fa-calendar\",\"library\":\"fa-solid\"},\"_id\":\"91a0f52\",\"custom_date_format\":\"F j, Y\",\"custom_time_format\":\"g:i a\",\"link\":\"\",\"show_icon\":\"none\"}],\"icon_typography_typography\":\"custom\",\"__globals__\":{\"text_color\":\"globals\\\/colors?id=primary\"}},\"elements\":[],\"widgetType\":\"post-info\"},{\"id\":\"121d3ee\",\"elType\":\"widget\",\"settings\":{\"title\":\"Add Your Heading Text Here\",\"header_size\":\"div\",\"thegem_heading_style\":\"styled-subtitle\",\"__dynamic__\":{\"title\":\"[elementor-tag id=\\\"7b6ad14\\\" name=\\\"thegem-post-excerpt\\\" settings=\\\"%7B%7D\\\"]\"}},\"elements\":[],\"widgetType\":\"heading\"},{\"id\":\"c113cbf\",\"elType\":\"widget\",\"settings\":{\"source\":\"custom\",\"author_avatar\":{\"url\":\"https:\\\/\\\/kmwllc.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/Jake.png\",\"id\":28528,\"alt\":\"\",\"source\":\"library\"},\"author_name\":\"Jake Horban\",\"author_name_tag\":\"div\",\"author_bio\":\"Search Engineer at KMW Technology\",\"link_text\":\"All Posts\",\"image_vertical_align\":\"top\",\"image_border\":\"yes\",\"image_border_width\":{\"unit\":\"px\",\"size\":3,\"sizes\":[]},\"image_border_radius\":{\"unit\":\"px\",\"size\":100,\"sizes\":[]},\"name_gap\":{\"unit\":\"px\",\"size\":0,\"sizes\":[]},\"__globals__\":{\"image_border_color\":\"globals\\\/colors?id=428f277\",\"bio_color\":\"globals\\\/colors?id=secondary\"},\"_padding\":{\"unit\":\"em\",\"top\":\"2\",\"right\":\"2\",\"bottom\":\"2\",\"left\":\"2\",\"isLinked\":true},\"_padding_tablet\":{\"unit\":\"em\",\"top\":\"\",\"right\":\"\",\"bottom\":\"\",\"left\":\"\",\"isLinked\":true},\"_padding_mobile\":{\"unit\":\"em\",\"top\":\"\",\"right\":\"\",\"bottom\":\"\",\"left\":\"\",\"isLinked\":true}},\"elements\":[],\"widgetType\":\"author-box\"},{\"id\":\"8baabb4\",\"elType\":\"widget\",\"settings\":{\"text\":\"Divider\",\"weight\":{\"unit\":\"px\",\"size\":3,\"sizes\":[]},\"gap\":{\"unit\":\"px\",\"size\":0,\"sizes\":[]},\"__globals__\":{\"color\":\"globals\\\/colors?id=428f277\"}},\"elements\":[],\"widgetType\":\"divider\"},{\"id\":\"bb3fe40\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"120ff0e\",\"elType\":\"widget\",\"settings\":{\"title\":\"Introduction\",\"size\":\"large\"},\"elements\":[],\"widgetType\":\"heading\"},{\"id\":\"2d88918\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p><span style=\\\"font-weight: 400;\\\">Vector search has the potential to uncover the semantic meaning of a body of text and provide an ability to match documents from different domains. We thought an interesting use case for semantic understanding\\\/vector search would be talent acquisition \\u2013 matching a job description with a candidate\\u2019s resume and vice versa. To satisfy this use case, we created a reference implementation of an OpenSearch application able to retrieve documents based on k-Nearest Neighbors search between a job description embedding and resume embedding.<\\\/span><\\\/p><p><span style=\\\"font-weight: 400;\\\">Our main goal was to create a vector search application that we can use to evaluate the technology and document what\\u2019s necessary to get it working.\\u00a0 We wanted to uncover how vector search may or may not work with standard lexical search features like faceting, sorting and filtering.\\u00a0 We were also interested in solving some of the operational challenges of working with a vector search application such as how to generate embeddings and how to fine-tune sentence embedding models. <\\\/span><\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"aa638d6\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"05a3dcf\",\"elType\":\"widget\",\"settings\":{\"title\":\"Ingest Architecture\",\"size\":\"large\"},\"elements\":[],\"widgetType\":\"heading\"},{\"id\":\"ee4d4a2\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p>To leverage approximate kNN search in OpenSearch, sentence embeddings must be included as document fields during indexing and as a search parameter during querying. Moreover, both of these vectors must have the same dimensionality and be generated by the same fine-tuned model. T<span id=\\\"db6dbc30-18c5-4cdb-a0ad-9f2906e6fb31\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"db6dbc30-18c5-4cdb-a0ad-9f2906e6fb31\\\">hese <\\\/span>requirements motivated us to create a RESTful service to generate embeddings for both documents (at ingest time) and queries (at query time) using a sentence transformer model such as <a href=\\\"https:\\\/\\\/www.sbert.net\\\/\\\">SBERT<\\\/a>.<\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"3685a1f\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"1915b86\",\"elType\":\"widget\",\"settings\":{\"image\":{\"url\":\"https:\\\/\\\/kmwllccom.stage.site\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/image-20221219-200928.png\",\"id\":28516,\"alt\":\"\",\"source\":\"library\"},\"caption_source\":\"custom\",\"caption\":\"Architecture diagram\"},\"elements\":[],\"widgetType\":\"image\"},{\"id\":\"ab4e06d\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"061630e\",\"elType\":\"widget\",\"settings\":{\"title\":\"1. Embedding Service\",\"size\":\"medium\",\"header_size\":\"h3\"},\"elements\":[],\"widgetType\":\"heading\"},{\"id\":\"6751da0\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p>The <span id=\\\"be8fa3b3-9554-4d0c-83bd-af62f096b6d1\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"be8fa3b3-9554-4d0c-83bd-af62f096b6d1\\\">embedd<\\\/span>ing service was created in Python using FastAPI and the <a class=\\\"css-tgpl01\\\" title=\\\"https:\\\/\\\/huggingface.co\\\/docs\\\/transformers\\\/index\\\" href=\\\"https:\\\/\\\/huggingface.co\\\/docs\\\/transformers\\\/index\\\" data-renderer-mark=\\\"true\\\">Hugging Face<\\\/a> transformer library. When the service starts, <span id=\\\"7ac1c11c-b99a-4f4e-bad6-16a1f1a68f76\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"7ac1c11c-b99a-4f4e-bad6-16a1f1a68f76\\\">it loads the pre-trained models like SBERT from Hugging Face<\\\/span> or from local files based on a configurable list. The service accepts text and returns embeddings at ingest time for the document and at query time for the query.\\u00a0 A request can specify which model should be used to generate the embeddings. Otherwise, a default model is used.<span id=\\\"0a34dc41-0753-4bac-ba4f-5f1167215bac\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"0a34dc41-0753-4bac-ba4f-5f1167215bac\\\">\\u00a0<\\\/span><\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"7fe9c56\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"79b5fb9\",\"elType\":\"widget\",\"settings\":{\"title\":\"2. Lucille (ETL) Stage\",\"size\":\"medium\",\"header_size\":\"h3\"},\"elements\":[],\"widgetType\":\"heading\"},{\"id\":\"433b3bf\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p>Documents are indexed into OpenSearch with <a href=\\\"https:\\\/\\\/bitbucket.org\\\/kmwllc\\\/lucille\\\/src\\\/master\\\/README.md\\\">Lucille<\\\/a>, an open-source Java framework for ETL pipelines created by KMW Technology.\\u00a0 An embedding stage was added to Lucille to connect to the embedding service and retrieve the embeddings for the specified fields during indexing. This stage allows specifying multiple pairs of field mappings and will retrieve the embeddings for the source fields and add them to the respective target fields.<\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"bd7aadf\",\"elType\":\"widget\",\"settings\":{\"language\":\"\",\"code\":\"pipelines: [\\r\\n  {\\r\\n    name: \\\"pipeline1\\\",\\r\\n    stages: [\\r\\n      {\\r\\n        class:\\\"com.kmwllc.lucille.stage.EmbedText\\\",\\r\\n        connection:\\\"http:\\\/\\\/127.0.0.1:8000\\\",\\r\\n        fieldMapping {\\r\\n          \\\"resume\\\": \\\"resume_embedded\\\",\\r\\n        }\\r\\n      }\\r\\n    ]\\r\\n  }\\r\\n]\",\"line_numbers\":\"\"},\"elements\":[],\"widgetType\":\"code-highlight\"},{\"id\":\"c482338\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"2de8dd2\",\"elType\":\"widget\",\"settings\":{\"title\":\"3. OpenSearch \",\"size\":\"medium\",\"header_size\":\"h3\"},\"elements\":[],\"widgetType\":\"heading\"},{\"id\":\"22b82ce\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p>Before indexing the documents, we need to enable the kNN index, <span id=\\\"db0b4e8c-432b-4b50-8e84-54374f76716b\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"db0b4e8c-432b-4b50-8e84-54374f76716b\\\">specify the field type <\\\/span>for holding the embeddings as <code class=\\\"code css-z5oxh7\\\" data-renderer-mark=\\\"true\\\">knn_vector<\\\/code>, and set the dimensionality to the same size as the embeddings generated by the language model used by the embedding service during ingest.<\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"09d11ee\",\"elType\":\"widget\",\"settings\":{\"language\":\"\",\"code\":\"{\\r\\n  \\\"settings\\\": {\\r\\n    \\\"index.knn\\\": true\\r\\n  },\\r\\n  \\\"mappings\\\": {\\r\\n    \\\"properties\\\": {\\r\\n      \\\"resume_embedded\\\": {\\r\\n        \\\"type\\\": \\\"knn_vector\\\",\\r\\n        \\\"dimension\\\": 384\\r\\n      }\\r\\n    }\\r\\n  }\\r\\n}\",\"line_numbers\":\"\"},\"elements\":[],\"widgetType\":\"code-highlight\"},{\"id\":\"18e73cf\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"fed7d2c\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p><span style=\\\"font-weight: 400;\\\">OpenSearch also allows additional parameters such as specifying the nearest neighbors indexing algorithm preferred for the dataset and the type of computing resources available in the cluster, which you can view <\\\/span><a href=\\\"https:\\\/\\\/opensearch.org\\\/docs\\\/2.6\\\/search-plugins\\\/knn\\\/knn-index\\\/\\\"><span style=\\\"font-weight: 400;\\\">here<\\\/span><\\\/a><span style=\\\"font-weight: 400;\\\">. <\\\/span><\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"399e29d\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"f9d3ce2\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p>Once the documents are indexed, we will be ready to make an approximate kNN query.<\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"ab2b6b7\",\"elType\":\"widget\",\"settings\":{\"language\":\"\",\"code\":\"{\\r\\n  \\\"size\\\": 300,\\r\\n  \\\"query\\\": {\\r\\n    \\\"knn\\\": {\\r\\n      \\\"resume_embedded\\\": {\\r\\n        \\\"k\\\": 50,\\r\\n        \\\"vector\\\": [\\r\\n          -0.04631288722157478,\\r\\n          -0.03802000731229782,\\r\\n          ...\\r\\n        ]\\r\\n      }\\r\\n    }\\r\\n  }\\r\\n}\",\"line_numbers\":\"\"},\"elements\":[],\"widgetType\":\"code-highlight\"},{\"id\":\"0b570f1\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"c8d115e\",\"elType\":\"widget\",\"settings\":{\"title\":\"Approximate KNN Search\",\"size\":\"large\"},\"elements\":[],\"widgetType\":\"heading\"},{\"id\":\"5f1c222\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p><span style=\\\"font-weight: 400;\\\">A kNN search query traditionally uses a brute-force approach to compute similarity, which produces exact results but can be slow for large, high-dimensional datasets. Approximate kNN search methods can improve efficiency by restructuring indexes and reducing dimensionality. This approach <\\\/span><i><span style=\\\"font-weight: 400;\\\">reduces the accuracy<\\\/span><\\\/i><span style=\\\"font-weight: 400;\\\"> of the results but increases search processing speeds significantly.\\u00a0<\\\/span><\\\/p><p><span style=\\\"font-weight: 400;\\\">OpenSearch offers several different search methods that support approximate kNN. If a search method is not specified at index creation, OpenSearch will use the <a href=\\\"https:\\\/\\\/github.com\\\/nmslib\\\/nmslib\\\">nmslib\\u00a0<\\\/a> engine to create Hierarchical Navigable Small World (HNSW) graphs. HNSW graphs support more efficient approximate kNN search. For more information about the implementation of approximate kNN search in OpenSearch, refer to their <\\\/span><a href=\\\"https:\\\/\\\/opensearch.org\\\/docs\\\/2.6\\\/search-plugins\\\/knn\\\/approximate-knn\\\/\\\"><span style=\\\"font-weight: 400;\\\">documentation.<\\\/span><\\\/a><\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"2c0366f\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"28dd4e5\",\"elType\":\"widget\",\"settings\":{\"title\":\"Traditional Search Feature Support\",\"size\":\"large\"},\"elements\":[],\"widgetType\":\"heading\"},{\"id\":\"0b8490e\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p><span style=\\\"font-weight: 400;\\\">Computing facets\\\/aggregations, sorting, and filtering are some of the most common search features used in lexical search. As part of our POC, we wanted to investigate how these features worked in conjunction with kNN queries.<\\\/span><\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"9ae1ed4\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"09d0a5b\",\"elType\":\"widget\",\"settings\":{\"title\":\"Aggregations\",\"size\":\"medium\"},\"elements\":[],\"widgetType\":\"heading\"},{\"id\":\"7733a25\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p><span style=\\\"font-weight: 400;\\\">As is typical in lexical search, the aggregation will be computed for the documents in the approximate kNN query result set. Here is an example query:<\\\/span><\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"9a25ce8\",\"elType\":\"widget\",\"settings\":{\"language\":\"\",\"code\":\"{\\r\\n  \\\"size\\\":10,\\r\\n  \\\"aggregations\\\": {\\r\\n    \\\"category\\\": {\\r\\n      \\\"terms\\\": {\\r\\n        \\\"field\\\": \\\"category.keyword\\\"\\r\\n      }\\r\\n    }\\r\\n  },\\r\\n  \\\"query\\\": {\\r\\n    \\\"knn\\\": {\\r\\n      \\\"resume_embedded\\\": {\\r\\n        \\\"k\\\": 10\\r\\n        \\\"vector\\\": [\\r\\n             0.02731507644057274,\\r\\n             0.010414771735668182,\\r\\n            ...\\r\\n            ],\\r\\n               \\r\\n            }\\r\\n        }\\r\\n    }\\r\\n}\\r\\n\",\"line_numbers\":\"\"},\"elements\":[],\"widgetType\":\"code-highlight\"},{\"id\":\"a1020f0\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"f035d5b\",\"elType\":\"widget\",\"settings\":{\"title\":\"Sorting\",\"size\":\"medium\",\"header_size\":\"h3\"},\"elements\":[],\"widgetType\":\"heading\"},{\"id\":\"883d96c\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p><span style=\\\"font-weight: 400;\\\">kNN query results can also be sorted according to a keyword field:<\\\/span><\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"1283c8a\",\"elType\":\"widget\",\"settings\":{\"language\":\"\",\"code\":\"{\\r\\n  \\\"size\\\":10,\\r\\n  \\\"sort\\\": [\\r\\n    {\\r\\n     \\\"category.keyword\\\": {\\r\\n      \\\"order\\\": \\\"asc\\\"\\r\\n      }\\r\\n    }\\r\\n  ],\\r\\n  \\\"query\\\": {\\r\\n    \\\"knn\\\": {\\r\\n      \\\"resume_embedded\\\": {\\r\\n        \\\"k\\\": 10\\r\\n        \\\"vector\\\": [\\r\\n             0.02731507644057274,\\r\\n             0.010414771735668182,\\r\\n            ...\\r\\n            ],\\r\\n            }\\r\\n        }\\r\\n    }\\r\\n}\\r\\n\",\"line_numbers\":\"\"},\"elements\":[],\"widgetType\":\"code-highlight\"},{\"id\":\"ca1cb8b\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"02fbd3b\",\"elType\":\"widget\",\"settings\":{\"title\":\"Filters\",\"size\":\"medium\",\"header_size\":\"h3\"},\"elements\":[],\"widgetType\":\"heading\"},{\"id\":\"27ee9ff\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p><span style=\\\"font-weight: 400;\\\">The typical filter behavior for lexical queries is to apply a filter before the query is executed, thereby narrowing the scope of documents that need to be searched. This is the default behavior for most search engines and generally known as a \\u2018pre-filter.\\u2019 For an OpenSearch approximate KNN query, pre-filter queries are only supported if the kNN index is constructed using the Lucene engine to build HNSW graphs.\\u00a0<\\\/span><\\\/p><p><span style=\\\"font-weight: 400;\\\">As we previously mentioned, the default engine used to construct HNSW graphs in OpenSearch is nmslib, which only supports post-filtering of results using the <code>post_filter<\\\/code> parameter. This default behavior is important to keep in mind when setting up a vector index in OpenSearch, as post-filtering can impact what results are actually returned for a filter query.\\u00a0\\u00a0<\\\/span><\\\/p><p><span style=\\\"font-weight: 400;\\\">When a post-filter query is executed, the kNN query will be computed first. Then the filter will be applied, potentially reducing the number of returned documents. It is essential to keep this order in mind when selecting parameters for the query. For example, we can increase the <\\\/span><span style=\\\"font-weight: 400;\\\">size<\\\/span><span style=\\\"font-weight: 400;\\\"> and <\\\/span><span style=\\\"font-weight: 400;\\\">k<\\\/span><span style=\\\"font-weight: 400;\\\"> parameters to ensure that the query returns a sufficiently broad set of results (i.e., to ensure that recall is high enough) before the filter is applied. In most cases, increasing <\\\/span><span style=\\\"font-weight: 400;\\\">k<\\\/span><span style=\\\"font-weight: 400;\\\"> will improve the accuracy of the approximate k-NN search but will also increase the computation time.<\\\/span><\\\/p><p>Example kNN query using the <code>post_filter<\\\/code> parameter:<\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"2567208\",\"elType\":\"widget\",\"settings\":{\"language\":\"\",\"code\":\"{\\r\\n  \\\"size\\\": 300,\\r\\n  \\\"post_filter\\\": {\\r\\n    \\\"match\\\": {\\r\\n      \\\"location\\\": \\\"New York\\\"\\r\\n    }\\r\\n  },\\r\\n  \\\"query\\\": {\\r\\n    \\\"knn\\\": {\\r\\n      \\\"resume_embedded\\\": {\\r\\n        \\\"k\\\": 5,\\r\\n        \\\"vector\\\": [\\r\\n          -0.07738623768091202,\\r\\n          -0.06183512881398201,\\r\\n          ...\\r\\n        ]\\r\\n      }\\r\\n    }\\r\\n  }\\r\\n}\",\"line_numbers\":\"\"},\"elements\":[],\"widgetType\":\"code-highlight\"},{\"id\":\"45645f8\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"f477483\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p data-renderer-start-pos=\\\"7261\\\"><span style=\\\"font-weight: 400;\\\">If you would like to know more about\\u00a0 different kinds of filter queries, their use cases, and their performance in combination with kNN, take a look at this <\\\/span><a href=\\\"https:\\\/\\\/opensearch.org\\\/docs\\\/2.6\\\/search-plugins\\\/knn\\\/filter-search-knn\\\/\\\"><span style=\\\"font-weight: 400;\\\">documentation<\\\/span><\\\/a><span style=\\\"font-weight: 400;\\\"> from OpenSearch.<\\\/span> One of the examples included is a Boolean filter query that allows filtering documents based on <code class=\\\"code css-z5oxh7\\\" data-renderer-mark=\\\"true\\\">must<\\\/code>,\\u00a0\\u00a0<code class=\\\"code css-z5oxh7\\\" data-renderer-mark=\\\"true\\\">must_not<\\\/code>, and <code class=\\\"code css-z5oxh7\\\" data-renderer-mark=\\\"true\\\">should<\\\/code> parameters. This type of query can <span id=\\\"42085614-71b6-45c5-81cb-40b20b28d6d4\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"42085614-71b6-45c5-81cb-40b20b28d6d4\\\"><span id=\\\"cb0e3e23-4b08-4a05-bc15-95bb8873b3cd\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"cb0e3e23-4b08-4a05-bc15-95bb8873b3cd\\\">be used to combine lexical and vector search.<\\\/span><\\\/span><\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"7980dec\",\"elType\":\"widget\",\"settings\":{\"language\":\"\",\"code\":\"{\\r\\n  \\\"size\\\": 3,\\r\\n  \\\"query\\\": {\\r\\n    \\\"bool\\\": {\\r\\n      \\\"filter\\\": {\\r\\n        \\\"bool\\\": {\\r\\n          \\\"must\\\": [\\r\\n            {\\r\\n              \\\"match\\\": {\\r\\n                \\\"location\\\": \\\"New York\\\"\\r\\n              }\\r\\n            }\\r\\n          ]\\r\\n        }\\r\\n      },\\r\\n      \\\"must\\\": [\\r\\n        {\\r\\n          \\\"knn\\\": {\\r\\n            \\\"resume_embedded\\\": {\\r\\n              \\\"k\\\": 20,\\r\\n              \\\"vector\\\": [\\r\\n                -0.07738623768091202,\\r\\n                -0.06183512881398201,\\r\\n                ...\\r\\n              ]\\r\\n            }\\r\\n          }\\r\\n        }\\r\\n      ]\\r\\n    }\\r\\n  }\\r\\n}\",\"line_numbers\":\"\"},\"elements\":[],\"widgetType\":\"code-highlight\"},{\"id\":\"ca7fac6\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"e551fc0\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p><span style=\\\"font-weight: 400;\\\">Our examples here are based on using the <\\\/span><i><span style=\\\"font-weight: 400;\\\">approximate nearest neighbor <\\\/span><\\\/i><span style=\\\"font-weight: 400;\\\">approach\\u00a0 because it scales well for larger datasets. The<\\\/span> <i><span style=\\\"font-weight: 400;\\\"><a href=\\\"https:\\\/\\\/opensearch.org\\\/docs\\\/2.6\\\/search-plugins\\\/knn\\\/painless-functions\\\/\\\">painless scripting<\\\/a> <\\\/span><\\\/i><span style=\\\"font-weight: 400;\\\">approach is preferred if you need to use a distance function as part of your scoring method. On small datasets, the performance impact of brute force kNN may not be as consequential and can potentially provide more accurate results. In this case, one can use the custom<\\\/span> <a href=\\\"https:\\\/\\\/opensearch.org\\\/docs\\\/2.6\\\/search-plugins\\\/knn\\\/knn-score-script\\\/\\\"><i><span style=\\\"font-weight: 400;\\\">script scoring<\\\/span><\\\/i><\\\/a><span style=\\\"font-weight: 400;\\\"> approach with a pre-filter and brute force kNN instead of approximate kNN and post-filter.<\\\/span><\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"aa880cb\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"d105840\",\"elType\":\"widget\",\"settings\":{\"title\":\"Model Selection and Fine-Tuning\",\"size\":\"large\"},\"elements\":[],\"widgetType\":\"heading\"},{\"id\":\"afdaf41\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p data-renderer-start-pos=\\\"8672\\\">Since our queries and the corpus are about the same length, we decided to use a <em data-renderer-mark=\\\"true\\\"><span id=\\\"7b4ed8fc-ebc6-4137-8c17-14b67418925c\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"7b4ed8fc-ebc6-4137-8c17-14b67418925c\\\">symmetric semantic search<\\\/span><\\\/em><span id=\\\"7b4ed8fc-ebc6-4137-8c17-14b67418925c\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"7b4ed8fc-ebc6-4137-8c17-14b67418925c\\\"> <\\\/span>to have the ability to do two-way matching between resumes and job descriptions. The pre-trained model dimensionality and statistics can be found <a href=\\\"https:\\\/\\\/www.sbert.net\\\/docs\\\/pretrained_models.html\\\">here<\\\/a>.\\u00a0 W<span id=\\\"cfc6e278-eefb-4c9b-883f-fcf147aabcbb\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"cfc6e278-eefb-4c9b-883f-fcf147aabcbb\\\">e started our <\\\/span>experiments with <code class=\\\"code css-z5oxh7\\\" data-renderer-mark=\\\"true\\\">all-MiniLM-L6-v2<\\\/code> and <code class=\\\"code css-z5oxh7\\\" data-renderer-mark=\\\"true\\\">all-MiniLM-L12-v2<\\\/code> models with dimensions <code class=\\\"code css-z5oxh7\\\" data-renderer-mark=\\\"true\\\">384<\\\/code>.<\\\/p><p data-renderer-start-pos=\\\"9032\\\">To evaluate the models, we created a small dataset with job descriptions, resumes, and <span id=\\\"2d4a2bad-c28c-4f00-8881-fd3d0078e4ef\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"2d4a2bad-c28c-4f00-8881-fd3d0078e4ef\\\">the expected <\\\/span>cosine similarity (.9 for good pairs and .1 for poor pairs). We then generated the embeddings and ran brute force kNN, recording the number of documents that appear in the result set with the expected rank. The results were evaluated with <code class=\\\"code css-z5oxh7\\\" data-renderer-mark=\\\"true\\\">top_1<\\\/code> and <code class=\\\"code css-z5oxh7\\\" data-renderer-mark=\\\"true\\\">top_k<\\\/code> accuracy<span id=\\\"ac730cca-7231-4b68-8f9b-c40b1723e7b4\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"ac730cca-7231-4b68-8f9b-c40b1723e7b4\\\"> <\\\/span><code class=\\\"code css-z5oxh7\\\" data-renderer-mark=\\\"true\\\"><span id=\\\"ac730cca-7231-4b68-8f9b-c40b1723e7b4\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"ac730cca-7231-4b68-8f9b-c40b1723e7b4\\\">\\u2208[0, 1]<\\\/span><\\\/code>. In the future, we would like to extend our evaluation utility to use the normalized discounted cumulative gain (NDCG) method.<\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"773fcef\",\"elType\":\"widget\",\"settings\":{\"image\":{\"url\":\"https:\\\/\\\/kmwllccom.stage.site\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/finetune.png\",\"id\":28517,\"alt\":\"\",\"source\":\"library\"}},\"elements\":[],\"widgetType\":\"image\"},{\"id\":\"7e2ca06\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"6071032\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p data-renderer-start-pos=\\\"9535\\\">To<span id=\\\"257698f3-5e4f-462a-a946-977895a3c205\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"257698f3-5e4f-462a-a946-977895a3c205\\\"> fine-tune<\\\/span> our models, we followed the example from the <a href=\\\"https:\\\/\\\/www.sbert.net\\\/docs\\\/training\\\/overview.html\\\">SBERT documentation<\\\/a>. \\u00a0The models were trained by creating (job_description, resume, score) tuples and using cosine similarity loss for <code class=\\\"code css-z5oxh7\\\" data-renderer-mark=\\\"true\\\">n<\\\/code> number of epochs. From our experiments, the training data's size and quality are essential for successful <span id=\\\"43c2f4a0-f133-47df-adc8-35d914e9e49a\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"43c2f4a0-f133-47df-adc8-35d914e9e49a\\\">tuning<\\\/span>, and a large <span id=\\\"48eade7c-958d-46f0-95db-9e54cb271a99\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"48eade7c-958d-46f0-95db-9e54cb271a99\\\">number of training epochs <\\\/span>is required for the model to return <code class=\\\"code css-z5oxh7\\\" data-renderer-mark=\\\"true\\\">top_k<\\\/code> correct results. The table above demonstrates the improvement of the evaluation scores for models trained for 50 and <span id=\\\"b2dc7773-60c4-4bef-b61c-cc71f1d92c77\\\" data-renderer-mark=\\\"true\\\" data-mark-type=\\\"annotation\\\" data-mark-annotation-type=\\\"inlineComment\\\" data-id=\\\"b2dc7773-60c4-4bef-b61c-cc71f1d92c77\\\">100 epochs.<\\\/span><\\\/p><p data-renderer-start-pos=\\\"10055\\\">Below is the documentation for the fine-tuning utility.<\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"c6f4fb0\",\"elType\":\"widget\",\"settings\":{\"language\":\"\",\"code\":\"usage: tune.py [-h] -f FILE -o OUTPUT [-m MODEL] [-e EPOCHS] [-d DEVICE]\\r\\n\\r\\nSentenceTransformer tuning utility\\r\\n\\r\\noptional arguments:\\r\\n  -h, --help            show this help message and exit\\r\\n  -f FILE, --file FILE  path to csv file with training data\\r\\n  -o OUTPUT, --output OUTPUT\\r\\n                        output directory for the trained model\\r\\n  -m MODEL, --model MODEL\\r\\n                        base model name or path\\r\\n  -e EPOCHS, --epochs EPOCHS\\r\\n                        number of epochs\\r\\n  -d DEVICE, --device DEVICE\\r\\n                        device to use (\\\"cuda\\\" \\\/ \\\"cpu\\\"). If None, checks if a\\r\\n                        GPU can be used.\",\"line_numbers\":\"\"},\"elements\":[],\"widgetType\":\"code-highlight\"},{\"id\":\"83e3828\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"4107101\",\"elType\":\"widget\",\"settings\":{\"title\":\"Future Work\",\"size\":\"large\"},\"elements\":[],\"widgetType\":\"heading\"},{\"id\":\"ab611e1\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p><span style=\\\"font-weight: 400;\\\">The next step is to evaluate the impact to relevancy of using vector search The Home Depot dataset from <\\\/span><a href=\\\"https:\\\/\\\/www.kaggle.com\\\/competitions\\\/home-depot-product-search-relevance\\\"><span style=\\\"font-weight: 400;\\\">Kaggle<\\\/span><\\\/a><span style=\\\"font-weight: 400;\\\"> is a good candidate for test data because it includes many query\\\/result document pairs that are labeled (numerically ranked as relevant or irrelevant). By training and evaluating our application on this data set, we can further investigate whether pure vector search provides an improvement compared to lexical search.<\\\/span><\\\/p><p><span style=\\\"font-weight: 400;\\\">We will also explore utilizing <\\\/span><a href=\\\"https:\\\/\\\/quepid.com\\\/\\\"><span style=\\\"font-weight: 400;\\\">Quepid<\\\/span><\\\/a><span style=\\\"font-weight: 400;\\\"> to visualize queries, search results, and their scores for a vector search application. Finally, we would like to create a user interface that provides traditional search options like filtering &amp; aggregations; simplifies the queries\\u2019 embedding generation; and displays the results in a readable format.<\\\/span><\\\/p>\"},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"c438f51\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"}],\"isInner\":false},{\"id\":\"07e9b39\",\"elType\":\"column\",\"settings\":{\"_column_size\":33,\"_inline_size\":9.664,\"hide_tablet\":\"hidden-tablet\",\"hide_mobile\":\"hidden-mobile\",\"thegem_column_breakpoints_list\":[]},\"elements\":[],\"isInner\":false},{\"id\":\"127fbac\",\"elType\":\"column\",\"settings\":{\"_column_size\":33,\"_inline_size\":25,\"_inline_size_tablet\":100,\"thegem_column_breakpoints_list\":[]},\"elements\":[{\"id\":\"66cf9a7\",\"elType\":\"widget\",\"settings\":{\"title\":\"Share Post\",\"size\":\"small\",\"header_size\":\"div\",\"thegem_heading_style\":\"title-h6\"},\"elements\":[],\"widgetType\":\"heading\"},{\"id\":\"da075ed\",\"elType\":\"widget\",\"settings\":{\"pinterest\":\"\",\"tumblr\":\"\",\"telegram\":\"\",\"whatsapp\":\"\",\"viber\":\"\",\"xing\":\"\",\"icons_color\":\"#00DEFF\"},\"elements\":[],\"widgetType\":\"thegem-social-sharing\"},{\"id\":\"7540914\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"fe2ab3d\",\"elType\":\"widget\",\"settings\":{\"title\":\"More From the KMW Blog\",\"size\":\"small\",\"header_size\":\"div\",\"thegem_heading_style\":\"title-h6\"},\"elements\":[],\"widgetType\":\"heading\"},{\"id\":\"0746449\",\"elType\":\"widget\",\"settings\":{\"thegem_elementor_preset\":\"compact-tiny-2\",\"source\":[\"posts\"],\"show_separator\":\"\",\"show_comments\":\"\",\"readmore_button_text\":\"Read More\",\"loadmore_button_text\":\"Load More\",\"caption_categories_in_text\":\"in \",\"caption_author_by_text\":\"By\",\"source_type\":\"custom\",\"pagination_type\":\"numbers\"},\"elements\":[],\"widgetType\":\"thegem-bloglist\"}],\"isInner\":false}],\"isInner\":false},{\"id\":\"bb4f855\",\"elType\":\"section\",\"settings\":{\"content_width\":{\"unit\":\"px\",\"size\":1260,\"sizes\":[]},\"gap\":\"no\"},\"elements\":[{\"id\":\"c70a9ce\",\"elType\":\"column\",\"settings\":{\"_column_size\":100,\"_inline_size\":null,\"thegem_column_breakpoints_list\":[]},\"elements\":[{\"id\":\"7447ea9\",\"elType\":\"widget\",\"settings\":[],\"elements\":[],\"widgetType\":\"spacer\"},{\"id\":\"50d9341\",\"elType\":\"widget\",\"settings\":{\"prev_label\":\"Previous Post\",\"next_label\":\"Next Post\",\"show_borders\":\"\",\"title_typography_typography\":\"custom\",\"title_typography_font_size\":{\"unit\":\"px\",\"size\":14,\"sizes\":[]},\"title_typography_font_weight\":\"700\",\"__globals__\":{\"arrow_color\":\"globals\\\/colors?id=primary\",\"label_color\":\"globals\\\/colors?id=secondary\"},\"arrow\":\"fa fa-caret-left\",\"show_arrow\":\"\"},\"elements\":[],\"widgetType\":\"post-navigation\"}],\"isInner\":false}],\"isInner\":false}]"],"_zilla_likes":["0"],"_yoast_wpseo_primary_category":["36"],"_yoast_wpseo_estimated-reading-time-minutes":["10"],"_yoast_wpseo_wordproof_timestamp":[""],"_yoast_wpseo_content_score":["30"],"_wp_old_date":["2023-02-16"],"_wp_old_slug":["finding-talent-with-vector-search"],"_yoast_wpseo_title":["%%title%% %%sep%% %%sitename%%"],"_yoast_wpseo_metadesc":["We created a POC vector search application using OpenSearch. We discuss what we did to get it working and investigate how popular search features can be utilized in vector search."],"_yoast_wpseo_canonical":["https:\/\/kmwllc.com\/index.php\/2023\/03\/29\/building-vector-search-on-opensearch\/"],"thegem_post_item_gallery_images":["28515,28516,28517,28528,28977"],"_thumbnail_id":["29678"],"_aioseo_title":[null],"_aioseo_description":[null],"_aioseo_keywords":["a:0:{}"],"_aioseo_og_title":[null],"_aioseo_og_description":[null],"_aioseo_og_article_section":[""],"_aioseo_og_article_tags":["a:0:{}"],"_aioseo_twitter_title":[null],"_aioseo_twitter_description":[null],"_elementor_controls_usage":["a:13:{s:9:\"post-info\";a:3:{s:5:\"count\";i:1;s:15:\"control_percent\";i:0;s:8:\"controls\";a:2:{s:7:\"content\";a:1:{s:12:\"section_icon\";a:1:{s:9:\"icon_list\";i:1;}}s:5:\"style\";a:1:{s:18:\"section_text_style\";a:1:{s:26:\"icon_typography_typography\";i:1;}}}}s:7:\"heading\";a:3:{s:5:\"count\";i:15;s:15:\"control_percent\";i:1;s:8:\"controls\";a:2:{s:7:\"general\";a:1:{s:11:\"__dynamic__\";a:1:{s:5:\"count\";i:1;}}s:7:\"content\";a:1:{s:13:\"section_title\";a:4:{s:5:\"title\";i:15;s:11:\"header_size\";i:8;s:20:\"thegem_heading_style\";i:3;s:4:\"size\";i:14;}}}}s:10:\"author-box\";a:3:{s:5:\"count\";i:1;s:15:\"control_percent\";i:3;s:8:\"controls\";a:3:{s:7:\"content\";a:1:{s:19:\"section_author_info\";a:5:{s:6:\"source\";i:1;s:13:\"author_avatar\";i:1;s:11:\"author_name\";i:1;s:15:\"author_name_tag\";i:1;s:10:\"author_bio\";i:1;}}s:5:\"style\";a:2:{s:19:\"section_image_style\";a:4:{s:20:\"image_vertical_align\";i:1;s:12:\"image_border\";i:1;s:18:\"image_border_width\";i:1;s:19:\"image_border_radius\";i:1;}s:18:\"section_text_style\";a:1:{s:8:\"name_gap\";i:1;}}s:8:\"advanced\";a:1:{s:14:\"_section_style\";a:3:{s:8:\"_padding\";i:1;s:15:\"_padding_tablet\";i:1;s:15:\"_padding_mobile\";i:1;}}}}s:7:\"divider\";a:3:{s:5:\"count\";i:1;s:15:\"control_percent\";i:0;s:8:\"controls\";a:1:{s:5:\"style\";a:1:{s:21:\"section_divider_style\";a:2:{s:6:\"weight\";i:1;s:3:\"gap\";i:1;}}}}s:6:\"spacer\";a:3:{s:5:\"count\";i:21;s:15:\"control_percent\";i:0;s:8:\"controls\";a:0:{}}s:11:\"text-editor\";a:3:{s:5:\"count\";i:17;s:15:\"control_percent\";i:0;s:8:\"controls\";a:1:{s:7:\"content\";a:1:{s:14:\"section_editor\";a:1:{s:6:\"editor\";i:17;}}}}s:5:\"image\";a:3:{s:5:\"count\";i:2;s:15:\"control_percent\";i:0;s:8:\"controls\";a:1:{s:7:\"content\";a:1:{s:13:\"section_image\";a:3:{s:5:\"image\";i:2;s:14:\"caption_source\";i:1;s:7:\"caption\";i:1;}}}}s:14:\"code-highlight\";a:3:{s:5:\"count\";i:8;s:15:\"control_percent\";i:1;s:8:\"controls\";a:1:{s:7:\"content\";a:1:{s:15:\"section_content\";a:3:{s:8:\"language\";i:8;s:4:\"code\";i:8;s:12:\"line_numbers\";i:8;}}}}s:6:\"column\";a:3:{s:5:\"count\";i:4;s:15:\"control_percent\";i:0;s:8:\"controls\";a:2:{s:6:\"layout\";a:1:{s:6:\"layout\";a:3:{s:12:\"_inline_size\";i:4;s:19:\"_inline_size_tablet\";i:2;s:21:\"space_between_widgets\";i:1;}}s:8:\"advanced\";a:1:{s:19:\"_section_responsive\";a:2:{s:11:\"hide_tablet\";i:1;s:11:\"hide_mobile\";i:1;}}}}s:21:\"thegem-social-sharing\";a:3:{s:5:\"count\";i:1;s:15:\"control_percent\";i:2;s:8:\"controls\";a:2:{s:7:\"content\";a:1:{s:13:\"section_icons\";a:6:{s:9:\"pinterest\";i:1;s:6:\"tumblr\";i:1;s:8:\"telegram\";i:1;s:8:\"whatsapp\";i:1;s:5:\"viber\";i:1;s:4:\"xing\";i:1;}}s:5:\"style\";a:1:{s:5:\"Style\";a:1:{s:11:\"icons_color\";i:1;}}}}s:15:\"thegem-bloglist\";a:3:{s:5:\"count\";i:1;s:15:\"control_percent\";i:0;s:8:\"controls\";a:1:{s:7:\"content\";a:3:{s:14:\"section_layout\";a:1:{s:23:\"thegem_elementor_preset\";i:1;}s:12:\"section_blog\";a:1:{s:6:\"source\";i:1;}s:15:\"section_caption\";a:2:{s:14:\"show_separator\";i:1;s:13:\"show_comments\";i:1;}}}}s:7:\"section\";a:3:{s:5:\"count\";i:2;s:15:\"control_percent\";i:0;s:8:\"controls\";a:1:{s:6:\"layout\";a:2:{s:14:\"section_layout\";a:2:{s:13:\"content_width\";i:2;s:3:\"gap\";i:2;}s:17:\"section_structure\";a:1:{s:9:\"structure\";i:1;}}}}s:15:\"post-navigation\";a:3:{s:5:\"count\";i:1;s:15:\"control_percent\";i:2;s:8:\"controls\";a:2:{s:7:\"content\";a:1:{s:31:\"section_post_navigation_content\";a:5:{s:10:\"prev_label\";i:1;s:10:\"next_label\";i:1;s:12:\"show_borders\";i:1;s:5:\"arrow\";i:1;s:10:\"show_arrow\";i:1;}}s:5:\"style\";a:1:{s:11:\"title_style\";a:3:{s:27:\"title_typography_typography\";i:1;s:26:\"title_typography_font_size\";i:1;s:28:\"title_typography_font_weight\";i:1;}}}}}"],"_elementor_css":["a:6:{s:4:\"time\";i:1775577488;s:5:\"fonts\";a:0:{}s:5:\"icons\";a:0:{}s:20:\"dynamic_elements_ids\";a:1:{i:0;s:7:\"121d3ee\";}s:6:\"status\";s:4:\"file\";i:0;s:0:\"\";}"],"_elementor_page_assets":["a:2:{s:6:\"styles\";a:12:{i:0;s:16:\"widget-post-info\";i:1;s:16:\"widget-icon-list\";i:2;s:26:\"elementor-icons-fa-regular\";i:3;s:24:\"elementor-icons-fa-solid\";i:4;s:14:\"widget-heading\";i:5;s:17:\"widget-author-box\";i:6;s:14:\"widget-divider\";i:7;s:13:\"widget-spacer\";i:8;s:12:\"widget-image\";i:9;s:21:\"widget-code-highlight\";i:10;s:15:\"thegem-bloglist\";i:11;s:22:\"widget-post-navigation\";}s:7:\"scripts\";a:10:{i:0;s:18:\"elementor-frontend\";i:1;s:12:\"prismjs_core\";i:2;s:14:\"prismjs_loader\";i:3;s:17:\"prismjs_normalize\";i:4;s:17:\"highlight_handler\";i:5;s:25:\"prismjs_copy_to_clipboard\";i:6;s:23:\"thegem-items-animations\";i:7;s:11:\"thegem-blog\";i:8;s:19:\"thegem-blog-isotope\";i:9;s:15:\"post-navigation\";}}"],"_elementor_element_cache":["{\"timeout\":1777732453,\"value\":{\"content\":\"\\t\\t<section class=\\\"elementor-section elementor-top-section elementor-element elementor-element-593706b elementor-section-boxed elementor-section-height-default elementor-section-height-default\\\" data-id=\\\"593706b\\\" data-element_type=\\\"section\\\" data-e-type=\\\"section\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-container elementor-column-gap-no\\\"><div class=\\\"elementor-row\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-bc55d67\\\" data-id=\\\"bc55d67\\\" data-element_type=\\\"column\\\" data-e-type=\\\"column\\\">\\n\\t\\t\\t<div class=\\\"elementor-widget-wrap elementor-element-populated\\\">\\n\\t\\t\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6Ijk1NjMyMDMiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJpY29uX2xpc3QiOlt7InNlbGVjdGVkX2ljb24iOnsidmFsdWUiOiJmYXMgZmEtY2FsZW5kYXIiLCJsaWJyYXJ5IjoiZmEtc29saWQifSwiX2lkIjoiOTFhMGY1MiIsImN1c3RvbV9kYXRlX2Zvcm1hdCI6IkYgaiwgWSIsImN1c3RvbV90aW1lX2Zvcm1hdCI6Imc6aSBhIiwibGluayI6IiIsInNob3dfaWNvbiI6Im5vbmUifV0sImljb25fdHlwb2dyYXBoeV90eXBvZ3JhcGh5IjoiY3VzdG9tIiwiX19nbG9iYWxzX18iOnsidGV4dF9jb2xvciI6Imdsb2JhbHNcL2NvbG9ycz9pZD1wcmltYXJ5In19LCJlbGVtZW50cyI6W10sIndpZGdldFR5cGUiOiJwb3N0LWluZm8ifQ==\\\"][elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6IjEyMWQzZWUiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJ0aXRsZSI6IkFkZCBZb3VyIEhlYWRpbmcgVGV4dCBIZXJlIiwiaGVhZGVyX3NpemUiOiJkaXYiLCJ0aGVnZW1faGVhZGluZ19zdHlsZSI6InN0eWxlZC1zdWJ0aXRsZSIsIl9fZHluYW1pY19fIjp7InRpdGxlIjoiW2VsZW1lbnRvci10YWcgaWQ9XCI3YjZhZDE0XCIgbmFtZT1cInRoZWdlbS1wb3N0LWV4Y2VycHRcIiBzZXR0aW5ncz1cIiU3QiU3RFwiXSJ9fSwiZWxlbWVudHMiOltdLCJ3aWRnZXRUeXBlIjoiaGVhZGluZyJ9\\\"][elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6ImMxMTNjYmYiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJzb3VyY2UiOiJjdXN0b20iLCJhdXRob3JfYXZhdGFyIjp7InVybCI6Imh0dHBzOlwvXC9rbXdsbGMuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIzXC8wMVwvSmFrZS5wbmciLCJpZCI6Mjg1MjgsImFsdCI6IiIsInNvdXJjZSI6ImxpYnJhcnkifSwiYXV0aG9yX25hbWUiOiJKYWtlIEhvcmJhbiIsImF1dGhvcl9uYW1lX3RhZyI6ImRpdiIsImF1dGhvcl9iaW8iOiJTZWFyY2ggRW5naW5lZXIgYXQgS01XIFRlY2hub2xvZ3kiLCJsaW5rX3RleHQiOiJBbGwgUG9zdHMiLCJpbWFnZV92ZXJ0aWNhbF9hbGlnbiI6InRvcCIsImltYWdlX2JvcmRlciI6InllcyIsImltYWdlX2JvcmRlcl93aWR0aCI6eyJ1bml0IjoicHgiLCJzaXplIjozLCJzaXplcyI6W119LCJpbWFnZV9ib3JkZXJfcmFkaXVzIjp7InVuaXQiOiJweCIsInNpemUiOjEwMCwic2l6ZXMiOltdfSwibmFtZV9nYXAiOnsidW5pdCI6InB4Iiwic2l6ZSI6MCwic2l6ZXMiOltdfSwiX19nbG9iYWxzX18iOnsiaW1hZ2VfYm9yZGVyX2NvbG9yIjoiZ2xvYmFsc1wvY29sb3JzP2lkPTQyOGYyNzciLCJiaW9fY29sb3IiOiJnbG9iYWxzXC9jb2xvcnM\\\/aWQ9c2Vjb25kYXJ5In0sIl9wYWRkaW5nIjp7InVuaXQiOiJlbSIsInRvcCI6IjIiLCJyaWdodCI6IjIiLCJib3R0b20iOiIyIiwibGVmdCI6IjIiLCJpc0xpbmtlZCI6dHJ1ZX0sIl9wYWRkaW5nX3RhYmxldCI6eyJ1bml0IjoiZW0iLCJ0b3AiOiIiLCJyaWdodCI6IiIsImJvdHRvbSI6IiIsImxlZnQiOiIiLCJpc0xpbmtlZCI6dHJ1ZX0sIl9wYWRkaW5nX21vYmlsZSI6eyJ1bml0IjoiZW0iLCJ0b3AiOiIiLCJyaWdodCI6IiIsImJvdHRvbSI6IiIsImxlZnQiOiIiLCJpc0xpbmtlZCI6dHJ1ZX19LCJlbGVtZW50cyI6W10sIndpZGdldFR5cGUiOiJhdXRob3ItYm94In0=\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-8baabb4 elementor-widget-divider--view-line flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-divider\\\" data-id=\\\"8baabb4\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"divider.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-divider\\\">\\n\\t\\t\\t<span class=\\\"elementor-divider-separator\\\">\\n\\t\\t\\t\\t\\t\\t<\\\/span>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-bb3fe40 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"bb3fe40\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-120ff0e flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\\\" data-id=\\\"120ff0e\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"heading.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t<h2 class=\\\"elementor-heading-title elementor-size-large\\\">Introduction<\\\/h2>\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6IjJkODg5MTgiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cD48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+VmVjdG9yIHNlYXJjaCBoYXMgdGhlIHBvdGVudGlhbCB0byB1bmNvdmVyIHRoZSBzZW1hbnRpYyBtZWFuaW5nIG9mIGEgYm9keSBvZiB0ZXh0IGFuZCBwcm92aWRlIGFuIGFiaWxpdHkgdG8gbWF0Y2ggZG9jdW1lbnRzIGZyb20gZGlmZmVyZW50IGRvbWFpbnMuIFdlIHRob3VnaHQgYW4gaW50ZXJlc3RpbmcgdXNlIGNhc2UgZm9yIHNlbWFudGljIHVuZGVyc3RhbmRpbmdcL3ZlY3RvciBzZWFyY2ggd291bGQgYmUgdGFsZW50IGFjcXVpc2l0aW9uIFx1MjAxMyBtYXRjaGluZyBhIGpvYiBkZXNjcmlwdGlvbiB3aXRoIGEgY2FuZGlkYXRlXHUyMDE5cyByZXN1bWUgYW5kIHZpY2UgdmVyc2EuIFRvIHNhdGlzZnkgdGhpcyB1c2UgY2FzZSwgd2UgY3JlYXRlZCBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiBhbiBPcGVuU2VhcmNoIGFwcGxpY2F0aW9uIGFibGUgdG8gcmV0cmlldmUgZG9jdW1lbnRzIGJhc2VkIG9uIGstTmVhcmVzdCBOZWlnaGJvcnMgc2VhcmNoIGJldHdlZW4gYSBqb2IgZGVzY3JpcHRpb24gZW1iZWRkaW5nIGFuZCByZXN1bWUgZW1iZWRkaW5nLjxcL3NwYW4+PFwvcD48cD48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+T3VyIG1haW4gZ29hbCB3YXMgdG8gY3JlYXRlIGEgdmVjdG9yIHNlYXJjaCBhcHBsaWNhdGlvbiB0aGF0IHdlIGNhbiB1c2UgdG8gZXZhbHVhdGUgdGhlIHRlY2hub2xvZ3kgYW5kIGRvY3VtZW50IHdoYXRcdTIwMTlzIG5lY2Vzc2FyeSB0byBnZXQgaXQgd29ya2luZy5cdTAwYTAgV2Ugd2FudGVkIHRvIHVuY292ZXIgaG93IHZlY3RvciBzZWFyY2ggbWF5IG9yIG1heSBub3Qgd29yayB3aXRoIHN0YW5kYXJkIGxleGljYWwgc2VhcmNoIGZlYXR1cmVzIGxpa2UgZmFjZXRpbmcsIHNvcnRpbmcgYW5kIGZpbHRlcmluZy5cdTAwYTAgV2Ugd2VyZSBhbHNvIGludGVyZXN0ZWQgaW4gc29sdmluZyBzb21lIG9mIHRoZSBvcGVyYXRpb25hbCBjaGFsbGVuZ2VzIG9mIHdvcmtpbmcgd2l0aCBhIHZlY3RvciBzZWFyY2ggYXBwbGljYXRpb24gc3VjaCBhcyBob3cgdG8gZ2VuZXJhdGUgZW1iZWRkaW5ncyBhbmQgaG93IHRvIGZpbmUtdHVuZSBzZW50ZW5jZSBlbWJlZGRpbmcgbW9kZWxzLiA8XC9zcGFuPjxcL3A+In0sImVsZW1lbnRzIjpbXSwid2lkZ2V0VHlwZSI6InRleHQtZWRpdG9yIn0=\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-aa638d6 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"aa638d6\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-05a3dcf flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\\\" data-id=\\\"05a3dcf\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"heading.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t<h2 class=\\\"elementor-heading-title elementor-size-large\\\">Ingest Architecture<\\\/h2>\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6ImVlNGQ0YTIiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cD5UbyBsZXZlcmFnZSBhcHByb3hpbWF0ZSBrTk4gc2VhcmNoIGluIE9wZW5TZWFyY2gsIHNlbnRlbmNlIGVtYmVkZGluZ3MgbXVzdCBiZSBpbmNsdWRlZCBhcyBkb2N1bWVudCBmaWVsZHMgZHVyaW5nIGluZGV4aW5nIGFuZCBhcyBhIHNlYXJjaCBwYXJhbWV0ZXIgZHVyaW5nIHF1ZXJ5aW5nLiBNb3Jlb3ZlciwgYm90aCBvZiB0aGVzZSB2ZWN0b3JzIG11c3QgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb25hbGl0eSBhbmQgYmUgZ2VuZXJhdGVkIGJ5IHRoZSBzYW1lIGZpbmUtdHVuZWQgbW9kZWwuIFQ8c3BhbiBpZD1cImRiNmRiYzMwLTE4YzUtNGNkYi1hMGFkLTlmMjkwNmU2ZmIzMVwiIGRhdGEtcmVuZGVyZXItbWFyaz1cInRydWVcIiBkYXRhLW1hcmstdHlwZT1cImFubm90YXRpb25cIiBkYXRhLW1hcmstYW5ub3RhdGlvbi10eXBlPVwiaW5saW5lQ29tbWVudFwiIGRhdGEtaWQ9XCJkYjZkYmMzMC0xOGM1LTRjZGItYTBhZC05ZjI5MDZlNmZiMzFcIj5oZXNlIDxcL3NwYW4+cmVxdWlyZW1lbnRzIG1vdGl2YXRlZCB1cyB0byBjcmVhdGUgYSBSRVNUZnVsIHNlcnZpY2UgdG8gZ2VuZXJhdGUgZW1iZWRkaW5ncyBmb3IgYm90aCBkb2N1bWVudHMgKGF0IGluZ2VzdCB0aW1lKSBhbmQgcXVlcmllcyAoYXQgcXVlcnkgdGltZSkgdXNpbmcgYSBzZW50ZW5jZSB0cmFuc2Zvcm1lciBtb2RlbCBzdWNoIGFzIDxhIGhyZWY9XCJodHRwczpcL1wvd3d3LnNiZXJ0Lm5ldFwvXCI+U0JFUlQ8XC9hPi48XC9wPiJ9LCJlbGVtZW50cyI6W10sIndpZGdldFR5cGUiOiJ0ZXh0LWVkaXRvciJ9\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-3685a1f flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"3685a1f\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-1915b86 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-image\\\" data-id=\\\"1915b86\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"image.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<figure class=\\\"wp-caption\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<img width=\\\"1024\\\" height=\\\"358\\\" src=\\\"https:\\\/\\\/kmwllc.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/image-20221219-200928-1024x358.png\\\" class=\\\"attachment-large size-large wp-image-28516\\\" alt=\\\"\\\" srcset=\\\"https:\\\/\\\/kmwllc.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/image-20221219-200928-1024x358.png 1024w, https:\\\/\\\/kmwllc.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/image-20221219-200928-300x105.png 300w, https:\\\/\\\/kmwllc.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/image-20221219-200928-768x268.png 768w, https:\\\/\\\/kmwllc.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/image-20221219-200928-1536x537.png 1536w, https:\\\/\\\/kmwllc.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/image-20221219-200928.png 1571w\\\" sizes=\\\"(max-width: 1024px) 100vw, 1024px\\\" \\\/>\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<figcaption class=\\\"widget-image-caption wp-caption-text\\\">Architecture diagram<\\\/figcaption>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<\\\/figure>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-ab4e06d flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"ab4e06d\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-061630e flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\\\" data-id=\\\"061630e\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"heading.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t<h3 class=\\\"elementor-heading-title elementor-size-medium\\\">1. Embedding Service<\\\/h3>\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6IjY3NTFkYTAiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cD5UaGUgPHNwYW4gaWQ9XCJiZThmYTNiMy05NTU0LTRkMGMtODNiZC1hZjYyZjA5NmI2ZDFcIiBkYXRhLXJlbmRlcmVyLW1hcms9XCJ0cnVlXCIgZGF0YS1tYXJrLXR5cGU9XCJhbm5vdGF0aW9uXCIgZGF0YS1tYXJrLWFubm90YXRpb24tdHlwZT1cImlubGluZUNvbW1lbnRcIiBkYXRhLWlkPVwiYmU4ZmEzYjMtOTU1NC00ZDBjLTgzYmQtYWY2MmYwOTZiNmQxXCI+ZW1iZWRkPFwvc3Bhbj5pbmcgc2VydmljZSB3YXMgY3JlYXRlZCBpbiBQeXRob24gdXNpbmcgRmFzdEFQSSBhbmQgdGhlIDxhIGNsYXNzPVwiY3NzLXRncGwwMVwiIHRpdGxlPVwiaHR0cHM6XC9cL2h1Z2dpbmdmYWNlLmNvXC9kb2NzXC90cmFuc2Zvcm1lcnNcL2luZGV4XCIgaHJlZj1cImh0dHBzOlwvXC9odWdnaW5nZmFjZS5jb1wvZG9jc1wvdHJhbnNmb3JtZXJzXC9pbmRleFwiIGRhdGEtcmVuZGVyZXItbWFyaz1cInRydWVcIj5IdWdnaW5nIEZhY2U8XC9hPiB0cmFuc2Zvcm1lciBsaWJyYXJ5LiBXaGVuIHRoZSBzZXJ2aWNlIHN0YXJ0cywgPHNwYW4gaWQ9XCI3YWMxYzExYy1iOTlhLTRmNGUtYmFkNi0xNmExZjFhNjhmNzZcIiBkYXRhLXJlbmRlcmVyLW1hcms9XCJ0cnVlXCIgZGF0YS1tYXJrLXR5cGU9XCJhbm5vdGF0aW9uXCIgZGF0YS1tYXJrLWFubm90YXRpb24tdHlwZT1cImlubGluZUNvbW1lbnRcIiBkYXRhLWlkPVwiN2FjMWMxMWMtYjk5YS00ZjRlLWJhZDYtMTZhMWYxYTY4Zjc2XCI+aXQgbG9hZHMgdGhlIHByZS10cmFpbmVkIG1vZGVscyBsaWtlIFNCRVJUIGZyb20gSHVnZ2luZyBGYWNlPFwvc3Bhbj4gb3IgZnJvbSBsb2NhbCBmaWxlcyBiYXNlZCBvbiBhIGNvbmZpZ3VyYWJsZSBsaXN0LiBUaGUgc2VydmljZSBhY2NlcHRzIHRleHQgYW5kIHJldHVybnMgZW1iZWRkaW5ncyBhdCBpbmdlc3QgdGltZSBmb3IgdGhlIGRvY3VtZW50IGFuZCBhdCBxdWVyeSB0aW1lIGZvciB0aGUgcXVlcnkuXHUwMGEwIEEgcmVxdWVzdCBjYW4gc3BlY2lmeSB3aGljaCBtb2RlbCBzaG91bGQgYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZW1iZWRkaW5ncy4gT3RoZXJ3aXNlLCBhIGRlZmF1bHQgbW9kZWwgaXMgdXNlZC48c3BhbiBpZD1cIjBhMzRkYzQxLTA3NTMtNGJhYy1iYTRmLTVmMTE2NzIxNWJhY1wiIGRhdGEtcmVuZGVyZXItbWFyaz1cInRydWVcIiBkYXRhLW1hcmstdHlwZT1cImFubm90YXRpb25cIiBkYXRhLW1hcmstYW5ub3RhdGlvbi10eXBlPVwiaW5saW5lQ29tbWVudFwiIGRhdGEtaWQ9XCIwYTM0ZGM0MS0wNzUzLTRiYWMtYmE0Zi01ZjExNjcyMTViYWNcIj5cdTAwYTA8XC9zcGFuPjxcL3A+In0sImVsZW1lbnRzIjpbXSwid2lkZ2V0VHlwZSI6InRleHQtZWRpdG9yIn0=\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-7fe9c56 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"7fe9c56\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-79b5fb9 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\\\" data-id=\\\"79b5fb9\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"heading.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t<h3 class=\\\"elementor-heading-title elementor-size-medium\\\">2. Lucille (ETL) Stage<\\\/h3>\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6IjQzM2IzYmYiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cD5Eb2N1bWVudHMgYXJlIGluZGV4ZWQgaW50byBPcGVuU2VhcmNoIHdpdGggPGEgaHJlZj1cImh0dHBzOlwvXC9iaXRidWNrZXQub3JnXC9rbXdsbGNcL2x1Y2lsbGVcL3NyY1wvbWFzdGVyXC9SRUFETUUubWRcIj5MdWNpbGxlPFwvYT4sIGFuIG9wZW4tc291cmNlIEphdmEgZnJhbWV3b3JrIGZvciBFVEwgcGlwZWxpbmVzIGNyZWF0ZWQgYnkgS01XIFRlY2hub2xvZ3kuXHUwMGEwIEFuIGVtYmVkZGluZyBzdGFnZSB3YXMgYWRkZWQgdG8gTHVjaWxsZSB0byBjb25uZWN0IHRvIHRoZSBlbWJlZGRpbmcgc2VydmljZSBhbmQgcmV0cmlldmUgdGhlIGVtYmVkZGluZ3MgZm9yIHRoZSBzcGVjaWZpZWQgZmllbGRzIGR1cmluZyBpbmRleGluZy4gVGhpcyBzdGFnZSBhbGxvd3Mgc3BlY2lmeWluZyBtdWx0aXBsZSBwYWlycyBvZiBmaWVsZCBtYXBwaW5ncyBhbmQgd2lsbCByZXRyaWV2ZSB0aGUgZW1iZWRkaW5ncyBmb3IgdGhlIHNvdXJjZSBmaWVsZHMgYW5kIGFkZCB0aGVtIHRvIHRoZSByZXNwZWN0aXZlIHRhcmdldCBmaWVsZHMuPFwvcD4ifSwiZWxlbWVudHMiOltdLCJ3aWRnZXRUeXBlIjoidGV4dC1lZGl0b3IifQ==\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-bd7aadf flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\\\" data-id=\\\"bd7aadf\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"code-highlight.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"prismjs-default copy-to-clipboard \\\">\\n\\t\\t\\t<pre data-line=\\\"\\\" class=\\\"highlight-height language- \\\">\\n\\t\\t\\t\\t<code readonly=\\\"true\\\" class=\\\"language-\\\">\\n\\t\\t\\t\\t\\t<xmp>pipelines: [\\r\\n  {\\r\\n    name: \\\"pipeline1\\\",\\r\\n    stages: [\\r\\n      {\\r\\n        class:\\\"com.kmwllc.lucille.stage.EmbedText\\\",\\r\\n        connection:\\\"http:\\\/\\\/127.0.0.1:8000\\\",\\r\\n        fieldMapping {\\r\\n          \\\"resume\\\": \\\"resume_embedded\\\",\\r\\n        }\\r\\n      }\\r\\n    ]\\r\\n  }\\r\\n]<\\\/xmp>\\n\\t\\t\\t\\t<\\\/code>\\n\\t\\t\\t<\\\/pre>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-c482338 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"c482338\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-2de8dd2 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\\\" data-id=\\\"2de8dd2\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"heading.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t<h3 class=\\\"elementor-heading-title elementor-size-medium\\\">3. OpenSearch <\\\/h3>\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6IjIyYjgyY2UiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cD5CZWZvcmUgaW5kZXhpbmcgdGhlIGRvY3VtZW50cywgd2UgbmVlZCB0byBlbmFibGUgdGhlIGtOTiBpbmRleCwgPHNwYW4gaWQ9XCJkYjBiNGU4Yy00MzJiLTRiNTAtOGU4NC01NDM3NGY3NjcxNmJcIiBkYXRhLXJlbmRlcmVyLW1hcms9XCJ0cnVlXCIgZGF0YS1tYXJrLXR5cGU9XCJhbm5vdGF0aW9uXCIgZGF0YS1tYXJrLWFubm90YXRpb24tdHlwZT1cImlubGluZUNvbW1lbnRcIiBkYXRhLWlkPVwiZGIwYjRlOGMtNDMyYi00YjUwLThlODQtNTQzNzRmNzY3MTZiXCI+c3BlY2lmeSB0aGUgZmllbGQgdHlwZSA8XC9zcGFuPmZvciBob2xkaW5nIHRoZSBlbWJlZGRpbmdzIGFzIDxjb2RlIGNsYXNzPVwiY29kZSBjc3MtejVveGg3XCIgZGF0YS1yZW5kZXJlci1tYXJrPVwidHJ1ZVwiPmtubl92ZWN0b3I8XC9jb2RlPiwgYW5kIHNldCB0aGUgZGltZW5zaW9uYWxpdHkgdG8gdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZW1iZWRkaW5ncyBnZW5lcmF0ZWQgYnkgdGhlIGxhbmd1YWdlIG1vZGVsIHVzZWQgYnkgdGhlIGVtYmVkZGluZyBzZXJ2aWNlIGR1cmluZyBpbmdlc3QuPFwvcD4ifSwiZWxlbWVudHMiOltdLCJ3aWRnZXRUeXBlIjoidGV4dC1lZGl0b3IifQ==\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-09d11ee flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\\\" data-id=\\\"09d11ee\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"code-highlight.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"prismjs-default copy-to-clipboard \\\">\\n\\t\\t\\t<pre data-line=\\\"\\\" class=\\\"highlight-height language- \\\">\\n\\t\\t\\t\\t<code readonly=\\\"true\\\" class=\\\"language-\\\">\\n\\t\\t\\t\\t\\t<xmp>{\\r\\n  \\\"settings\\\": {\\r\\n    \\\"index.knn\\\": true\\r\\n  },\\r\\n  \\\"mappings\\\": {\\r\\n    \\\"properties\\\": {\\r\\n      \\\"resume_embedded\\\": {\\r\\n        \\\"type\\\": \\\"knn_vector\\\",\\r\\n        \\\"dimension\\\": 384\\r\\n      }\\r\\n    }\\r\\n  }\\r\\n}<\\\/xmp>\\n\\t\\t\\t\\t<\\\/code>\\n\\t\\t\\t<\\\/pre>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-18e73cf flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"18e73cf\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6ImZlZDdkMmMiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cD48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+T3BlblNlYXJjaCBhbHNvIGFsbG93cyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgc3VjaCBhcyBzcGVjaWZ5aW5nIHRoZSBuZWFyZXN0IG5laWdoYm9ycyBpbmRleGluZyBhbGdvcml0aG0gcHJlZmVycmVkIGZvciB0aGUgZGF0YXNldCBhbmQgdGhlIHR5cGUgb2YgY29tcHV0aW5nIHJlc291cmNlcyBhdmFpbGFibGUgaW4gdGhlIGNsdXN0ZXIsIHdoaWNoIHlvdSBjYW4gdmlldyA8XC9zcGFuPjxhIGhyZWY9XCJodHRwczpcL1wvb3BlbnNlYXJjaC5vcmdcL2RvY3NcLzIuNlwvc2VhcmNoLXBsdWdpbnNcL2tublwva25uLWluZGV4XC9cIj48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+aGVyZTxcL3NwYW4+PFwvYT48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+LiA8XC9zcGFuPjxcL3A+In0sImVsZW1lbnRzIjpbXSwid2lkZ2V0VHlwZSI6InRleHQtZWRpdG9yIn0=\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-399e29d flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"399e29d\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6ImY5ZDNjZTIiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cD5PbmNlIHRoZSBkb2N1bWVudHMgYXJlIGluZGV4ZWQsIHdlIHdpbGwgYmUgcmVhZHkgdG8gbWFrZSBhbiBhcHByb3hpbWF0ZSBrTk4gcXVlcnkuPFwvcD4ifSwiZWxlbWVudHMiOltdLCJ3aWRnZXRUeXBlIjoidGV4dC1lZGl0b3IifQ==\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-ab2b6b7 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\\\" data-id=\\\"ab2b6b7\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"code-highlight.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"prismjs-default copy-to-clipboard \\\">\\n\\t\\t\\t<pre data-line=\\\"\\\" class=\\\"highlight-height language- \\\">\\n\\t\\t\\t\\t<code readonly=\\\"true\\\" class=\\\"language-\\\">\\n\\t\\t\\t\\t\\t<xmp>{\\r\\n  \\\"size\\\": 300,\\r\\n  \\\"query\\\": {\\r\\n    \\\"knn\\\": {\\r\\n      \\\"resume_embedded\\\": {\\r\\n        \\\"k\\\": 50,\\r\\n        \\\"vector\\\": [\\r\\n          -0.04631288722157478,\\r\\n          -0.03802000731229782,\\r\\n          ...\\r\\n        ]\\r\\n      }\\r\\n    }\\r\\n  }\\r\\n}<\\\/xmp>\\n\\t\\t\\t\\t<\\\/code>\\n\\t\\t\\t<\\\/pre>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-0b570f1 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"0b570f1\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-c8d115e flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\\\" data-id=\\\"c8d115e\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"heading.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t<h2 class=\\\"elementor-heading-title elementor-size-large\\\">Approximate KNN Search<\\\/h2>\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6IjVmMWMyMjIiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cD48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+QSBrTk4gc2VhcmNoIHF1ZXJ5IHRyYWRpdGlvbmFsbHkgdXNlcyBhIGJydXRlLWZvcmNlIGFwcHJvYWNoIHRvIGNvbXB1dGUgc2ltaWxhcml0eSwgd2hpY2ggcHJvZHVjZXMgZXhhY3QgcmVzdWx0cyBidXQgY2FuIGJlIHNsb3cgZm9yIGxhcmdlLCBoaWdoLWRpbWVuc2lvbmFsIGRhdGFzZXRzLiBBcHByb3hpbWF0ZSBrTk4gc2VhcmNoIG1ldGhvZHMgY2FuIGltcHJvdmUgZWZmaWNpZW5jeSBieSByZXN0cnVjdHVyaW5nIGluZGV4ZXMgYW5kIHJlZHVjaW5nIGRpbWVuc2lvbmFsaXR5LiBUaGlzIGFwcHJvYWNoIDxcL3NwYW4+PGk+PHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogNDAwO1wiPnJlZHVjZXMgdGhlIGFjY3VyYWN5PFwvc3Bhbj48XC9pPjxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDtcIj4gb2YgdGhlIHJlc3VsdHMgYnV0IGluY3JlYXNlcyBzZWFyY2ggcHJvY2Vzc2luZyBzcGVlZHMgc2lnbmlmaWNhbnRseS5cdTAwYTA8XC9zcGFuPjxcL3A+PHA+PHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogNDAwO1wiPk9wZW5TZWFyY2ggb2ZmZXJzIHNldmVyYWwgZGlmZmVyZW50IHNlYXJjaCBtZXRob2RzIHRoYXQgc3VwcG9ydCBhcHByb3hpbWF0ZSBrTk4uIElmIGEgc2VhcmNoIG1ldGhvZCBpcyBub3Qgc3BlY2lmaWVkIGF0IGluZGV4IGNyZWF0aW9uLCBPcGVuU2VhcmNoIHdpbGwgdXNlIHRoZSA8YSBocmVmPVwiaHR0cHM6XC9cL2dpdGh1Yi5jb21cL25tc2xpYlwvbm1zbGliXCI+bm1zbGliXHUwMGEwPFwvYT4gZW5naW5lIHRvIGNyZWF0ZSBIaWVyYXJjaGljYWwgTmF2aWdhYmxlIFNtYWxsIFdvcmxkIChITlNXKSBncmFwaHMuIEhOU1cgZ3JhcGhzIHN1cHBvcnQgbW9yZSBlZmZpY2llbnQgYXBwcm94aW1hdGUga05OIHNlYXJjaC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGFwcHJveGltYXRlIGtOTiBzZWFyY2ggaW4gT3BlblNlYXJjaCwgcmVmZXIgdG8gdGhlaXIgPFwvc3Bhbj48YSBocmVmPVwiaHR0cHM6XC9cL29wZW5zZWFyY2gub3JnXC9kb2NzXC8yLjZcL3NlYXJjaC1wbHVnaW5zXC9rbm5cL2FwcHJveGltYXRlLWtublwvXCI+PHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogNDAwO1wiPmRvY3VtZW50YXRpb24uPFwvc3Bhbj48XC9hPjxcL3A+In0sImVsZW1lbnRzIjpbXSwid2lkZ2V0VHlwZSI6InRleHQtZWRpdG9yIn0=\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-2c0366f flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"2c0366f\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-28dd4e5 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\\\" data-id=\\\"28dd4e5\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"heading.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t<h2 class=\\\"elementor-heading-title elementor-size-large\\\">Traditional Search Feature Support<\\\/h2>\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6IjBiODQ5MGUiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cD48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+Q29tcHV0aW5nIGZhY2V0c1wvYWdncmVnYXRpb25zLCBzb3J0aW5nLCBhbmQgZmlsdGVyaW5nIGFyZSBzb21lIG9mIHRoZSBtb3N0IGNvbW1vbiBzZWFyY2ggZmVhdHVyZXMgdXNlZCBpbiBsZXhpY2FsIHNlYXJjaC4gQXMgcGFydCBvZiBvdXIgUE9DLCB3ZSB3YW50ZWQgdG8gaW52ZXN0aWdhdGUgaG93IHRoZXNlIGZlYXR1cmVzIHdvcmtlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGtOTiBxdWVyaWVzLjxcL3NwYW4+PFwvcD4ifSwiZWxlbWVudHMiOltdLCJ3aWRnZXRUeXBlIjoidGV4dC1lZGl0b3IifQ==\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-9ae1ed4 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"9ae1ed4\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-09d0a5b flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\\\" data-id=\\\"09d0a5b\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"heading.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t<h2 class=\\\"elementor-heading-title elementor-size-medium\\\">Aggregations<\\\/h2>\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6Ijc3MzNhMjUiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cD48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+QXMgaXMgdHlwaWNhbCBpbiBsZXhpY2FsIHNlYXJjaCwgdGhlIGFnZ3JlZ2F0aW9uIHdpbGwgYmUgY29tcHV0ZWQgZm9yIHRoZSBkb2N1bWVudHMgaW4gdGhlIGFwcHJveGltYXRlIGtOTiBxdWVyeSByZXN1bHQgc2V0LiBIZXJlIGlzIGFuIGV4YW1wbGUgcXVlcnk6PFwvc3Bhbj48XC9wPiJ9LCJlbGVtZW50cyI6W10sIndpZGdldFR5cGUiOiJ0ZXh0LWVkaXRvciJ9\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-9a25ce8 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\\\" data-id=\\\"9a25ce8\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"code-highlight.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"prismjs-default copy-to-clipboard \\\">\\n\\t\\t\\t<pre data-line=\\\"\\\" class=\\\"highlight-height language- \\\">\\n\\t\\t\\t\\t<code readonly=\\\"true\\\" class=\\\"language-\\\">\\n\\t\\t\\t\\t\\t<xmp>{\\r\\n  \\\"size\\\":10,\\r\\n  \\\"aggregations\\\": {\\r\\n    \\\"category\\\": {\\r\\n      \\\"terms\\\": {\\r\\n        \\\"field\\\": \\\"category.keyword\\\"\\r\\n      }\\r\\n    }\\r\\n  },\\r\\n  \\\"query\\\": {\\r\\n    \\\"knn\\\": {\\r\\n      \\\"resume_embedded\\\": {\\r\\n        \\\"k\\\": 10\\r\\n        \\\"vector\\\": [\\r\\n             0.02731507644057274,\\r\\n             0.010414771735668182,\\r\\n            ...\\r\\n            ],\\r\\n               \\r\\n            }\\r\\n        }\\r\\n    }\\r\\n}\\r\\n<\\\/xmp>\\n\\t\\t\\t\\t<\\\/code>\\n\\t\\t\\t<\\\/pre>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-a1020f0 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"a1020f0\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-f035d5b flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\\\" data-id=\\\"f035d5b\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"heading.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t<h3 class=\\\"elementor-heading-title elementor-size-medium\\\">Sorting<\\\/h3>\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6Ijg4M2Q5NmMiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cD48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+a05OIHF1ZXJ5IHJlc3VsdHMgY2FuIGFsc28gYmUgc29ydGVkIGFjY29yZGluZyB0byBhIGtleXdvcmQgZmllbGQ6PFwvc3Bhbj48XC9wPiJ9LCJlbGVtZW50cyI6W10sIndpZGdldFR5cGUiOiJ0ZXh0LWVkaXRvciJ9\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-1283c8a flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\\\" data-id=\\\"1283c8a\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"code-highlight.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"prismjs-default copy-to-clipboard \\\">\\n\\t\\t\\t<pre data-line=\\\"\\\" class=\\\"highlight-height language- \\\">\\n\\t\\t\\t\\t<code readonly=\\\"true\\\" class=\\\"language-\\\">\\n\\t\\t\\t\\t\\t<xmp>{\\r\\n  \\\"size\\\":10,\\r\\n  \\\"sort\\\": [\\r\\n    {\\r\\n     \\\"category.keyword\\\": {\\r\\n      \\\"order\\\": \\\"asc\\\"\\r\\n      }\\r\\n    }\\r\\n  ],\\r\\n  \\\"query\\\": {\\r\\n    \\\"knn\\\": {\\r\\n      \\\"resume_embedded\\\": {\\r\\n        \\\"k\\\": 10\\r\\n        \\\"vector\\\": [\\r\\n             0.02731507644057274,\\r\\n             0.010414771735668182,\\r\\n            ...\\r\\n            ],\\r\\n            }\\r\\n        }\\r\\n    }\\r\\n}\\r\\n<\\\/xmp>\\n\\t\\t\\t\\t<\\\/code>\\n\\t\\t\\t<\\\/pre>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-ca1cb8b flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"ca1cb8b\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-02fbd3b flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\\\" data-id=\\\"02fbd3b\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"heading.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t<h3 class=\\\"elementor-heading-title elementor-size-medium\\\">Filters<\\\/h3>\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6IjI3ZWU5ZmYiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cD48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+VGhlIHR5cGljYWwgZmlsdGVyIGJlaGF2aW9yIGZvciBsZXhpY2FsIHF1ZXJpZXMgaXMgdG8gYXBwbHkgYSBmaWx0ZXIgYmVmb3JlIHRoZSBxdWVyeSBpcyBleGVjdXRlZCwgdGhlcmVieSBuYXJyb3dpbmcgdGhlIHNjb3BlIG9mIGRvY3VtZW50cyB0aGF0IG5lZWQgdG8gYmUgc2VhcmNoZWQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIG1vc3Qgc2VhcmNoIGVuZ2luZXMgYW5kIGdlbmVyYWxseSBrbm93biBhcyBhIFx1MjAxOHByZS1maWx0ZXIuXHUyMDE5IEZvciBhbiBPcGVuU2VhcmNoIGFwcHJveGltYXRlIEtOTiBxdWVyeSwgcHJlLWZpbHRlciBxdWVyaWVzIGFyZSBvbmx5IHN1cHBvcnRlZCBpZiB0aGUga05OIGluZGV4IGlzIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBMdWNlbmUgZW5naW5lIHRvIGJ1aWxkIEhOU1cgZ3JhcGhzLlx1MDBhMDxcL3NwYW4+PFwvcD48cD48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+QXMgd2UgcHJldmlvdXNseSBtZW50aW9uZWQsIHRoZSBkZWZhdWx0IGVuZ2luZSB1c2VkIHRvIGNvbnN0cnVjdCBITlNXIGdyYXBocyBpbiBPcGVuU2VhcmNoIGlzIG5tc2xpYiwgd2hpY2ggb25seSBzdXBwb3J0cyBwb3N0LWZpbHRlcmluZyBvZiByZXN1bHRzIHVzaW5nIHRoZSA8Y29kZT5wb3N0X2ZpbHRlcjxcL2NvZGU+IHBhcmFtZXRlci4gVGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQgd2hlbiBzZXR0aW5nIHVwIGEgdmVjdG9yIGluZGV4IGluIE9wZW5TZWFyY2gsIGFzIHBvc3QtZmlsdGVyaW5nIGNhbiBpbXBhY3Qgd2hhdCByZXN1bHRzIGFyZSBhY3R1YWxseSByZXR1cm5lZCBmb3IgYSBmaWx0ZXIgcXVlcnkuXHUwMGEwXHUwMGEwPFwvc3Bhbj48XC9wPjxwPjxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDtcIj5XaGVuIGEgcG9zdC1maWx0ZXIgcXVlcnkgaXMgZXhlY3V0ZWQsIHRoZSBrTk4gcXVlcnkgd2lsbCBiZSBjb21wdXRlZCBmaXJzdC4gVGhlbiB0aGUgZmlsdGVyIHdpbGwgYmUgYXBwbGllZCwgcG90ZW50aWFsbHkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiByZXR1cm5lZCBkb2N1bWVudHMuIEl0IGlzIGVzc2VudGlhbCB0byBrZWVwIHRoaXMgb3JkZXIgaW4gbWluZCB3aGVuIHNlbGVjdGluZyBwYXJhbWV0ZXJzIGZvciB0aGUgcXVlcnkuIEZvciBleGFtcGxlLCB3ZSBjYW4gaW5jcmVhc2UgdGhlIDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogNDAwO1wiPnNpemU8XC9zcGFuPjxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDtcIj4gYW5kIDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogNDAwO1wiPms8XC9zcGFuPjxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDtcIj4gcGFyYW1ldGVycyB0byBlbnN1cmUgdGhhdCB0aGUgcXVlcnkgcmV0dXJucyBhIHN1ZmZpY2llbnRseSBicm9hZCBzZXQgb2YgcmVzdWx0cyAoaS5lLiwgdG8gZW5zdXJlIHRoYXQgcmVjYWxsIGlzIGhpZ2ggZW5vdWdoKSBiZWZvcmUgdGhlIGZpbHRlciBpcyBhcHBsaWVkLiBJbiBtb3N0IGNhc2VzLCBpbmNyZWFzaW5nIDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogNDAwO1wiPms8XC9zcGFuPjxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDtcIj4gd2lsbCBpbXByb3ZlIHRoZSBhY2N1cmFjeSBvZiB0aGUgYXBwcm94aW1hdGUgay1OTiBzZWFyY2ggYnV0IHdpbGwgYWxzbyBpbmNyZWFzZSB0aGUgY29tcHV0YXRpb24gdGltZS48XC9zcGFuPjxcL3A+PHA+RXhhbXBsZSBrTk4gcXVlcnkgdXNpbmcgdGhlIDxjb2RlPnBvc3RfZmlsdGVyPFwvY29kZT4gcGFyYW1ldGVyOjxcL3A+In0sImVsZW1lbnRzIjpbXSwid2lkZ2V0VHlwZSI6InRleHQtZWRpdG9yIn0=\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-2567208 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\\\" data-id=\\\"2567208\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"code-highlight.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"prismjs-default copy-to-clipboard \\\">\\n\\t\\t\\t<pre data-line=\\\"\\\" class=\\\"highlight-height language- \\\">\\n\\t\\t\\t\\t<code readonly=\\\"true\\\" class=\\\"language-\\\">\\n\\t\\t\\t\\t\\t<xmp>{\\r\\n  \\\"size\\\": 300,\\r\\n  \\\"post_filter\\\": {\\r\\n    \\\"match\\\": {\\r\\n      \\\"location\\\": \\\"New York\\\"\\r\\n    }\\r\\n  },\\r\\n  \\\"query\\\": {\\r\\n    \\\"knn\\\": {\\r\\n      \\\"resume_embedded\\\": {\\r\\n        \\\"k\\\": 5,\\r\\n        \\\"vector\\\": [\\r\\n          -0.07738623768091202,\\r\\n          -0.06183512881398201,\\r\\n          ...\\r\\n        ]\\r\\n      }\\r\\n    }\\r\\n  }\\r\\n}<\\\/xmp>\\n\\t\\t\\t\\t<\\\/code>\\n\\t\\t\\t<\\\/pre>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-45645f8 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"45645f8\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6ImY0Nzc0ODMiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cCBkYXRhLXJlbmRlcmVyLXN0YXJ0LXBvcz1cIjcyNjFcIj48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+SWYgeW91IHdvdWxkIGxpa2UgdG8ga25vdyBtb3JlIGFib3V0XHUwMGEwIGRpZmZlcmVudCBraW5kcyBvZiBmaWx0ZXIgcXVlcmllcywgdGhlaXIgdXNlIGNhc2VzLCBhbmQgdGhlaXIgcGVyZm9ybWFuY2UgaW4gY29tYmluYXRpb24gd2l0aCBrTk4sIHRha2UgYSBsb29rIGF0IHRoaXMgPFwvc3Bhbj48YSBocmVmPVwiaHR0cHM6XC9cL29wZW5zZWFyY2gub3JnXC9kb2NzXC8yLjZcL3NlYXJjaC1wbHVnaW5zXC9rbm5cL2ZpbHRlci1zZWFyY2gta25uXC9cIj48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+ZG9jdW1lbnRhdGlvbjxcL3NwYW4+PFwvYT48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+IGZyb20gT3BlblNlYXJjaC48XC9zcGFuPiBPbmUgb2YgdGhlIGV4YW1wbGVzIGluY2x1ZGVkIGlzIGEgQm9vbGVhbiBmaWx0ZXIgcXVlcnkgdGhhdCBhbGxvd3MgZmlsdGVyaW5nIGRvY3VtZW50cyBiYXNlZCBvbiA8Y29kZSBjbGFzcz1cImNvZGUgY3NzLXo1b3hoN1wiIGRhdGEtcmVuZGVyZXItbWFyaz1cInRydWVcIj5tdXN0PFwvY29kZT4sXHUwMGEwXHUwMGEwPGNvZGUgY2xhc3M9XCJjb2RlIGNzcy16NW94aDdcIiBkYXRhLXJlbmRlcmVyLW1hcms9XCJ0cnVlXCI+bXVzdF9ub3Q8XC9jb2RlPiwgYW5kIDxjb2RlIGNsYXNzPVwiY29kZSBjc3MtejVveGg3XCIgZGF0YS1yZW5kZXJlci1tYXJrPVwidHJ1ZVwiPnNob3VsZDxcL2NvZGU+IHBhcmFtZXRlcnMuIFRoaXMgdHlwZSBvZiBxdWVyeSBjYW4gPHNwYW4gaWQ9XCI0MjA4NTYxNC03MWI2LTQ1YzUtODFjYi00MGIyMGIyOGQ2ZDRcIiBkYXRhLXJlbmRlcmVyLW1hcms9XCJ0cnVlXCIgZGF0YS1tYXJrLXR5cGU9XCJhbm5vdGF0aW9uXCIgZGF0YS1tYXJrLWFubm90YXRpb24tdHlwZT1cImlubGluZUNvbW1lbnRcIiBkYXRhLWlkPVwiNDIwODU2MTQtNzFiNi00NWM1LTgxY2ItNDBiMjBiMjhkNmQ0XCI+PHNwYW4gaWQ9XCJjYjBlM2UyMy00YjA4LTRhMDUtYmMxNS05NWJiODg3M2IzY2RcIiBkYXRhLXJlbmRlcmVyLW1hcms9XCJ0cnVlXCIgZGF0YS1tYXJrLXR5cGU9XCJhbm5vdGF0aW9uXCIgZGF0YS1tYXJrLWFubm90YXRpb24tdHlwZT1cImlubGluZUNvbW1lbnRcIiBkYXRhLWlkPVwiY2IwZTNlMjMtNGIwOC00YTA1LWJjMTUtOTViYjg4NzNiM2NkXCI+YmUgdXNlZCB0byBjb21iaW5lIGxleGljYWwgYW5kIHZlY3RvciBzZWFyY2guPFwvc3Bhbj48XC9zcGFuPjxcL3A+In0sImVsZW1lbnRzIjpbXSwid2lkZ2V0VHlwZSI6InRleHQtZWRpdG9yIn0=\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-7980dec flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\\\" data-id=\\\"7980dec\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"code-highlight.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"prismjs-default copy-to-clipboard \\\">\\n\\t\\t\\t<pre data-line=\\\"\\\" class=\\\"highlight-height language- \\\">\\n\\t\\t\\t\\t<code readonly=\\\"true\\\" class=\\\"language-\\\">\\n\\t\\t\\t\\t\\t<xmp>{\\r\\n  \\\"size\\\": 3,\\r\\n  \\\"query\\\": {\\r\\n    \\\"bool\\\": {\\r\\n      \\\"filter\\\": {\\r\\n        \\\"bool\\\": {\\r\\n          \\\"must\\\": [\\r\\n            {\\r\\n              \\\"match\\\": {\\r\\n                \\\"location\\\": \\\"New York\\\"\\r\\n              }\\r\\n            }\\r\\n          ]\\r\\n        }\\r\\n      },\\r\\n      \\\"must\\\": [\\r\\n        {\\r\\n          \\\"knn\\\": {\\r\\n            \\\"resume_embedded\\\": {\\r\\n              \\\"k\\\": 20,\\r\\n              \\\"vector\\\": [\\r\\n                -0.07738623768091202,\\r\\n                -0.06183512881398201,\\r\\n                ...\\r\\n              ]\\r\\n            }\\r\\n          }\\r\\n        }\\r\\n      ]\\r\\n    }\\r\\n  }\\r\\n}<\\\/xmp>\\n\\t\\t\\t\\t<\\\/code>\\n\\t\\t\\t<\\\/pre>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-ca7fac6 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"ca7fac6\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6ImU1NTFmYzAiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cD48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+T3VyIGV4YW1wbGVzIGhlcmUgYXJlIGJhc2VkIG9uIHVzaW5nIHRoZSA8XC9zcGFuPjxpPjxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDtcIj5hcHByb3hpbWF0ZSBuZWFyZXN0IG5laWdoYm9yIDxcL3NwYW4+PFwvaT48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+YXBwcm9hY2hcdTAwYTAgYmVjYXVzZSBpdCBzY2FsZXMgd2VsbCBmb3IgbGFyZ2VyIGRhdGFzZXRzLiBUaGU8XC9zcGFuPiA8aT48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+PGEgaHJlZj1cImh0dHBzOlwvXC9vcGVuc2VhcmNoLm9yZ1wvZG9jc1wvMi42XC9zZWFyY2gtcGx1Z2luc1wva25uXC9wYWlubGVzcy1mdW5jdGlvbnNcL1wiPnBhaW5sZXNzIHNjcmlwdGluZzxcL2E+IDxcL3NwYW4+PFwvaT48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+YXBwcm9hY2ggaXMgcHJlZmVycmVkIGlmIHlvdSBuZWVkIHRvIHVzZSBhIGRpc3RhbmNlIGZ1bmN0aW9uIGFzIHBhcnQgb2YgeW91ciBzY29yaW5nIG1ldGhvZC4gT24gc21hbGwgZGF0YXNldHMsIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3Qgb2YgYnJ1dGUgZm9yY2Uga05OIG1heSBub3QgYmUgYXMgY29uc2VxdWVudGlhbCBhbmQgY2FuIHBvdGVudGlhbGx5IHByb3ZpZGUgbW9yZSBhY2N1cmF0ZSByZXN1bHRzLiBJbiB0aGlzIGNhc2UsIG9uZSBjYW4gdXNlIHRoZSBjdXN0b208XC9zcGFuPiA8YSBocmVmPVwiaHR0cHM6XC9cL29wZW5zZWFyY2gub3JnXC9kb2NzXC8yLjZcL3NlYXJjaC1wbHVnaW5zXC9rbm5cL2tubi1zY29yZS1zY3JpcHRcL1wiPjxpPjxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDtcIj5zY3JpcHQgc2NvcmluZzxcL3NwYW4+PFwvaT48XC9hPjxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDtcIj4gYXBwcm9hY2ggd2l0aCBhIHByZS1maWx0ZXIgYW5kIGJydXRlIGZvcmNlIGtOTiBpbnN0ZWFkIG9mIGFwcHJveGltYXRlIGtOTiBhbmQgcG9zdC1maWx0ZXIuPFwvc3Bhbj48XC9wPiJ9LCJlbGVtZW50cyI6W10sIndpZGdldFR5cGUiOiJ0ZXh0LWVkaXRvciJ9\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-aa880cb flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"aa880cb\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-d105840 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\\\" data-id=\\\"d105840\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"heading.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t<h2 class=\\\"elementor-heading-title elementor-size-large\\\">Model Selection and Fine-Tuning<\\\/h2>\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6ImFmZGFmNDEiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cCBkYXRhLXJlbmRlcmVyLXN0YXJ0LXBvcz1cIjg2NzJcIj5TaW5jZSBvdXIgcXVlcmllcyBhbmQgdGhlIGNvcnB1cyBhcmUgYWJvdXQgdGhlIHNhbWUgbGVuZ3RoLCB3ZSBkZWNpZGVkIHRvIHVzZSBhIDxlbSBkYXRhLXJlbmRlcmVyLW1hcms9XCJ0cnVlXCI+PHNwYW4gaWQ9XCI3YjRlZDhmYy1lYmM2LTQxMzctOGMxNy0xNGI2NzQxODkyNWNcIiBkYXRhLXJlbmRlcmVyLW1hcms9XCJ0cnVlXCIgZGF0YS1tYXJrLXR5cGU9XCJhbm5vdGF0aW9uXCIgZGF0YS1tYXJrLWFubm90YXRpb24tdHlwZT1cImlubGluZUNvbW1lbnRcIiBkYXRhLWlkPVwiN2I0ZWQ4ZmMtZWJjNi00MTM3LThjMTctMTRiNjc0MTg5MjVjXCI+c3ltbWV0cmljIHNlbWFudGljIHNlYXJjaDxcL3NwYW4+PFwvZW0+PHNwYW4gaWQ9XCI3YjRlZDhmYy1lYmM2LTQxMzctOGMxNy0xNGI2NzQxODkyNWNcIiBkYXRhLXJlbmRlcmVyLW1hcms9XCJ0cnVlXCIgZGF0YS1tYXJrLXR5cGU9XCJhbm5vdGF0aW9uXCIgZGF0YS1tYXJrLWFubm90YXRpb24tdHlwZT1cImlubGluZUNvbW1lbnRcIiBkYXRhLWlkPVwiN2I0ZWQ4ZmMtZWJjNi00MTM3LThjMTctMTRiNjc0MTg5MjVjXCI+IDxcL3NwYW4+dG8gaGF2ZSB0aGUgYWJpbGl0eSB0byBkbyB0d28td2F5IG1hdGNoaW5nIGJldHdlZW4gcmVzdW1lcyBhbmQgam9iIGRlc2NyaXB0aW9ucy4gVGhlIHByZS10cmFpbmVkIG1vZGVsIGRpbWVuc2lvbmFsaXR5IGFuZCBzdGF0aXN0aWNzIGNhbiBiZSBmb3VuZCA8YSBocmVmPVwiaHR0cHM6XC9cL3d3dy5zYmVydC5uZXRcL2RvY3NcL3ByZXRyYWluZWRfbW9kZWxzLmh0bWxcIj5oZXJlPFwvYT4uXHUwMGEwIFc8c3BhbiBpZD1cImNmYzZlMjc4LWVlZmItNGM5Yi04ODNmLWZjZjE0N2FhYmNiYlwiIGRhdGEtcmVuZGVyZXItbWFyaz1cInRydWVcIiBkYXRhLW1hcmstdHlwZT1cImFubm90YXRpb25cIiBkYXRhLW1hcmstYW5ub3RhdGlvbi10eXBlPVwiaW5saW5lQ29tbWVudFwiIGRhdGEtaWQ9XCJjZmM2ZTI3OC1lZWZiLTRjOWItODgzZi1mY2YxNDdhYWJjYmJcIj5lIHN0YXJ0ZWQgb3VyIDxcL3NwYW4+ZXhwZXJpbWVudHMgd2l0aCA8Y29kZSBjbGFzcz1cImNvZGUgY3NzLXo1b3hoN1wiIGRhdGEtcmVuZGVyZXItbWFyaz1cInRydWVcIj5hbGwtTWluaUxNLUw2LXYyPFwvY29kZT4gYW5kIDxjb2RlIGNsYXNzPVwiY29kZSBjc3MtejVveGg3XCIgZGF0YS1yZW5kZXJlci1tYXJrPVwidHJ1ZVwiPmFsbC1NaW5pTE0tTDEyLXYyPFwvY29kZT4gbW9kZWxzIHdpdGggZGltZW5zaW9ucyA8Y29kZSBjbGFzcz1cImNvZGUgY3NzLXo1b3hoN1wiIGRhdGEtcmVuZGVyZXItbWFyaz1cInRydWVcIj4zODQ8XC9jb2RlPi48XC9wPjxwIGRhdGEtcmVuZGVyZXItc3RhcnQtcG9zPVwiOTAzMlwiPlRvIGV2YWx1YXRlIHRoZSBtb2RlbHMsIHdlIGNyZWF0ZWQgYSBzbWFsbCBkYXRhc2V0IHdpdGggam9iIGRlc2NyaXB0aW9ucywgcmVzdW1lcywgYW5kIDxzcGFuIGlkPVwiMmQ0YTJiYWQtYzI4Yy00ZjAwLTg4ODEtZmQzZDAwNzhlNGVmXCIgZGF0YS1yZW5kZXJlci1tYXJrPVwidHJ1ZVwiIGRhdGEtbWFyay10eXBlPVwiYW5ub3RhdGlvblwiIGRhdGEtbWFyay1hbm5vdGF0aW9uLXR5cGU9XCJpbmxpbmVDb21tZW50XCIgZGF0YS1pZD1cIjJkNGEyYmFkLWMyOGMtNGYwMC04ODgxLWZkM2QwMDc4ZTRlZlwiPnRoZSBleHBlY3RlZCA8XC9zcGFuPmNvc2luZSBzaW1pbGFyaXR5ICguOSBmb3IgZ29vZCBwYWlycyBhbmQgLjEgZm9yIHBvb3IgcGFpcnMpLiBXZSB0aGVuIGdlbmVyYXRlZCB0aGUgZW1iZWRkaW5ncyBhbmQgcmFuIGJydXRlIGZvcmNlIGtOTiwgcmVjb3JkaW5nIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIHRoYXQgYXBwZWFyIGluIHRoZSByZXN1bHQgc2V0IHdpdGggdGhlIGV4cGVjdGVkIHJhbmsuIFRoZSByZXN1bHRzIHdlcmUgZXZhbHVhdGVkIHdpdGggPGNvZGUgY2xhc3M9XCJjb2RlIGNzcy16NW94aDdcIiBkYXRhLXJlbmRlcmVyLW1hcms9XCJ0cnVlXCI+dG9wXzE8XC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9XCJjb2RlIGNzcy16NW94aDdcIiBkYXRhLXJlbmRlcmVyLW1hcms9XCJ0cnVlXCI+dG9wX2s8XC9jb2RlPiBhY2N1cmFjeTxzcGFuIGlkPVwiYWM3MzBjY2EtNzIzMS00YjY4LThmOWItYzQwYjE3MjNlN2I0XCIgZGF0YS1yZW5kZXJlci1tYXJrPVwidHJ1ZVwiIGRhdGEtbWFyay10eXBlPVwiYW5ub3RhdGlvblwiIGRhdGEtbWFyay1hbm5vdGF0aW9uLXR5cGU9XCJpbmxpbmVDb21tZW50XCIgZGF0YS1pZD1cImFjNzMwY2NhLTcyMzEtNGI2OC04ZjliLWM0MGIxNzIzZTdiNFwiPiA8XC9zcGFuPjxjb2RlIGNsYXNzPVwiY29kZSBjc3MtejVveGg3XCIgZGF0YS1yZW5kZXJlci1tYXJrPVwidHJ1ZVwiPjxzcGFuIGlkPVwiYWM3MzBjY2EtNzIzMS00YjY4LThmOWItYzQwYjE3MjNlN2I0XCIgZGF0YS1yZW5kZXJlci1tYXJrPVwidHJ1ZVwiIGRhdGEtbWFyay10eXBlPVwiYW5ub3RhdGlvblwiIGRhdGEtbWFyay1hbm5vdGF0aW9uLXR5cGU9XCJpbmxpbmVDb21tZW50XCIgZGF0YS1pZD1cImFjNzMwY2NhLTcyMzEtNGI2OC04ZjliLWM0MGIxNzIzZTdiNFwiPlx1MjIwOFswLCAxXTxcL3NwYW4+PFwvY29kZT4uIEluIHRoZSBmdXR1cmUsIHdlIHdvdWxkIGxpa2UgdG8gZXh0ZW5kIG91ciBldmFsdWF0aW9uIHV0aWxpdHkgdG8gdXNlIHRoZSBub3JtYWxpemVkIGRpc2NvdW50ZWQgY3VtdWxhdGl2ZSBnYWluIChORENHKSBtZXRob2QuPFwvcD4ifSwiZWxlbWVudHMiOltdLCJ3aWRnZXRUeXBlIjoidGV4dC1lZGl0b3IifQ==\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-773fcef flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-image\\\" data-id=\\\"773fcef\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"image.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<img width=\\\"1024\\\" height=\\\"202\\\" src=\\\"https:\\\/\\\/kmwllc.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/finetune-1024x202.png\\\" class=\\\"attachment-large size-large wp-image-28517\\\" alt=\\\"\\\" srcset=\\\"https:\\\/\\\/kmwllc.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/finetune-1024x202.png 1024w, https:\\\/\\\/kmwllc.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/finetune-300x59.png 300w, https:\\\/\\\/kmwllc.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/finetune-768x152.png 768w, https:\\\/\\\/kmwllc.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/finetune-1536x303.png 1536w, https:\\\/\\\/kmwllc.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/finetune.png 1682w\\\" sizes=\\\"(max-width: 1024px) 100vw, 1024px\\\" \\\/>\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-7e2ca06 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"7e2ca06\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6IjYwNzEwMzIiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cCBkYXRhLXJlbmRlcmVyLXN0YXJ0LXBvcz1cIjk1MzVcIj5UbzxzcGFuIGlkPVwiMjU3Njk4ZjMtNWU0Zi00NjJhLWE5NDYtOTc3ODk1YTNjMjA1XCIgZGF0YS1yZW5kZXJlci1tYXJrPVwidHJ1ZVwiIGRhdGEtbWFyay10eXBlPVwiYW5ub3RhdGlvblwiIGRhdGEtbWFyay1hbm5vdGF0aW9uLXR5cGU9XCJpbmxpbmVDb21tZW50XCIgZGF0YS1pZD1cIjI1NzY5OGYzLTVlNGYtNDYyYS1hOTQ2LTk3Nzg5NWEzYzIwNVwiPiBmaW5lLXR1bmU8XC9zcGFuPiBvdXIgbW9kZWxzLCB3ZSBmb2xsb3dlZCB0aGUgZXhhbXBsZSBmcm9tIHRoZSA8YSBocmVmPVwiaHR0cHM6XC9cL3d3dy5zYmVydC5uZXRcL2RvY3NcL3RyYWluaW5nXC9vdmVydmlldy5odG1sXCI+U0JFUlQgZG9jdW1lbnRhdGlvbjxcL2E+LiBcdTAwYTBUaGUgbW9kZWxzIHdlcmUgdHJhaW5lZCBieSBjcmVhdGluZyAoam9iX2Rlc2NyaXB0aW9uLCByZXN1bWUsIHNjb3JlKSB0dXBsZXMgYW5kIHVzaW5nIGNvc2luZSBzaW1pbGFyaXR5IGxvc3MgZm9yIDxjb2RlIGNsYXNzPVwiY29kZSBjc3MtejVveGg3XCIgZGF0YS1yZW5kZXJlci1tYXJrPVwidHJ1ZVwiPm48XC9jb2RlPiBudW1iZXIgb2YgZXBvY2hzLiBGcm9tIG91ciBleHBlcmltZW50cywgdGhlIHRyYWluaW5nIGRhdGEncyBzaXplIGFuZCBxdWFsaXR5IGFyZSBlc3NlbnRpYWwgZm9yIHN1Y2Nlc3NmdWwgPHNwYW4gaWQ9XCI0M2MyZjRhMC1mMTMzLTQ3ZGYtYWRjOC0zNWQ5MTRlOWU0OWFcIiBkYXRhLXJlbmRlcmVyLW1hcms9XCJ0cnVlXCIgZGF0YS1tYXJrLXR5cGU9XCJhbm5vdGF0aW9uXCIgZGF0YS1tYXJrLWFubm90YXRpb24tdHlwZT1cImlubGluZUNvbW1lbnRcIiBkYXRhLWlkPVwiNDNjMmY0YTAtZjEzMy00N2RmLWFkYzgtMzVkOTE0ZTllNDlhXCI+dHVuaW5nPFwvc3Bhbj4sIGFuZCBhIGxhcmdlIDxzcGFuIGlkPVwiNDhlYWRlN2MtOTU4ZC00NmYwLTk1ZGItOWU1NGNiMjcxYTk5XCIgZGF0YS1yZW5kZXJlci1tYXJrPVwidHJ1ZVwiIGRhdGEtbWFyay10eXBlPVwiYW5ub3RhdGlvblwiIGRhdGEtbWFyay1hbm5vdGF0aW9uLXR5cGU9XCJpbmxpbmVDb21tZW50XCIgZGF0YS1pZD1cIjQ4ZWFkZTdjLTk1OGQtNDZmMC05NWRiLTllNTRjYjI3MWE5OVwiPm51bWJlciBvZiB0cmFpbmluZyBlcG9jaHMgPFwvc3Bhbj5pcyByZXF1aXJlZCBmb3IgdGhlIG1vZGVsIHRvIHJldHVybiA8Y29kZSBjbGFzcz1cImNvZGUgY3NzLXo1b3hoN1wiIGRhdGEtcmVuZGVyZXItbWFyaz1cInRydWVcIj50b3BfazxcL2NvZGU+IGNvcnJlY3QgcmVzdWx0cy4gVGhlIHRhYmxlIGFib3ZlIGRlbW9uc3RyYXRlcyB0aGUgaW1wcm92ZW1lbnQgb2YgdGhlIGV2YWx1YXRpb24gc2NvcmVzIGZvciBtb2RlbHMgdHJhaW5lZCBmb3IgNTAgYW5kIDxzcGFuIGlkPVwiYjJkYzc3NzMtNjBjNC00YmVmLWI2MWMtY2M3MWYxZDkyYzc3XCIgZGF0YS1yZW5kZXJlci1tYXJrPVwidHJ1ZVwiIGRhdGEtbWFyay10eXBlPVwiYW5ub3RhdGlvblwiIGRhdGEtbWFyay1hbm5vdGF0aW9uLXR5cGU9XCJpbmxpbmVDb21tZW50XCIgZGF0YS1pZD1cImIyZGM3NzczLTYwYzQtNGJlZi1iNjFjLWNjNzFmMWQ5MmM3N1wiPjEwMCBlcG9jaHMuPFwvc3Bhbj48XC9wPjxwIGRhdGEtcmVuZGVyZXItc3RhcnQtcG9zPVwiMTAwNTVcIj5CZWxvdyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZpbmUtdHVuaW5nIHV0aWxpdHkuPFwvcD4ifSwiZWxlbWVudHMiOltdLCJ3aWRnZXRUeXBlIjoidGV4dC1lZGl0b3IifQ==\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-c6f4fb0 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-code-highlight\\\" data-id=\\\"c6f4fb0\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"code-highlight.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"prismjs-default copy-to-clipboard \\\">\\n\\t\\t\\t<pre data-line=\\\"\\\" class=\\\"highlight-height language- \\\">\\n\\t\\t\\t\\t<code readonly=\\\"true\\\" class=\\\"language-\\\">\\n\\t\\t\\t\\t\\t<xmp>usage: tune.py [-h] -f FILE -o OUTPUT [-m MODEL] [-e EPOCHS] [-d DEVICE]\\r\\n\\r\\nSentenceTransformer tuning utility\\r\\n\\r\\noptional arguments:\\r\\n  -h, --help            show this help message and exit\\r\\n  -f FILE, --file FILE  path to csv file with training data\\r\\n  -o OUTPUT, --output OUTPUT\\r\\n                        output directory for the trained model\\r\\n  -m MODEL, --model MODEL\\r\\n                        base model name or path\\r\\n  -e EPOCHS, --epochs EPOCHS\\r\\n                        number of epochs\\r\\n  -d DEVICE, --device DEVICE\\r\\n                        device to use (\\\"cuda\\\" \\\/ \\\"cpu\\\"). If None, checks if a\\r\\n                        GPU can be used.<\\\/xmp>\\n\\t\\t\\t\\t<\\\/code>\\n\\t\\t\\t<\\\/pre>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-83e3828 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"83e3828\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-4107101 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\\\" data-id=\\\"4107101\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"heading.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t<h2 class=\\\"elementor-heading-title elementor-size-large\\\">Future Work<\\\/h2>\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6ImFiNjExZTEiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cD48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+VGhlIG5leHQgc3RlcCBpcyB0byBldmFsdWF0ZSB0aGUgaW1wYWN0IHRvIHJlbGV2YW5jeSBvZiB1c2luZyB2ZWN0b3Igc2VhcmNoIFRoZSBIb21lIERlcG90IGRhdGFzZXQgZnJvbSA8XC9zcGFuPjxhIGhyZWY9XCJodHRwczpcL1wvd3d3LmthZ2dsZS5jb21cL2NvbXBldGl0aW9uc1wvaG9tZS1kZXBvdC1wcm9kdWN0LXNlYXJjaC1yZWxldmFuY2VcIj48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+S2FnZ2xlPFwvc3Bhbj48XC9hPjxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDtcIj4gaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgdGVzdCBkYXRhIGJlY2F1c2UgaXQgaW5jbHVkZXMgbWFueSBxdWVyeVwvcmVzdWx0IGRvY3VtZW50IHBhaXJzIHRoYXQgYXJlIGxhYmVsZWQgKG51bWVyaWNhbGx5IHJhbmtlZCBhcyByZWxldmFudCBvciBpcnJlbGV2YW50KS4gQnkgdHJhaW5pbmcgYW5kIGV2YWx1YXRpbmcgb3VyIGFwcGxpY2F0aW9uIG9uIHRoaXMgZGF0YSBzZXQsIHdlIGNhbiBmdXJ0aGVyIGludmVzdGlnYXRlIHdoZXRoZXIgcHVyZSB2ZWN0b3Igc2VhcmNoIHByb3ZpZGVzIGFuIGltcHJvdmVtZW50IGNvbXBhcmVkIHRvIGxleGljYWwgc2VhcmNoLjxcL3NwYW4+PFwvcD48cD48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+V2Ugd2lsbCBhbHNvIGV4cGxvcmUgdXRpbGl6aW5nIDxcL3NwYW4+PGEgaHJlZj1cImh0dHBzOlwvXC9xdWVwaWQuY29tXC9cIj48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+UXVlcGlkPFwvc3Bhbj48XC9hPjxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDtcIj4gdG8gdmlzdWFsaXplIHF1ZXJpZXMsIHNlYXJjaCByZXN1bHRzLCBhbmQgdGhlaXIgc2NvcmVzIGZvciBhIHZlY3RvciBzZWFyY2ggYXBwbGljYXRpb24uIEZpbmFsbHksIHdlIHdvdWxkIGxpa2UgdG8gY3JlYXRlIGEgdXNlciBpbnRlcmZhY2UgdGhhdCBwcm92aWRlcyB0cmFkaXRpb25hbCBzZWFyY2ggb3B0aW9ucyBsaWtlIGZpbHRlcmluZyAmYW1wOyBhZ2dyZWdhdGlvbnM7IHNpbXBsaWZpZXMgdGhlIHF1ZXJpZXNcdTIwMTkgZW1iZWRkaW5nIGdlbmVyYXRpb247IGFuZCBkaXNwbGF5cyB0aGUgcmVzdWx0cyBpbiBhIHJlYWRhYmxlIGZvcm1hdC48XC9zcGFuPjxcL3A+In0sImVsZW1lbnRzIjpbXSwid2lkZ2V0VHlwZSI6InRleHQtZWRpdG9yIn0=\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-c438f51 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"c438f51\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-07e9b39 elementor-hidden-tablet elementor-hidden-mobile\\\" data-id=\\\"07e9b39\\\" data-element_type=\\\"column\\\" data-e-type=\\\"column\\\">\\n\\t\\t\\t<div class=\\\"elementor-widget-wrap\\\">\\n\\t\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-127fbac\\\" data-id=\\\"127fbac\\\" data-element_type=\\\"column\\\" data-e-type=\\\"column\\\">\\n\\t\\t\\t<div class=\\\"elementor-widget-wrap elementor-element-populated\\\">\\n\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-66cf9a7 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\\\" data-id=\\\"66cf9a7\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"heading.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"title-h6 elementor-heading-title elementor-size-small\\\">Share Post<\\\/div>\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6ImRhMDc1ZWQiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJwaW50ZXJlc3QiOiIiLCJ0dW1ibHIiOiIiLCJ0ZWxlZ3JhbSI6IiIsIndoYXRzYXBwIjoiIiwidmliZXIiOiIiLCJ4aW5nIjoiIiwiaWNvbnNfY29sb3IiOiIjMDBERUZGIn0sImVsZW1lbnRzIjpbXSwid2lkZ2V0VHlwZSI6InRoZWdlbS1zb2NpYWwtc2hhcmluZyJ9\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-7540914 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"7540914\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-fe2ab3d flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\\\" data-id=\\\"fe2ab3d\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"heading.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"title-h6 elementor-heading-title elementor-size-small\\\">More From the KMW Blog<\\\/div>\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6IjA3NDY0NDkiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJ0aGVnZW1fZWxlbWVudG9yX3ByZXNldCI6ImNvbXBhY3QtdGlueS0yIiwic291cmNlIjpbInBvc3RzIl0sInNob3dfc2VwYXJhdG9yIjoiIiwic2hvd19jb21tZW50cyI6IiIsInJlYWRtb3JlX2J1dHRvbl90ZXh0IjoiUmVhZCBNb3JlIiwibG9hZG1vcmVfYnV0dG9uX3RleHQiOiJMb2FkIE1vcmUiLCJjYXB0aW9uX2NhdGVnb3JpZXNfaW5fdGV4dCI6ImluICIsImNhcHRpb25fYXV0aG9yX2J5X3RleHQiOiJCeSIsInNvdXJjZV90eXBlIjoiY3VzdG9tIiwicGFnaW5hdGlvbl90eXBlIjoibnVtYmVycyJ9LCJlbGVtZW50cyI6W10sIndpZGdldFR5cGUiOiJ0aGVnZW0tYmxvZ2xpc3QifQ==\\\"]\\t\\t\\t<\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t<\\\/div><\\\/div>\\r\\n\\t\\t<\\\/section>\\r\\n\\t\\t\\t\\t<section class=\\\"elementor-section elementor-top-section elementor-element elementor-element-bb4f855 elementor-section-boxed elementor-section-height-default elementor-section-height-default\\\" data-id=\\\"bb4f855\\\" data-element_type=\\\"section\\\" data-e-type=\\\"section\\\">\\r\\n\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-container elementor-column-gap-no\\\"><div class=\\\"elementor-row\\\">\\r\\n\\t\\t\\t\\t\\t<div class=\\\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c70a9ce\\\" data-id=\\\"c70a9ce\\\" data-element_type=\\\"column\\\" data-e-type=\\\"column\\\">\\n\\t\\t\\t<div class=\\\"elementor-widget-wrap elementor-element-populated\\\">\\n\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-7447ea9 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\\\" data-id=\\\"7447ea9\\\" data-element_type=\\\"widget\\\" data-e-type=\\\"widget\\\" data-widget_type=\\\"spacer.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"elementor-spacer\\\">\\n\\t\\t\\t<div class=\\\"elementor-spacer-inner\\\"><\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"9109a976d8649ee6d2c8fef8daebbb8b\\\" data=\\\"eyJpZCI6IjUwZDkzNDEiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJwcmV2X2xhYmVsIjoiUHJldmlvdXMgUG9zdCIsIm5leHRfbGFiZWwiOiJOZXh0IFBvc3QiLCJzaG93X2JvcmRlcnMiOiIiLCJ0aXRsZV90eXBvZ3JhcGh5X3R5cG9ncmFwaHkiOiJjdXN0b20iLCJ0aXRsZV90eXBvZ3JhcGh5X2ZvbnRfc2l6ZSI6eyJ1bml0IjoicHgiLCJzaXplIjoxNCwic2l6ZXMiOltdfSwidGl0bGVfdHlwb2dyYXBoeV9mb250X3dlaWdodCI6IjcwMCIsIl9fZ2xvYmFsc19fIjp7ImFycm93X2NvbG9yIjoiZ2xvYmFsc1wvY29sb3JzP2lkPXByaW1hcnkiLCJsYWJlbF9jb2xvciI6Imdsb2JhbHNcL2NvbG9ycz9pZD1zZWNvbmRhcnkifSwiYXJyb3ciOiJmYSBmYS1jYXJldC1sZWZ0Iiwic2hvd19hcnJvdyI6IiJ9LCJlbGVtZW50cyI6W10sIndpZGdldFR5cGUiOiJwb3N0LW5hdmlnYXRpb24ifQ==\\\"]\\t\\t\\t<\\\/div>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t<\\\/div><\\\/div>\\r\\n\\t\\t<\\\/section>\\r\\n\\t\\t\",\"scripts\":[],\"styles\":[]}}"]},"jetpack_featured_media_url":"https:\/\/kmwllc.com\/wp-content\/uploads\/2024\/05\/blog_vectorSearch_1200x900-min.png","menu_order":0,"_links":{"self":[{"href":"https:\/\/kmwllc.com\/index.php\/wp-json\/wp\/v2\/posts\/28464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kmwllc.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kmwllc.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kmwllc.com\/index.php\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/kmwllc.com\/index.php\/wp-json\/wp\/v2\/comments?post=28464"}],"version-history":[{"count":10,"href":"https:\/\/kmwllc.com\/index.php\/wp-json\/wp\/v2\/posts\/28464\/revisions"}],"predecessor-version":[{"id":30199,"href":"https:\/\/kmwllc.com\/index.php\/wp-json\/wp\/v2\/posts\/28464\/revisions\/30199"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kmwllc.com\/index.php\/wp-json\/wp\/v2\/media\/29678"}],"wp:attachment":[{"href":"https:\/\/kmwllc.com\/index.php\/wp-json\/wp\/v2\/media?parent=28464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kmwllc.com\/index.php\/wp-json\/wp\/v2\/categories?post=28464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kmwllc.com\/index.php\/wp-json\/wp\/v2\/tags?post=28464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}