[{"data":1,"prerenderedAt":1211},["ShallowReactive",2],{"blog:2018:wordpress-to-jekyll-search":3,"blogMore-Development":1197,"comments-wordpress-to-jekyll-search":1210},{"id":4,"title":5,"body":6,"category":1179,"commentCount":89,"date":1180,"description":12,"excerpt":1181,"extension":1182,"filenames":1183,"hidden":1184,"image":1185,"meta":1187,"minutes":142,"navigation":563,"path":1188,"seo":1189,"showCategory":1183,"stem":1190,"tags":1191,"updated":1183,"url":1194,"wordCount":1195,"__hash__":1196},"content\u002Fblog\u002F2018\u002Fwordpress-to-jekyll-search.md","WordPress to Jekyll part 3 - Site search",{"type":7,"value":8,"toc":1172},"minimark",[9,13,18,29,32,36,44,53,57,69,76,238,254,277,281,284,292,295,1142,1146,1149,1154,1157,1163,1168],[10,11,12],"p",{},"Site search is a feature that WordPress got right. Analytics also tells me it is popular. A static site is at a disadvantage, but we have some options to address that.",[14,15,17],"h2",{"id":16},"considering-options","Considering options",[10,19,20,21,28],{},"My first consideration was to use Google Site Search but it was ",[22,23,27],"a",{"href":24,"rel":25},"https:\u002F\u002Fsearchengineland.com\u002Fgoogle-sunset-google-site-search-product-recommends-ad-supported-custom-search-engine-269834",[26],"nofollow","deprecated last year",". There are alternative options, but few are free. I agree that people should be paid for their services, something has to keep the lights on, but a small personal blog with no income stream can't justify this cost.",[10,30,31],{},"My next thought was to generate reverse-index JSON files during building. Client-side JavaScript would utilize them as the user types in the search box. It's an idea I might come back to, but the migration had already taken longer than I anticipated, and I like to ship fast and often :)",[14,33,35],{"id":34},"algolia","Algolia",[10,37,38,39,43],{},"I soon came across ",[22,40,35],{"href":41,"rel":42},"https:\u002F\u002Falgolia.com",[26]," which, provides a simple API and free tier. Crucially they also supply a Jekyll plug-in to generate the necessary search indexes! Awesome.",[10,45,46,47,52],{},"Set-up was a breeze! Algolia have a specific, useful ",[22,48,51],{"href":49,"rel":50},"https:\u002F\u002Fcommunity.algolia.com\u002Fjekyll-algolia\u002Fgetting-started.html",[26],"guide to indexing with Jekyll",". Once you sign-up, you'll need to configure indexing and integrate it with your site.",[14,54,56],{"id":55},"index-integration","Index integration",[10,58,59,60,64,65,68],{},"Firstly, install the ",[61,62,63],"code",{},"jekyll-algolia"," gem making sure to specify it in your ",[61,66,67],{},"gemfile",".",[10,70,71,72,75],{},"Then configure your Jekyll ",[61,73,74],{},"_config.yml"," so it knows what to index and where as well as what document attributes are significant:",[77,78,83],"pre",{"className":79,"code":80,"language":81,"meta":82,"style":82},"language-yml shiki shiki-themes everforest-light dracula","algolia:\n  application_id: { your-algolia-app-id }\n  index_name: { your-algolia-index-name }\n  settings:\n    searchableAttributes:\n      - title\n      - excerpt_text\n      - headings\n      - content\n      - categories\n      - tags\n    attributesForFaceting:\n      - type\n      - searchable(categories)\n      - searchable(tags)\n      - searchable(title)\n","yml","",[61,84,85,97,117,132,140,148,158,166,174,182,190,198,206,214,222,230],{"__ignoreMap":82},[86,87,90,93],"span",{"class":88,"line":89},"line",1,[86,91,34],{"class":92},"sJVTy",[86,94,96],{"class":95},"s6tel",":\n",[86,98,100,103,106,110,114],{"class":88,"line":99},2,[86,101,102],{"class":92},"  application_id",[86,104,105],{"class":95},":",[86,107,109],{"class":108},"s6Vpi"," { ",[86,111,113],{"class":112},"sJQOs","your-algolia-app-id",[86,115,116],{"class":108}," }\n",[86,118,120,123,125,127,130],{"class":88,"line":119},3,[86,121,122],{"class":92},"  index_name",[86,124,105],{"class":95},[86,126,109],{"class":108},[86,128,129],{"class":112},"your-algolia-index-name",[86,131,116],{"class":108},[86,133,135,138],{"class":88,"line":134},4,[86,136,137],{"class":92},"  settings",[86,139,96],{"class":95},[86,141,143,146],{"class":88,"line":142},5,[86,144,145],{"class":92},"    searchableAttributes",[86,147,96],{"class":95},[86,149,151,155],{"class":88,"line":150},6,[86,152,154],{"class":153},"s6f1k","      -",[86,156,157],{"class":112}," title\n",[86,159,161,163],{"class":88,"line":160},7,[86,162,154],{"class":153},[86,164,165],{"class":112}," excerpt_text\n",[86,167,169,171],{"class":88,"line":168},8,[86,170,154],{"class":153},[86,172,173],{"class":112}," headings\n",[86,175,177,179],{"class":88,"line":176},9,[86,178,154],{"class":153},[86,180,181],{"class":112}," content\n",[86,183,185,187],{"class":88,"line":184},10,[86,186,154],{"class":153},[86,188,189],{"class":112}," categories\n",[86,191,193,195],{"class":88,"line":192},11,[86,194,154],{"class":153},[86,196,197],{"class":112}," tags\n",[86,199,201,204],{"class":88,"line":200},12,[86,202,203],{"class":92},"    attributesForFaceting",[86,205,96],{"class":95},[86,207,209,211],{"class":88,"line":208},13,[86,210,154],{"class":153},[86,212,213],{"class":112}," type\n",[86,215,217,219],{"class":88,"line":216},14,[86,218,154],{"class":153},[86,220,221],{"class":112}," searchable(categories)\n",[86,223,225,227],{"class":88,"line":224},15,[86,226,154],{"class":153},[86,228,229],{"class":112}," searchable(tags)\n",[86,231,233,235],{"class":88,"line":232},16,[86,234,154],{"class":153},[86,236,237],{"class":112}," searchable(title)\n",[10,239,240,241,244,245,249,250,253],{},"Finally, you'll need to run the indexing. You need to ensure the environment variable ",[61,242,243],{},"ALGOLIA_API_KEY"," is set to your private ",[246,247,248],"strong",{},"Admin API Key"," from your Algolia ",[246,251,252],{},"API Keys"," page, then run the following command after your static content is generated:",[77,255,259],{"className":256,"code":257,"language":258,"meta":82,"style":82},"language-bash shiki shiki-themes everforest-light dracula","bundle exec jekyll algolia\n","bash",[61,260,261],{"__ignoreMap":82},[86,262,263,267,271,274],{"class":88,"line":89},[86,264,266],{"class":265},"sS4Kt","bundle",[86,268,270],{"class":269},"sJFhe"," exec",[86,272,273],{"class":269}," jekyll",[86,275,276],{"class":269}," algolia\n",[14,278,280],{"id":279},"site-integration","Site integration",[10,282,283],{},"Wiring up the search box can be a little overwhelming as they have so many clients, options and APIs available. I went with a design that presents the results as you type like this:",[285,286],"img",{"src":287,"alt":288,"className":289,"style":291},"https:\u002F\u002Fimg.damieng.com\u002Fblog\u002FAlgoliaResults.png","Screenshot of DamienG.com site search",[290],"screenshot","width: 50%",[10,293,294],{},"This design uses two of their libraries - the search lite and the search helper plus some code to wire it up to my search box and render the results in a drop-down list. I'll probably further tweak the result format and maybe consider wiring up to the API directly as two libraries for such a simple use case seems a bit overkill.",[77,296,300],{"className":297,"code":298,"language":299,"meta":82,"style":82},"language-html shiki shiki-themes everforest-light dracula","\u003Cscript src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Falgoliasearch@3\u002Fdist\u002FalgoliasearchLite.min.js\">\u003C\u002Fscript>\n\u003Cscript src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Falgoliasearch-helper@2.26.0\u002Fdist\u002Falgoliasearch.helper.min.js\">\u003C\u002Fscript>\n\u003Cscript>\n  let searchForm = document.getElementById(\"search-form\")\n  let hits = document.getElementById(\"hits\")\n  let algolia = algoliasearch(\n    \"{your-algolia-app-id}\",\n    \"{your-algolia-search-token}\"\n  )\n  let helper = algoliasearchHelper(algolia, \"{your-algolia-index-name}\", {\n    hitsPerPage: 10,\n    maxValuesPerFacet: 1,\n    getRankingInfo: false,\n  })\n  helper.on(\"result\", searchCallback)\n\n  function runSearch() {\n    let term = document.getElementById(\"s\").value\n    if (term.length > 0) helper.setQuery(term).search()\n    else searchForm.classList.remove(\"open\")\n  }\n\n  function searchCallback(results) {\n    if (results.hits.length === 0) {\n      hits.innerHTML = \"\u003Cli>\u003Ca>No results!\u003C\u002Fa>\u003C\u002Fli>\"\n    } else {\n      renderHits(results)\n      searchForm.classList.add(\"open\")\n    }\n    let credits = document.createElement(\"li\")\n    credits.innerHTML =\n      \"\u003Cimg src=\\\"https:\u002F\u002Fwww.algolia.com\u002Fstatic_assets\u002Fimages\u002Fpress\u002Fdownloads\u002Fsearch-by-algolia.svg\\\" onclick=\\\"window.open('https:\u002F\u002Fwww.algolia.com', '_blank')\\\" \u002F>\"\n    hits.appendChild(credits)\n  }\n\n  function renderHits(results) {\n    hits.innerHTML = \"\"\n    for (let i = 0; i \u003C results.hits.length; i++) {\n      let li = document.createElement(\"li\")\n      let title = document.createElement(\"a\")\n      title.innerHTML = results.hits[i]._highlightResult.title.value\n      title.href = results.hits[i].url\n      li.appendChild(title)\n      hits.appendChild(li)\n    }\n  }\n\u003C\u002Fscript>\n","html",[61,301,302,337,360,368,401,427,442,455,465,470,495,508,520,532,537,559,565,581,616,657,687,693,698,716,741,762,773,782,807,813,841,854,886,900,905,910,926,940,988,1015,1041,1074,1097,1110,1122,1127,1132],{"__ignoreMap":82},[86,303,304,308,312,316,320,324,327,329,332,334],{"class":88,"line":89},[86,305,307],{"class":306},"sNvvj","\u003C",[86,309,311],{"class":310},"s9HRq","script",[86,313,315],{"class":314},"sr8dK"," src",[86,317,319],{"class":318},"sHDCx","=",[86,321,323],{"class":322},"sciFF","\"",[86,325,326],{"class":112},"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Falgoliasearch@3\u002Fdist\u002FalgoliasearchLite.min.js",[86,328,323],{"class":322},[86,330,331],{"class":306},">\u003C\u002F",[86,333,311],{"class":310},[86,335,336],{"class":306},">\n",[86,338,339,341,343,345,347,349,352,354,356,358],{"class":88,"line":99},[86,340,307],{"class":306},[86,342,311],{"class":310},[86,344,315],{"class":314},[86,346,319],{"class":318},[86,348,323],{"class":322},[86,350,351],{"class":112},"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Falgoliasearch-helper@2.26.0\u002Fdist\u002Falgoliasearch.helper.min.js",[86,353,323],{"class":322},[86,355,331],{"class":306},[86,357,311],{"class":310},[86,359,336],{"class":306},[86,361,362,364,366],{"class":88,"line":119},[86,363,307],{"class":306},[86,365,311],{"class":310},[86,367,336],{"class":306},[86,369,370,373,376,378,381,384,387,390,393,396,398],{"class":88,"line":134},[86,371,372],{"class":310},"  let",[86,374,375],{"class":108}," searchForm ",[86,377,319],{"class":310},[86,379,380],{"class":108}," document",[86,382,68],{"class":383},"sdCVw",[86,385,386],{"class":265},"getElementById",[86,388,389],{"class":108},"(",[86,391,323],{"class":392},"spsLl",[86,394,395],{"class":269},"search-form",[86,397,323],{"class":392},[86,399,400],{"class":108},")\n",[86,402,403,405,408,410,412,414,416,418,420,423,425],{"class":88,"line":142},[86,404,372],{"class":310},[86,406,407],{"class":108}," hits ",[86,409,319],{"class":310},[86,411,380],{"class":108},[86,413,68],{"class":383},[86,415,386],{"class":265},[86,417,389],{"class":108},[86,419,323],{"class":392},[86,421,422],{"class":269},"hits",[86,424,323],{"class":392},[86,426,400],{"class":108},[86,428,429,431,434,436,439],{"class":88,"line":150},[86,430,372],{"class":310},[86,432,433],{"class":108}," algolia ",[86,435,319],{"class":310},[86,437,438],{"class":265}," algoliasearch",[86,440,441],{"class":108},"(\n",[86,443,444,447,450,452],{"class":88,"line":160},[86,445,446],{"class":392},"    \"",[86,448,449],{"class":269},"{your-algolia-app-id}",[86,451,323],{"class":392},[86,453,454],{"class":108},",\n",[86,456,457,459,462],{"class":88,"line":168},[86,458,446],{"class":392},[86,460,461],{"class":269},"{your-algolia-search-token}",[86,463,464],{"class":392},"\"\n",[86,466,467],{"class":88,"line":176},[86,468,469],{"class":108},"  )\n",[86,471,472,474,477,479,482,485,487,490,492],{"class":88,"line":184},[86,473,372],{"class":310},[86,475,476],{"class":108}," helper ",[86,478,319],{"class":310},[86,480,481],{"class":265}," algoliasearchHelper",[86,483,484],{"class":108},"(algolia, ",[86,486,323],{"class":392},[86,488,489],{"class":269},"{your-algolia-index-name}",[86,491,323],{"class":392},[86,493,494],{"class":108},", {\n",[86,496,497,500,502,506],{"class":88,"line":192},[86,498,499],{"class":108},"    hitsPerPage",[86,501,105],{"class":95},[86,503,505],{"class":504},"s3Ipq"," 10",[86,507,454],{"class":108},[86,509,510,513,515,518],{"class":88,"line":200},[86,511,512],{"class":108},"    maxValuesPerFacet",[86,514,105],{"class":95},[86,516,517],{"class":504}," 1",[86,519,454],{"class":108},[86,521,522,525,527,530],{"class":88,"line":208},[86,523,524],{"class":108},"    getRankingInfo",[86,526,105],{"class":95},[86,528,529],{"class":504}," false",[86,531,454],{"class":108},[86,533,534],{"class":88,"line":216},[86,535,536],{"class":108},"  })\n",[86,538,539,542,544,547,549,551,554,556],{"class":88,"line":224},[86,540,541],{"class":108},"  helper",[86,543,68],{"class":383},[86,545,546],{"class":265},"on",[86,548,389],{"class":108},[86,550,323],{"class":392},[86,552,553],{"class":269},"result",[86,555,323],{"class":392},[86,557,558],{"class":108},", searchCallback)\n",[86,560,561],{"class":88,"line":232},[86,562,564],{"emptyLinePlaceholder":563},true,"\n",[86,566,568,572,575,578],{"class":88,"line":567},17,[86,569,571],{"class":570},"smiwp","  function",[86,573,574],{"class":265}," runSearch",[86,576,577],{"class":108},"()",[86,579,580],{"class":108}," {\n",[86,582,584,587,590,593,595,597,599,601,603,606,608,611,613],{"class":88,"line":583},18,[86,585,586],{"class":310},"    let",[86,588,589],{"class":108}," term",[86,591,592],{"class":310}," =",[86,594,380],{"class":108},[86,596,68],{"class":383},[86,598,386],{"class":265},[86,600,389],{"class":108},[86,602,323],{"class":392},[86,604,605],{"class":269},"s",[86,607,323],{"class":392},[86,609,610],{"class":108},")",[86,612,68],{"class":383},[86,614,615],{"class":108},"value\n",[86,617,619,622,625,627,630,633,636,638,641,643,646,649,651,654],{"class":88,"line":618},19,[86,620,621],{"class":570},"    if",[86,623,624],{"class":108}," (term",[86,626,68],{"class":383},[86,628,629],{"class":108},"length",[86,631,632],{"class":310}," >",[86,634,635],{"class":504}," 0",[86,637,610],{"class":108},[86,639,640],{"class":108}," helper",[86,642,68],{"class":383},[86,644,645],{"class":265},"setQuery",[86,647,648],{"class":108},"(term)",[86,650,68],{"class":383},[86,652,653],{"class":265},"search",[86,655,656],{"class":108},"()\n",[86,658,660,663,666,668,671,673,676,678,680,683,685],{"class":88,"line":659},20,[86,661,662],{"class":570},"    else",[86,664,665],{"class":108}," searchForm",[86,667,68],{"class":383},[86,669,670],{"class":108},"classList",[86,672,68],{"class":383},[86,674,675],{"class":265},"remove",[86,677,389],{"class":108},[86,679,323],{"class":392},[86,681,682],{"class":269},"open",[86,684,323],{"class":392},[86,686,400],{"class":108},[86,688,690],{"class":88,"line":689},21,[86,691,692],{"class":108},"  }\n",[86,694,696],{"class":88,"line":695},22,[86,697,564],{"emptyLinePlaceholder":563},[86,699,701,703,706,708,712,714],{"class":88,"line":700},23,[86,702,571],{"class":570},[86,704,705],{"class":265}," searchCallback",[86,707,389],{"class":108},[86,709,711],{"class":710},"s7cAX","results",[86,713,610],{"class":108},[86,715,580],{"class":108},[86,717,719,721,724,726,728,730,732,735,737,739],{"class":88,"line":718},24,[86,720,621],{"class":570},[86,722,723],{"class":108}," (results",[86,725,68],{"class":383},[86,727,422],{"class":108},[86,729,68],{"class":383},[86,731,629],{"class":108},[86,733,734],{"class":310}," ===",[86,736,635],{"class":504},[86,738,610],{"class":108},[86,740,580],{"class":108},[86,742,744,747,749,752,754,757,760],{"class":88,"line":743},25,[86,745,746],{"class":108},"      hits",[86,748,68],{"class":383},[86,750,751],{"class":108},"innerHTML",[86,753,592],{"class":310},[86,755,756],{"class":392}," \"",[86,758,759],{"class":269},"\u003Cli>\u003Ca>No results!\u003C\u002Fa>\u003C\u002Fli>",[86,761,464],{"class":392},[86,763,765,768,771],{"class":88,"line":764},26,[86,766,767],{"class":108},"    }",[86,769,770],{"class":570}," else",[86,772,580],{"class":108},[86,774,776,779],{"class":88,"line":775},27,[86,777,778],{"class":265},"      renderHits",[86,780,781],{"class":108},"(results)\n",[86,783,785,788,790,792,794,797,799,801,803,805],{"class":88,"line":784},28,[86,786,787],{"class":108},"      searchForm",[86,789,68],{"class":383},[86,791,670],{"class":108},[86,793,68],{"class":383},[86,795,796],{"class":265},"add",[86,798,389],{"class":108},[86,800,323],{"class":392},[86,802,682],{"class":269},[86,804,323],{"class":392},[86,806,400],{"class":108},[86,808,810],{"class":88,"line":809},29,[86,811,812],{"class":108},"    }\n",[86,814,816,818,821,823,825,827,830,832,834,837,839],{"class":88,"line":815},30,[86,817,586],{"class":310},[86,819,820],{"class":108}," credits",[86,822,592],{"class":310},[86,824,380],{"class":108},[86,826,68],{"class":383},[86,828,829],{"class":265},"createElement",[86,831,389],{"class":108},[86,833,323],{"class":392},[86,835,836],{"class":269},"li",[86,838,323],{"class":392},[86,840,400],{"class":108},[86,842,844,847,849,851],{"class":88,"line":843},31,[86,845,846],{"class":108},"    credits",[86,848,68],{"class":383},[86,850,751],{"class":108},[86,852,853],{"class":310}," =\n",[86,855,857,860,863,866,869,871,874,876,879,881,884],{"class":88,"line":856},32,[86,858,859],{"class":392},"      \"",[86,861,862],{"class":269},"\u003Cimg src=",[86,864,865],{"class":318},"\\\"",[86,867,868],{"class":269},"https:\u002F\u002Fwww.algolia.com\u002Fstatic_assets\u002Fimages\u002Fpress\u002Fdownloads\u002Fsearch-by-algolia.svg",[86,870,865],{"class":318},[86,872,873],{"class":269}," onclick=",[86,875,865],{"class":318},[86,877,878],{"class":269},"window.open('https:\u002F\u002Fwww.algolia.com', '_blank')",[86,880,865],{"class":318},[86,882,883],{"class":269}," \u002F>",[86,885,464],{"class":392},[86,887,889,892,894,897],{"class":88,"line":888},33,[86,890,891],{"class":108},"    hits",[86,893,68],{"class":383},[86,895,896],{"class":265},"appendChild",[86,898,899],{"class":108},"(credits)\n",[86,901,903],{"class":88,"line":902},34,[86,904,692],{"class":108},[86,906,908],{"class":88,"line":907},35,[86,909,564],{"emptyLinePlaceholder":563},[86,911,913,915,918,920,922,924],{"class":88,"line":912},36,[86,914,571],{"class":570},[86,916,917],{"class":265}," renderHits",[86,919,389],{"class":108},[86,921,711],{"class":710},[86,923,610],{"class":108},[86,925,580],{"class":108},[86,927,929,931,933,935,937],{"class":88,"line":928},37,[86,930,891],{"class":108},[86,932,68],{"class":383},[86,934,751],{"class":108},[86,936,592],{"class":310},[86,938,939],{"class":392}," \"\"\n",[86,941,943,946,949,952,955,957,959,962,964,967,970,972,974,976,979,981,984,986],{"class":88,"line":942},38,[86,944,945],{"class":570},"    for",[86,947,948],{"class":108}," (",[86,950,951],{"class":310},"let",[86,953,954],{"class":108}," i",[86,956,592],{"class":310},[86,958,635],{"class":504},[86,960,961],{"class":108},";",[86,963,954],{"class":108},[86,965,966],{"class":310}," \u003C",[86,968,969],{"class":108}," results",[86,971,68],{"class":383},[86,973,422],{"class":108},[86,975,68],{"class":383},[86,977,978],{"class":108},"length;",[86,980,954],{"class":108},[86,982,983],{"class":310},"++",[86,985,610],{"class":108},[86,987,580],{"class":108},[86,989,991,994,997,999,1001,1003,1005,1007,1009,1011,1013],{"class":88,"line":990},39,[86,992,993],{"class":310},"      let",[86,995,996],{"class":108}," li",[86,998,592],{"class":310},[86,1000,380],{"class":108},[86,1002,68],{"class":383},[86,1004,829],{"class":265},[86,1006,389],{"class":108},[86,1008,323],{"class":392},[86,1010,836],{"class":269},[86,1012,323],{"class":392},[86,1014,400],{"class":108},[86,1016,1018,1020,1023,1025,1027,1029,1031,1033,1035,1037,1039],{"class":88,"line":1017},40,[86,1019,993],{"class":310},[86,1021,1022],{"class":108}," title",[86,1024,592],{"class":310},[86,1026,380],{"class":108},[86,1028,68],{"class":383},[86,1030,829],{"class":265},[86,1032,389],{"class":108},[86,1034,323],{"class":392},[86,1036,22],{"class":269},[86,1038,323],{"class":392},[86,1040,400],{"class":108},[86,1042,1044,1047,1049,1051,1053,1055,1057,1060,1062,1065,1067,1070,1072],{"class":88,"line":1043},41,[86,1045,1046],{"class":108},"      title",[86,1048,68],{"class":383},[86,1050,751],{"class":108},[86,1052,592],{"class":310},[86,1054,969],{"class":108},[86,1056,68],{"class":383},[86,1058,1059],{"class":108},"hits[i]",[86,1061,68],{"class":383},[86,1063,1064],{"class":108},"_highlightResult",[86,1066,68],{"class":383},[86,1068,1069],{"class":108},"title",[86,1071,68],{"class":383},[86,1073,615],{"class":108},[86,1075,1077,1079,1081,1084,1086,1088,1090,1092,1094],{"class":88,"line":1076},42,[86,1078,1046],{"class":108},[86,1080,68],{"class":383},[86,1082,1083],{"class":108},"href",[86,1085,592],{"class":310},[86,1087,969],{"class":108},[86,1089,68],{"class":383},[86,1091,1059],{"class":108},[86,1093,68],{"class":383},[86,1095,1096],{"class":108},"url\n",[86,1098,1100,1103,1105,1107],{"class":88,"line":1099},43,[86,1101,1102],{"class":108},"      li",[86,1104,68],{"class":383},[86,1106,896],{"class":265},[86,1108,1109],{"class":108},"(title)\n",[86,1111,1113,1115,1117,1119],{"class":88,"line":1112},44,[86,1114,746],{"class":108},[86,1116,68],{"class":383},[86,1118,896],{"class":265},[86,1120,1121],{"class":108},"(li)\n",[86,1123,1125],{"class":88,"line":1124},45,[86,1126,812],{"class":108},[86,1128,1130],{"class":88,"line":1129},46,[86,1131,692],{"class":108},[86,1133,1135,1138,1140],{"class":88,"line":1134},47,[86,1136,1137],{"class":306},"\u003C\u002F",[86,1139,311],{"class":310},[86,1141,336],{"class":306},[14,1143,1145],{"id":1144},"analytics","Analytics",[10,1147,1148],{},"I'm a big proponent of analytics when used purely for engineering improvement, and Algolia provides a useful dashboard to let you know how performance is doing, what topics are being searched for and what searches might not be returning useful content.",[285,1150],{"src":1151,"title":1152,"className":1153,"style":291},"https:\u002F\u002Fimg.damieng.com\u002Fblog\u002FAlgoliaDashboard.png","Screenshot of my Algolia dashboard",[290],[10,1155,1156],{},"I'll dig through that when I have a little more time.",[10,1158,1159],{},[1160,1161,1162],"em",{},"[)amien",[10,1164,1165],{},[246,1166,1167],{},"Note: I do not receive any compensation from Algolia either directly or via any referral program. I'm just a happy user.",[1169,1170,1171],"style",{},"html pre.shiki code .sJVTy, html code.shiki .sJVTy{--shiki-default:#F57D26;--shiki-dark:#8BE9FD}html pre.shiki code .s6tel, html code.shiki .s6tel{--shiki-default:#939F91;--shiki-dark:#FF79C6}html pre.shiki code .s6Vpi, html code.shiki .s6Vpi{--shiki-default:#5C6A72;--shiki-dark:#F8F8F2}html pre.shiki code .sJQOs, html code.shiki .sJQOs{--shiki-default:#8DA101;--shiki-dark:#F1FA8C}html pre.shiki code .s6f1k, html code.shiki .s6f1k{--shiki-default:#35A77C;--shiki-dark:#FF79C6}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sS4Kt, html code.shiki .sS4Kt{--shiki-default:#8DA101;--shiki-dark:#50FA7B}html pre.shiki code .sJFhe, html code.shiki .sJFhe{--shiki-default:#DFA000;--shiki-dark:#F1FA8C}html pre.shiki code .sNvvj, html code.shiki .sNvvj{--shiki-default:#8DA101;--shiki-dark:#F8F8F2}html pre.shiki code .s9HRq, html code.shiki .s9HRq{--shiki-default:#F57D26;--shiki-dark:#FF79C6}html pre.shiki code .sr8dK, html code.shiki .sr8dK{--shiki-default:#DFA000;--shiki-default-font-style:inherit;--shiki-dark:#50FA7B;--shiki-dark-font-style:italic}html pre.shiki code .sHDCx, html code.shiki .sHDCx{--shiki-default:#8DA101;--shiki-dark:#FF79C6}html pre.shiki code .sciFF, html code.shiki .sciFF{--shiki-default:#8DA101;--shiki-dark:#E9F284}html pre.shiki code .sdCVw, html code.shiki .sdCVw{--shiki-default:#939F91;--shiki-dark:#F8F8F2}html pre.shiki code .spsLl, html code.shiki .spsLl{--shiki-default:#DFA000;--shiki-dark:#E9F284}html pre.shiki code .s3Ipq, html code.shiki .s3Ipq{--shiki-default:#DF69BA;--shiki-dark:#BD93F9}html pre.shiki code .smiwp, html code.shiki .smiwp{--shiki-default:#F85552;--shiki-dark:#FF79C6}html pre.shiki code .s7cAX, html code.shiki .s7cAX{--shiki-default:#5C6A72;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic}",{"title":82,"searchDepth":99,"depth":99,"links":1173},[1174,1175,1176,1177,1178],{"id":16,"depth":99,"text":17},{"id":34,"depth":99,"text":35},{"id":55,"depth":99,"text":56},{"id":279,"depth":99,"text":280},{"id":1144,"depth":99,"text":1145},"Development","2018-05-29T08:00:00-08:00","[object Object]","md",null,false,{"src":287,"alt":288,"className":1186,"style":291},[290],{},"\u002Fblog\u002F2018\u002Fwordpress-to-jekyll-search",{"title":5,"description":12},"blog\u002F2018\u002Fwordpress-to-jekyll-search",[1192,1193],"WordPress","Jekyll","\u002Fblog\u002F2018\u002Fwordpress-to-jekyll-search\u002F",917,"n5oZB-qUgCUxEyql7BaGBgz3n4GxrWwFUchHjBoJKys",[1198,1202,1206],{"title":1199,"date":1200,"url":1201},"Transactions in the MongoDB EF Core Provider","2025-10-25","\u002Fblog\u002F2025\u002Fmongodb-explicit-transactions\u002F",{"title":1203,"date":1204,"url":1205},"Queryable Encryption with the MongoDB EF Core Provider","2025-09-22","\u002Fblog\u002F2025\u002Fmongodb-queryable-encryption\u002F",{"title":1207,"date":1208,"url":1209},"Lazy Loading with EF Core Proxies","2025-04-02","\u002Fblog\u002F2025\u002Fef-proxies\u002F",[],1780900525973]