{"id":82353,"date":"2025-01-30T09:00:40","date_gmt":"2025-01-30T17:00:40","guid":{"rendered":"https:\/\/github.blog\/?p=82353"},"modified":"2025-01-31T11:26:05","modified_gmt":"2025-01-31T19:26:05","slug":"4-steps-to-building-a-natural-language-search-tool","status":"publish","type":"post","link":"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/","title":{"rendered":"4 steps to building a natural language search tool"},"content":{"rendered":"<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/REC-html40\/loose.dtd\">\n<html><body><p><strong>&ldquo;We have a problem. Our current search method for sifting through PDFs is extremely manual and time consuming. Is there an easier way?&rdquo;<\/strong><\/p>\n<p>As a developer, this is one of those questions that really gets me excited. I was tasked with finding a way to transform a cumbersome, archival process into an efficient, intuitive search experience. It&rsquo;s a way to make a group of people&rsquo;s lives easier, and because of the organizations they work for, help them be more effective in providing humanitarian assistance to people in need around the world. I couldn&rsquo;t imagine a better project to be working on.<\/p>\n<h2 id=\"unlocking-the-united-nations-legacy-for-rapid-action\" id=\"unlocking-the-united-nations-legacy-for-rapid-action\" ><a class=\"heading-link\" href=\"#unlocking-the-united-nations-legacy-for-rapid-action\">Unlocking the United Nations&rsquo; legacy for rapid action<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p>Since 1945, the United Nations has produced resolutions and other documents that guide international peace and security efforts. Yet accessing this wealth of knowledge remains a challenge, including for organizations such as the <a href=\"https:\/\/www.icrc.org\/en\">International Committee of the Red Cross<\/a> (ICRC). Currently, delegates at ICRC&rsquo;s permanent observer mission to the UN advise member states and other stakeholders on international humanitarian law and humanitarian issues. When states negotiate relevant resolutions and other UN products, leaning on pre-existing humanitarian language from UN resolutions can provide precedence. This often requires sifting through PDFs to find relevant content within documents&mdash;a time-intensive, manual process ill-suited to the fast-paced world of humanitarian diplomacy.<\/p>\n<h2 id=\"a-live-accessible-and-scalable-search-platform\" id=\"a-live-accessible-and-scalable-search-platform\" ><a class=\"heading-link\" href=\"#a-live-accessible-and-scalable-search-platform\">A live, accessible, and scalable search platform<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p>To solve this, I built a single-page application (SPA) that enables users to input natural language queries and instantly retrieve relevant UN resolutions. The solution is live now at <a href=\"http:\/\/resolutions.projectrefuge.io\">resolutions.projectrefuge.io<\/a> and serves as a robust example of how technology can simplify access to critical information.<\/p>\n<h2 id=\"how-it-works\" id=\"how-it-works\" ><a class=\"heading-link\" href=\"#how-it-works\">How it works<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<ol>\n<li><strong>Text extraction and structuring<\/strong><br>\nUsing Amazon Textract, I extracted raw text from decades&rsquo; worth of UN Security Council Resolutions and Presidential Statements and six years of UN General Assembly Resolutions. A Go script then parsed this text using Regex matching, segmenting it into individual resolutions for easier indexing.\n<\/li>\n<li>\n<p><strong>Search-ready database with MongoDB Atlas<\/strong><br>\nI adapted a Node.js script from MongoDB to upload the parsed resolutions as embeddings into a MongoDB Atlas database. This step ensures the content is structured for fast and relevant searches.<\/p>\n<\/li>\n<li>\n<p><strong>User interface built with Vue.js<\/strong><br>\nThe front end is an intuitive SPA created with Vue.js. Users simply enter semantic search queries&mdash;such as &ldquo;resolutions on humanitarian access in armed conflicts&rdquo;&mdash;and receive results in seconds.<\/p>\n<\/li>\n<li>\n<p><strong>Backend hosted on AWS<\/strong><br>\nThe backend relies on AWS Lambda and API Gateway, ensuring scalability and seamless performance. The entire application is hosted as a subdomain on AWS Amplify, combining reliability with ease of access.<\/p>\n<\/li>\n<\/ol>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/github.blog\/wp-content\/uploads\/2025\/01\/architecture.png?resize=1024%2C607\" alt=\"A Reference Architecture diagram showing the following: Text extraction and structuring Using Amazon Textract, I extracted raw text from decades&rsquo; worth of UN Security Council Resolutions and Presidential Statements and six years of UN General Assembly Resolutions. A Go script then parsed this text using Regex matching, segmenting it into individual resolutions for easier indexing. Search-ready database with MongoDB Atlas I adapted a Node.js script from MongoDB to upload the parsed resolutions as embeddings into a MongoDB Atlas database. This step ensures the content is structured for fast and relevant searches. User interface built with Vue.js The front end is an intuitive SPA created with Vue.js. Users simply enter semantic search queries&mdash;such as &ldquo;resolutions on humanitarian access in armed conflicts&rdquo;&mdash;and receive results in seconds. Backend hosted on AWS The backend relies on AWS Lambda and API Gateway, ensuring scalability and seamless performance. The entire application is hosted as a subdomain on AWS Amplify, combining reliability with ease of access.\" width=\"1024\" height=\"607\" class=\"aligncenter size-full wp-image-82355 width-fit\" srcset=\"https:\/\/github.blog\/wp-content\/uploads\/2025\/01\/architecture.png?w=1600 1600w, https:\/\/github.blog\/wp-content\/uploads\/2025\/01\/architecture.png?w=300 300w, https:\/\/github.blog\/wp-content\/uploads\/2025\/01\/architecture.png?w=768 768w, https:\/\/github.blog\/wp-content\/uploads\/2025\/01\/architecture.png?w=1024 1024w, https:\/\/github.blog\/wp-content\/uploads\/2025\/01\/architecture.png?w=1536 1536w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<p>This code is publicly available at <a href=\"https:\/\/github.com\/projectrefuge\/resolutions-search-template\">projectrefuge\/resolutions-search-template<\/a>. This initiative will empower other organizations to adapt and expand the solution to their unique needs.<\/p>\n<div style=\"width: 1600px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-82353-1\" width=\"1600\" height=\"900\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/github.blog\/wp-content\/uploads\/2025\/01\/20250117-UNresolutiondemo.mp4#t=0.001?_=1\" \/><a href=\"https:\/\/github.blog\/wp-content\/uploads\/2025\/01\/20250117-UNresolutiondemo.mp4#t=0.001\">https:\/\/github.blog\/wp-content\/uploads\/2025\/01\/20250117-UNresolutiondemo.mp4#t=0.001<\/a><\/video><\/div>\n<h2 id=\"broader-implications-a-blueprint-for-impact\" id=\"broader-implications-a-blueprint-for-impact\" ><a class=\"heading-link\" href=\"#broader-implications-a-blueprint-for-impact\">Broader implications: a blueprint for impact<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p>The implications of this project go far beyond the ICRC&rsquo;s use case with UN Resolutions. With slight modifications, the tool could index and search any collection of legal and policy documents. This approach is a blueprint for organizations aiming to leverage technology for better decision-making and more effective action. For nonprofits, this demonstrates the power of owning your code and building tailored solutions. For developers, it&rsquo;s a reminder of how open source can accelerate progress in humanitarian and public policy sectors.<\/p>\n<h2 id=\"build-together-with-open-source\" id=\"build-together-with-open-source\" ><a class=\"heading-link\" href=\"#build-together-with-open-source\">Build together with open source<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p>Projects like resolutions.projectrefuge.io highlight the potential of open source to transform how we access and use information. If you&rsquo;re a nonprofit, explore <a href=\"https:\/\/github.com\/nonprofits\">GitHub for Nonprofits<\/a> to discover tools and resources that can help you build your own solutions. Developers eager to contribute to impactful work can browse the <a href=\"https:\/\/github.com\/github\/forgoodfirstissue\">For Good First Issue<\/a> program to find projects that align with their skills and values.<\/p>\n<p>Finally, stay tuned as we work to identify other opportunities with humanitarian actors such as the ICRC to bridge the technology and humanitarian space. Together, we can build a future where knowledge is more accessible and tools are built with collaboration in mind, ensuring that humanitarian efforts are supported by cutting-edge technology.<\/p>\n<p>Let&rsquo;s code for good&mdash;and make a lasting impact.<\/p>\n<div class=\"post-content-cta\"><p><strong>If you&rsquo;d like to lend your developer skills for good,<\/strong> check out <a href=\"https:\/\/forgoodfirstissue.github.com\/\">For Good First Issue<\/a>, a curated platform of open source projects that contribute to a better future for everyone.<\/p>\n<\/div>\n<\/body><\/html>\n","protected":false},"excerpt":{"rendered":"<p>Empowering humanitarian action with open source: A natural language search tool for UN Resolutions.<\/p>\n","protected":false},"author":2286,"featured_media":77372,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_gh_post_show_toc":"yes","_gh_post_is_no_robots":"no","_gh_post_is_featured":"yes","_gh_post_is_excluded":"no","_gh_post_is_unlisted":"no","_gh_post_related_link_1":"","_gh_post_related_link_2":"","_gh_post_related_link_3":"","_gh_post_sq_img":"","_gh_post_sq_img_id":"","_gh_post_cta_title":"","_gh_post_cta_text":"","_gh_post_cta_link":"","_gh_post_cta_button":"Click Here to Learn More","_gh_post_recirc_hide":"no","_gh_post_recirc_col_1":"78957","_gh_post_recirc_col_2":"78959","_gh_post_recirc_col_3":"78961","_gh_post_recirc_col_4":"65316","_featured_video":"","_gh_post_additional_query_params":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false,"_links_to":"","_links_to_target":""},"categories":[67,3333],"tags":[],"coauthors":[3511],"class_list":["post-82353","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-open-source","category-social-impact"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.4 (Yoast SEO v28.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>4 steps to building a natural language search tool - The GitHub Blog<\/title>\n<meta name=\"description\" content=\"Empowering humanitarian action with open source: A natural language search tool for UN Resolutions.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"4 steps to building a natural language search tool\" \/>\n<meta property=\"og:description\" content=\"Empowering humanitarian action with open source: A natural language search tool for UN Resolutions.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/\" \/>\n<meta property=\"og:site_name\" content=\"The GitHub Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-30T17:00:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-31T19:26:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/github.blog\/wp-content\/uploads\/2024\/04\/1200x630-Productivity-Unfurl-LIGHT-Logo@2x.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1260\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ryan Fallon\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ryan Fallon\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/social-impact\\\/4-steps-to-building-a-natural-language-search-tool\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/social-impact\\\/4-steps-to-building-a-natural-language-search-tool\\\/\"},\"author\":{\"name\":\"Ryan Fallon\",\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/4f89dd52687d86a09640e678811317b5\"},\"headline\":\"4 steps to building a natural language search tool\",\"datePublished\":\"2025-01-30T17:00:40+00:00\",\"dateModified\":\"2025-01-31T19:26:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/social-impact\\\/4-steps-to-building-a-natural-language-search-tool\\\/\"},\"wordCount\":737,\"image\":{\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/social-impact\\\/4-steps-to-building-a-natural-language-search-tool\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/1200x630-Productivity-Unfurl-LIGHT-Logo@2x.png?fit=2400%2C1260\",\"articleSection\":[\"Open Source\",\"Social impact\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/social-impact\\\/4-steps-to-building-a-natural-language-search-tool\\\/\",\"url\":\"https:\\\/\\\/github.blog\\\/open-source\\\/social-impact\\\/4-steps-to-building-a-natural-language-search-tool\\\/\",\"name\":\"4 steps to building a natural language search tool - The GitHub Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/github.blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/social-impact\\\/4-steps-to-building-a-natural-language-search-tool\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/social-impact\\\/4-steps-to-building-a-natural-language-search-tool\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/1200x630-Productivity-Unfurl-LIGHT-Logo@2x.png?fit=2400%2C1260\",\"datePublished\":\"2025-01-30T17:00:40+00:00\",\"dateModified\":\"2025-01-31T19:26:05+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/4f89dd52687d86a09640e678811317b5\"},\"description\":\"Empowering humanitarian action with open source: A natural language search tool for UN Resolutions.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/social-impact\\\/4-steps-to-building-a-natural-language-search-tool\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/github.blog\\\/open-source\\\/social-impact\\\/4-steps-to-building-a-natural-language-search-tool\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/social-impact\\\/4-steps-to-building-a-natural-language-search-tool\\\/#primaryimage\",\"url\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/1200x630-Productivity-Unfurl-LIGHT-Logo@2x.png?fit=2400%2C1260\",\"contentUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/1200x630-Productivity-Unfurl-LIGHT-Logo@2x.png?fit=2400%2C1260\",\"width\":2400,\"height\":1260},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/github.blog\\\/open-source\\\/social-impact\\\/4-steps-to-building-a-natural-language-search-tool\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/github.blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Open Source\",\"item\":\"https:\\\/\\\/github.blog\\\/open-source\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Social impact\",\"item\":\"https:\\\/\\\/github.blog\\\/open-source\\\/social-impact\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"4 steps to building a natural language search tool\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/github.blog\\\/#website\",\"url\":\"https:\\\/\\\/github.blog\\\/\",\"name\":\"The GitHub Blog\",\"description\":\"Updates, ideas, and inspiration from GitHub to help developers build and design software.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/github.blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/4f89dd52687d86a09640e678811317b5\",\"name\":\"Ryan Fallon\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c787413c2a0e1369976324f276cd6294d1d2514cb3008e2c80f2727f09b044fc?s=96&d=mm&r=ga4ea9b15201d11dd176c31a854e1b654\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c787413c2a0e1369976324f276cd6294d1d2514cb3008e2c80f2727f09b044fc?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c787413c2a0e1369976324f276cd6294d1d2514cb3008e2c80f2727f09b044fc?s=96&d=mm&r=g\",\"caption\":\"Ryan Fallon\"},\"url\":\"https:\\\/\\\/github.blog\\\/author\\\/ryano0oceros\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"4 steps to building a natural language search tool - The GitHub Blog","description":"Empowering humanitarian action with open source: A natural language search tool for UN Resolutions.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/","og_locale":"en_US","og_type":"article","og_title":"4 steps to building a natural language search tool","og_description":"Empowering humanitarian action with open source: A natural language search tool for UN Resolutions.","og_url":"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/","og_site_name":"The GitHub Blog","article_published_time":"2025-01-30T17:00:40+00:00","article_modified_time":"2025-01-31T19:26:05+00:00","og_image":[{"width":2400,"height":1260,"url":"https:\/\/github.blog\/wp-content\/uploads\/2024\/04\/1200x630-Productivity-Unfurl-LIGHT-Logo@2x.png","type":"image\/png"}],"author":"Ryan Fallon","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ryan Fallon","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/#article","isPartOf":{"@id":"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/"},"author":{"name":"Ryan Fallon","@id":"https:\/\/github.blog\/#\/schema\/person\/4f89dd52687d86a09640e678811317b5"},"headline":"4 steps to building a natural language search tool","datePublished":"2025-01-30T17:00:40+00:00","dateModified":"2025-01-31T19:26:05+00:00","mainEntityOfPage":{"@id":"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/"},"wordCount":737,"image":{"@id":"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/#primaryimage"},"thumbnailUrl":"https:\/\/github.blog\/wp-content\/uploads\/2024\/04\/1200x630-Productivity-Unfurl-LIGHT-Logo@2x.png?fit=2400%2C1260","articleSection":["Open Source","Social impact"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/","url":"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/","name":"4 steps to building a natural language search tool - The GitHub Blog","isPartOf":{"@id":"https:\/\/github.blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/#primaryimage"},"image":{"@id":"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/#primaryimage"},"thumbnailUrl":"https:\/\/github.blog\/wp-content\/uploads\/2024\/04\/1200x630-Productivity-Unfurl-LIGHT-Logo@2x.png?fit=2400%2C1260","datePublished":"2025-01-30T17:00:40+00:00","dateModified":"2025-01-31T19:26:05+00:00","author":{"@id":"https:\/\/github.blog\/#\/schema\/person\/4f89dd52687d86a09640e678811317b5"},"description":"Empowering humanitarian action with open source: A natural language search tool for UN Resolutions.","breadcrumb":{"@id":"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/#primaryimage","url":"https:\/\/github.blog\/wp-content\/uploads\/2024\/04\/1200x630-Productivity-Unfurl-LIGHT-Logo@2x.png?fit=2400%2C1260","contentUrl":"https:\/\/github.blog\/wp-content\/uploads\/2024\/04\/1200x630-Productivity-Unfurl-LIGHT-Logo@2x.png?fit=2400%2C1260","width":2400,"height":1260},{"@type":"BreadcrumbList","@id":"https:\/\/github.blog\/open-source\/social-impact\/4-steps-to-building-a-natural-language-search-tool\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/github.blog\/"},{"@type":"ListItem","position":2,"name":"Open Source","item":"https:\/\/github.blog\/open-source\/"},{"@type":"ListItem","position":3,"name":"Social impact","item":"https:\/\/github.blog\/open-source\/social-impact\/"},{"@type":"ListItem","position":4,"name":"4 steps to building a natural language search tool"}]},{"@type":"WebSite","@id":"https:\/\/github.blog\/#website","url":"https:\/\/github.blog\/","name":"The GitHub Blog","description":"Updates, ideas, and inspiration from GitHub to help developers build and design software.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/github.blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/github.blog\/#\/schema\/person\/4f89dd52687d86a09640e678811317b5","name":"Ryan Fallon","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c787413c2a0e1369976324f276cd6294d1d2514cb3008e2c80f2727f09b044fc?s=96&d=mm&r=ga4ea9b15201d11dd176c31a854e1b654","url":"https:\/\/secure.gravatar.com\/avatar\/c787413c2a0e1369976324f276cd6294d1d2514cb3008e2c80f2727f09b044fc?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c787413c2a0e1369976324f276cd6294d1d2514cb3008e2c80f2727f09b044fc?s=96&d=mm&r=g","caption":"Ryan Fallon"},"url":"https:\/\/github.blog\/author\/ryano0oceros\/"}]}},"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/pamS32-lqh","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/github.blog\/wp-content\/uploads\/2024\/04\/1200x630-Productivity-Unfurl-LIGHT-Logo@2x.png?fit=2400%2C1260","_links":{"self":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/82353","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/users\/2286"}],"replies":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/comments?post=82353"}],"version-history":[{"count":10,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/82353\/revisions"}],"predecessor-version":[{"id":82372,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/82353\/revisions\/82372"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/media\/77372"}],"wp:attachment":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/media?parent=82353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/categories?post=82353"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/tags?post=82353"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/coauthors?post=82353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}