<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Search Nuggets &#187; recipe app</title>
	<atom:link href="http://blog.comperiosearch.com/blog/tag/recipe-app/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.comperiosearch.com</link>
	<description>A blog about Search as THE solution</description>
	<lastBuildDate>Mon, 13 Jun 2016 08:59:45 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>Search without search box: Recipe App  &#8211; Alpha version</title>
		<link>http://blog.comperiosearch.com/blog/2014/12/02/search-without-search-box-recipe-app-alpha/</link>
		<comments>http://blog.comperiosearch.com/blog/2014/12/02/search-without-search-box-recipe-app-alpha/#comments</comments>
		<pubDate>Tue, 02 Dec 2014 14:44:48 +0000</pubDate>
		<dc:creator><![CDATA[Espen Klem]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[recipe app]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[search box]]></category>
		<category><![CDATA[search interface]]></category>
		<category><![CDATA[search ux]]></category>
		<category><![CDATA[search without search box]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=3078</guid>
		<description><![CDATA[First thing first: I really like search as a technology. Not so much because how it helps us today, but how it can help us tomorrow. Especially on the UX front, stuff moves slowly. One of the biggest issues, in my mind, is the empty search box. That&#8217;s why I tend to look for solutions [...]]]></description>
				<content:encoded><![CDATA[<p>First thing first: I really like search as a technology. Not so much because how it helps us today, but how it can help us tomorrow. Especially on the UX front, stuff moves slowly. One of the biggest issues, in my mind, is the empty search box. That&#8217;s why I tend to look for solutions where you have search without search box, or functions and tools that extends the search box.</p>
<div id="attachment_3102" style="width: 609px" class="wp-caption alignnone"><img class="wp-image-3102 size-full" src="http://blog.comperiosearch.com/wp-content/uploads/2014/12/Screen-Shot-2014-12-02-at-13.34.13.png" alt="Illustration: The empty search box by Google" width="599" height="95" /><p class="wp-caption-text">The empty search box by Google</p></div>
<h2>The problem with an empty search box</h2>
<p>So, what&#8217;s the biggest problem with the empty search box? In my mind it doesn&#8217;t give a hint about what&#8217;s the possible outcome of asking a question to the search engine. Think about these five questions being different search boxes:</p>
<ol>
<li>Soooo&#8230;?</li>
<li>What would you like?</li>
<li>What would you like for desert?</li>
<li>Do you like ice cream for desert?</li>
<li>Do you like pistachio ice cream for desert?</li>
</ol>
<p>The first question is the most open ended, and is the equivalent of the empty search box in a general search engine. The one with all of the worlds knowledge at hand. Second one hints that the answers of your request lies within your likings. Third, the questions get semi-concrete, and fourth and fifth, you&#8217;re asked a yes/no-question.</p>
<h2>A search without search box working quite well</h2>
<p>The recipe app asks you if you like any of these recipes based on two variables (time of year + place you harvest the food). We know the date and make an assumption about place and tell you that we&#8217;ve chosen these variables. Then we give you a couple of extra variables to play with to refine the search a bit more.</p>
<p>So far, the content seems to trigger peoples imagination and the swipe interaction is easy enough to do many times, although not very well communicated so far. When I normally give people a working search prototype, they do 2 &#8211; 5 search queries. Now I see between 5 &#8211; 15. That&#8217;s great stuff, and maybe a search without search box is actually a good idea?</p>
<div></div>
<div id="attachment_3088" style="width: 610px" class="wp-caption alignnone"><a href="http://recipe.comperiosearch.com/"><img class="wp-image-3088" src="http://blog.comperiosearch.com/wp-content/uploads/2014/12/Screen-Shot-2014-12-01-at-15.51.27.png" alt="Illustration: Screenshot of Recipe App - Search without search box." width="600" height="411" /></a><p class="wp-caption-text">A screenshot of the Recipe App search solution without a search box</p></div>
<h2></h2>
<h2>Known bugs and weaknesses</h2>
<ul>
<li><strong>URL stays the same</strong><br />
No way of sharing a specific search (month+place+filters)</li>
<li><strong>Buggy visual relevance</strong><br />
For desktop and pad, all recipes with match on three ingredients or more should have full width result view.</li>
<li><strong>Not all recipes indexed</strong><br />
HTML for the recipes has changed. We didn&#8217;t have time to figure out all the new characteristics of the new HTML, so a lot of recipes were not indexed.</li>
<li><strong>Visual snag on time navigator</strong><br />
When selecting &#8220;short&#8221;, &#8220;medium&#8221; or &#8220;long&#8221; time to prepare recipe it should collapse as with the type navigator.</li>
<li><strong>Swipe hangs every now and then</strong><br />
The swipe library is either not tuned perfectly or a little fragile. Easy to get into a state where it stops working.</li>
<li><strong>All ingredients equally important<br />
</strong>&#8220;Oregano&#8221; and &#8220;Chicken wings&#8221; equally important. That results in some not-so-desired search results.</li>
<li><strong>Google Analytics and single page app not fixed</strong><br />
We log one pageview per user since it&#8217;s a single page app. With a rewriting of the URL this can be easily fixed.</li>
<li><strong>Design and UX</strong><br />
It&#8217;s just a makeshift design to communicate the idea. It should better explain interaction and season+place.</li>
</ul>
<p>Any comments? We&#8217;d love to get your input! Check out the solution, <a href="http://recipe.comperiosearch.com/">the actual recipe app</a>, or you can check out the other blog posts about the <a href="http://blog.comperiosearch.com/blog/tag/recipe-app/">Recipe App</a>. There&#8217;s a lot of both search domain-, tech- and UX-stuff.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2014/12/02/search-without-search-box-recipe-app-alpha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Discovery engine that actually works? Recipe app to the rescue!</title>
		<link>http://blog.comperiosearch.com/blog/2014/07/18/discovery-engine-that-actually-works/</link>
		<comments>http://blog.comperiosearch.com/blog/2014/07/18/discovery-engine-that-actually-works/#comments</comments>
		<pubDate>Fri, 18 Jul 2014 11:26:57 +0000</pubDate>
		<dc:creator><![CDATA[Espen Klem]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[instant search]]></category>
		<category><![CDATA[recipe app]]></category>
		<category><![CDATA[suggestion engine]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=2738</guid>
		<description><![CDATA[Great day, our seasonal food recipe search app, or just &#8220;Recipe app&#8221; for short, is in public beta&#8230; or maybe only a late alpha release. Anyway, it&#8217;s mature enough so you can get an idea of how it will look and work. Seeing others use it, I&#8217;m inclined to call it a recipe discovery engine. [...]]]></description>
				<content:encoded><![CDATA[<p>Great day, our seasonal food recipe search app, or just &#8220;Recipe app&#8221; for short, is in public beta&#8230; or maybe only a <a href="http://en.wikipedia.org/wiki/Software_release_life_cycle">late alpha release</a>. Anyway, it&#8217;s mature enough so you can get an idea of how it will look and work. Seeing others use it, I&#8217;m inclined to call it a recipe discovery engine.</p>
<p><strong>Recipe app link: <a href="http://recipe.comperiosearch.com">recipe.comperiosearch.com</a></strong></p>
<div id="attachment_2765" style="width: 510px" class="wp-caption alignnone"><a href="http://youtu.be/w5zC8EiPfkU"><img class="wp-image-2765 size-full" src="http://blog.comperiosearch.com/wp-content/uploads/2014/07/Screen-Shot-2014-07-18-at-13.19.03-e1405682496908.png" alt="Illustration - responsive design for the discovery engine" width="500" height="298" /></a><p class="wp-caption-text">Responsive design test done in HTML5, CSS3 and JavaScript. A discovery engine in the making?</p></div>
<p>We have gotten a lot of knowledge, both tech and UX. Latest of many findings was <a href="http://blog.comperiosearch.com/blog/2014/07/11/dictatorial-control-recipe-search-results-using-elasticsearch-function_score/">the custom scoring function in elasticsearch</a>. Hopefully, we&#8217;ll learn something within the business of food recipes, and we&#8217;ve received a lot of info from <a href="https://www.facebook.com/sjuves.oppskrift?fref=ts">Christopher Sjuve at Klikk.no</a>, the site we crawl for content to our search index. All blog posts on the app available under the <a href="http://blog.comperiosearch.com/blog/tag/recipe-app/">&#8220;recipe app&#8221; tag</a>.</p>
<h2>Takeaways</h2>
<p>The main intent of the app, when the idea was born back in 2011 or 2010, was to discover recipes or more general: To make a real content discovery engine based on search. Recipes that you didn&#8217;t know of or think of when planning a meal. And recipes that uses ingredients in season, thus making it relevant. In other words, the best, cheapest and most tasteful ingredients. While we continue to discover a lot of issues with how we thought the app should work technically, it really seems it can work for the end user.</p>
<h2>A general and common issue with search solved</h2>
<p>Mostly, with search, you get no real discovery. You rediscover stuff you already knew where there, or you find stuff you anticipated where there. But what with all the content unknown or not anticipated by the user? Nowhere in that process will regular search find stuff suitable for you that you initially didn&#8217;t think of. That&#8217;s a problem because you never touch a vast majority of possibly valuable content in your search index.</p>
<h2>A real content discovery engine</h2>
<p>So, what does this have to do with our recipe app? By picking the app, we know two facts upfront: The user wants food recipes, or make/serve food, to be more specific. And we know the time of year. This puts us in the position to make do a real instant search. The first screen you see is a search query already executed. The questions (search query) asked by the app to the index are then &#8220;recipes with the most in season ingredients for this month found on i.e. a farm&#8221;. We choose the farm since this is what resembles a supermarket the most. After that we let the user play with known constraints like type of meals and preparation time in addition to change place where ingredients are found and time of year.</p>
<p>More playfull approach. People swipe (when they understand that they can swipe, yes one of the UX issues) a lot from what we have seen. We&#8217;ll add some Google Analytics to the app soon, so we can track actual use.</p>
<div style="width: 323px" class="wp-caption alignnone"><img src="https://farm4.staticflickr.com/3853/14688396223_829d8d9709.jpg" alt="Illustration - testing the recipe discovery engine" width="313" height="500" /><p class="wp-caption-text">Testing on a Sony Xperia Tab Z. A lot of small bugs and a bit noisy.</p></div>
<h2>We&#8217;d love your feedback!</h2>
<p>So, what do you think of our recipe discovery engine? Is it just that, a discovery engine? Are we on to something? Do you think it would work? What should we change? Don&#8217;t be shy, give us a real uppercut feedback in the comment field below!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2014/07/18/discovery-engine-that-actually-works/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dictatorial control over recipe search results using elasticsearch and function_score</title>
		<link>http://blog.comperiosearch.com/blog/2014/07/11/dictatorial-control-recipe-search-results-using-elasticsearch-function_score/</link>
		<comments>http://blog.comperiosearch.com/blog/2014/07/11/dictatorial-control-recipe-search-results-using-elasticsearch-function_score/#comments</comments>
		<pubDate>Fri, 11 Jul 2014 06:02:06 +0000</pubDate>
		<dc:creator><![CDATA[Christoffer Vig]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Elasticsearch]]></category>
		<category><![CDATA[recipe app]]></category>
		<category><![CDATA[relevance]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=2723</guid>
		<description><![CDATA[Once the design for the seasonal recipes app started coming into place, we soon saw there was something fishy about the results. Elasticsearch and custom relevancy to the rescue! Warning! Dynamic scripting has been disabled by default in  elasticsearch version 1.4.3. Using the technique in this article now requires some extra steps. Details on the Elastic blog. [...]]]></description>
				<content:encoded><![CDATA[<p>Once the design for <a href="http://recipe.comperiosearch.com">the seasonal recipes app </a> started coming into place, we soon saw there was something fishy about the results. Elasticsearch and custom relevancy to the rescue!<br />
<span id="more-2723"></span></p>
<p><em>Warning! Dynamic scripting has been disabled by default in  elasticsearch version 1.4.3</em>. <em>Using the technique in this article now requires some extra steps. Details on the <a href="https://www.elastic.co/blog/running-groovy-scripts-without-dynamic-scripting/">Elastic blog</a>.</em></p>
<p><a title="Relevance tuning in the search domain. What is it exactly?" href="http://blog.comperiosearch.com/blog/2014/03/07/recipe-app-relevance-tuning-what-is-it-exactly/">Our design </a>explains that we need results to be sorted by number of ingredients, and then by date, with the most recent recipes on top, scoring recipes from 2008 at bottom. The original attempt involved a simple &#8220;terms&#8221; query.</p>
<p>Investigating the results for July, in the garden, gave us recipes for jam at the top, with the count of matching ingredients being only 3 for the top hit. The list of ingredients in season for July in the garden is quite long, but all you need to know is that it contains &#8220;<a href="http://en.wikipedia.org/wiki/Redcurrant">rips</a>&#8220;, a little red sour berry, and &#8220;poteter&#8221;, that is potatoes.</p>
<script src="https://gist.github.com/85138ca283157f4db3ad.js?file=terms"></script>
<p>You can find the queries used in this post at <a href="http://sense.qbox.io/gist/ed20280e523b7821791a161ecf129068b06e2316">http://sense.qbox.io</a></p>
<p>For this query, we were some what surprised that none of the recipes on top contained potatoes. Using the highlight function, it is easy to see that the number of ingredients returned for the top hits should have been higher. Then it dawned upon us: <a href="http://en.wikipedia.org/wiki/Tf%E2%80%93idf">TF-IDF!</a> You&#8217;re messing up again! What we see is just the normal relevancy, promoting the least commonly used terms to the top. This works well for natural language queries, but that&#8217;s not really what we are doing here.</p>
<p>Luckily, elasticsearch doesn&#8217;t leave us stuck in a rut. We implemented a custom scoring function using the <a href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html">function score query</a>.</p>
<script src="https://gist.github.com/85138ca283157f4db3ad.js?file=function_score"></script>
<p>For this scoring, we don&#8217;t need any points from the query terms, we just want to replace the default scoring with our custom one (boost_mode = replace).<br />
The scoring function has two parts, one where we add up the number of ingredients, and one part to add some boost to the most recent posts.</p>
<p>The function to sum up term frequencies looks like this:</p>
<script src="https://gist.github.com/85138ca283157f4db3ad.js?file=script_score_groovy"></script>
<p>The tf() function returns the term frequency  for a term in this field. There are a number of functions you can use to perform your own calculations based on index properties. The functions available are documented in the <a href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-advanced-scripting.html#_nomenclature">text scoring in scripts</a> and the <a href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html#_document_fields">scripting module</a>.</p>
<p>To the term frequency we add the date scoring:</p>
<script src="https://gist.github.com/85138ca283157f4db3ad.js?file=date_score_function"></script>
<p>We are using a linear function, but we could also have <a href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.90/query-dsl-function-score-query.html#_decay_functions">used gauss or exponential curves.</a></p>
<p>The &#8220;scale&#8221; parameter decides the point on the graph where the value specified in &#8220;decay&#8221; should be found. Setting it to 700 days allows the scoring to reach 0 for recipes dated in 2008, which was one of the requirements.</p>
<p>The number of ingredients will always be whole numbers, while the date scoring is normalized to values from 1 to 0.</p>
<p>To allow the scoring from both functions to add up, we use the parameter score_mode=sum.</p>
<p>Elasticsearch is an extremely powerful toolbox for search, information retrieval, analytics, big data, you name it. The possibilites are endless.</p>
<p>&nbsp;</p>
<p>If you want to learn more about custom scoring in elasticsearch, there are some nice videos you can watch:</p>
<p>&#8220;<a href="http://youtu.be/xg2pepPcBME">Scoring for human beings&#8221; by Britta Weber, Berlin Buzzwords 2014</a></p>
<p><a href="http://www.elasticsearch.org/videos/introducing-custom-scoring-functions/">http://www.elasticsearch.org/videos/introducing-custom-scoring-functions/</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2014/07/11/dictatorial-control-recipe-search-results-using-elasticsearch-function_score/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Main navigation for recipe app user interface ready</title>
		<link>http://blog.comperiosearch.com/blog/2014/05/16/main-navigation-user-interface-for-recipe-app-ready/</link>
		<comments>http://blog.comperiosearch.com/blog/2014/05/16/main-navigation-user-interface-for-recipe-app-ready/#comments</comments>
		<pubDate>Fri, 16 May 2014 13:37:26 +0000</pubDate>
		<dc:creator><![CDATA[Espen Klem]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[pad]]></category>
		<category><![CDATA[photo carousel]]></category>
		<category><![CDATA[recipe app]]></category>
		<category><![CDATA[search navigation]]></category>
		<category><![CDATA[swipe]]></category>
		<category><![CDATA[swipe UI]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[user interface]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=2318</guid>
		<description><![CDATA[Our seasonal food recipe app is getting closer to some front end hacking. Just finished making a navigation sprite where you&#8217;re supposed to swipe horizontal to change place of food foraging, and vertical to change time of year (month). It&#8217;s based on our earlier created mental model and Christine Hørven&#8217;s interpretation. When you open the web [...]]]></description>
				<content:encoded><![CDATA[<p>Our <a href="http://blog.comperiosearch.com/blog/tag/recipe-app/">seasonal food recipe app</a> is getting closer to some front end hacking. Just finished making a navigation sprite where you&#8217;re supposed to swipe horizontal to change place of food foraging, and vertical to change time of year (month). It&#8217;s based on <a href="http://blog.comperiosearch.com/blog/2014/02/07/the-seasonal-recipe-app-tapping-into-the-mental-model/">our earlier created mental</a> model and Christine Hørven&#8217;s interpretation. When you open the web app, current month and farm will be selected for you.</p>
<h2>Main recipe app user interface</h2>
<p><a href="https://www.flickr.com/photos/eklem/14011595248"><img class="alignnone" src="https://farm3.staticflickr.com/2909/14011595248_fb1a697323.jpg" alt="Main recipe app user interface" width="500" height="402" /></a></p>
<p>First off I&#8217;ll just make a clickable test, doing some modulo stuff so that the edge-cases will wrap (December -&gt; January). Then try <a href="http://www.idangero.us/sliders/swiper/demos.php">Awwwards Touch Swipe library</a>. It has the ability to register both horizontal and vertical swipe motion. They also have a <a href="http://www.awwwards.com/demo/touchSwipe-gallery-demo.html">image gallery swipe demo</a>. It only shows horizontal swiping, but I&#8217;m guessing it will be possible to expand that to vertical swiping as well.</p>
<p>When we have a swipe navigation that works good enough it&#8217;s time to build that in to our Angular app and use it to change the search query. Then we have to do some front end code on <a href="http://blog.comperiosearch.com/blog/2014/05/08/how-to-visualize-absolute-search-result-quality/">the actual search results and search result items</a>.</p>
<p>That&#8217;s all for today. <a href="http://en.wikipedia.org/wiki/Norwegian_Constitution_Day">Happy 17th of May</a>. Sounds nice? This is work in progress, so <a href="http://blog.comperiosearch.com/blog/tag/recipe-app/">check back every now and then for new blog posts</a>.</p>
<p>Any comments? Feedback on the recipe app user interface is more than welcome!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2014/05/16/main-navigation-user-interface-for-recipe-app-ready/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User Experience for the Recipe App on Ipads and Android Tablets</title>
		<link>http://blog.comperiosearch.com/blog/2014/05/08/user-experience-for-the-recipe-app-on-ipads-and-android-tablets/</link>
		<comments>http://blog.comperiosearch.com/blog/2014/05/08/user-experience-for-the-recipe-app-on-ipads-and-android-tablets/#comments</comments>
		<pubDate>Thu, 08 May 2014 17:57:57 +0000</pubDate>
		<dc:creator><![CDATA[Espen Klem]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[drilldown]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[filters]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[pad]]></category>
		<category><![CDATA[pad first]]></category>
		<category><![CDATA[qbox]]></category>
		<category><![CDATA[recipe app]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[search navigation]]></category>
		<category><![CDATA[tablet]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=2282</guid>
		<description><![CDATA[More than half the traffic for the recipe site we&#8217;re indexing comes from Ipads and Android Tablets. Because of this we&#8217;ve chosen to do pad first, mobile second and regular laptop/desktop third. So first up are Ipads and Android Tablets. Recipe App User Experience on Ipads and Androids How to sort the result set The [...]]]></description>
				<content:encoded><![CDATA[<p>More than half the traffic for the <a href="http://oppskrift.klikk.no/">recipe site</a> we&#8217;re indexing comes from Ipads and Android Tablets. Because of this we&#8217;ve chosen to do pad first, mobile second and regular laptop/desktop third. So first up are Ipads and Android Tablets.</p>
<h2>Recipe App User Experience on Ipads and Androids</h2>
<h2></h2>
<p><a href="https://www.flickr.com/photos/eklem/14158563123/in/photostream/"><img class="alignnone" src="https://farm8.staticflickr.com/7311/14158563123_00370d39d0.jpg" alt="recipe app user experience" width="500" height="406" /></a></p>
<p><strong>How to sort the result set</strong></p>
<p>The relevance model is now down to two variables:</p>
<ol>
<li>Amount of in-season ingredients in a recipe</li>
<li>Date (year) that recipe was published.</li>
</ol>
<p>Date will only be used to rank recipes with same amount of in-season ingredients.</p>
<p><strong>Filters and drill-down possibilities</strong></p>
<p>Main filters will be:</p>
<ol>
<li>Light meal</li>
<li>Dinner</li>
<li>Desert</li>
</ol>
<p>On these three filters you will be able to do a second filtering based on how short the recipe preparation time is:</p>
<ol>
<li>Quick (40 minutes or less)</li>
<li>Slow/Thorough (more than 40 minutes)</li>
</ol>
<p><strong>Auto selected filters</strong></p>
<p>The actual search is done without the user needing to do or type anything. An OR search for the current months ingredients is done when you enter the page. Default place will be &#8220;The Farm&#8221;, since that&#8217;s the closest thing to what you find in the supermarket.</p>
<p>The filters will also be automatically picked. During work days the &#8220;Dinner&#8221; and &#8220;Quick&#8221; filters will be set. Late Friday the meal type filter will change to &#8220;Light meal&#8221; and &#8220;Slow/Thorough&#8221;. Sometime after 12 o&#8217;clock on Saturday, the meal type will change to &#8220;Dinner&#8221;.</p>
<p><a href="https://www.flickr.com/photos/eklem/14135558552/in/photostream/"><img class="alignnone" src="https://farm6.staticflickr.com/5074/14135558552_5611ceed58.jpg" alt="recipe app user experience" width="500" height="333" /></a></p>
<p>Based on <a href="http://blog.comperiosearch.com/blog/2014/05/08/how-to-visualize-absolute-search-result-quality/">the ideas for visualization of the search result</a>, this is how I imagine the UX for our Seasonal Food Recipe App. To the left you have a search result for &#8220;The Sea&#8221; in May, to the right &#8220;The Sea&#8221; in January. We&#8217;ll have a new prototype running soon. Next task will be to make the navigation sprite with a combination of the five places and 12 months (sun in different position for each month). Then HTML-prototype the three different search result types: Large (full width), medium and small.</p>
<p><a href="http://qbox.io/">Thanks to Qbox</a> for letting us use one of their Elasticsearch instances!</p>
<p><a href="http://qbox.io/"><img class="alignnone wp-image-2287 size-medium" src="http://blog.comperiosearch.com/wp-content/uploads/2014/05/Screen-Shot-2014-05-08-at-19.56.22-300x173.png" alt="Qbox hosted Elasticsearch" width="300" height="173" /></a></p>
<p><a href="http://blog.comperiosearch.com/blog/tag/recipe-app/">The recipe app is work in progress</a>. Check back every now and then for new blog posts on the subject.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2014/05/08/user-experience-for-the-recipe-app-on-ipads-and-android-tablets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to visualize absolute search result quality</title>
		<link>http://blog.comperiosearch.com/blog/2014/05/08/how-to-visualize-absolute-search-result-quality/</link>
		<comments>http://blog.comperiosearch.com/blog/2014/05/08/how-to-visualize-absolute-search-result-quality/#comments</comments>
		<pubDate>Thu, 08 May 2014 16:51:56 +0000</pubDate>
		<dc:creator><![CDATA[Espen Klem]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[content]]></category>
		<category><![CDATA[recipe app]]></category>
		<category><![CDATA[relevance]]></category>
		<category><![CDATA[relevance tuning]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[ux]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=2278</guid>
		<description><![CDATA[Earlier, I&#8217;ve looked into how I could use the Phi spiral to possibly get a better display of what&#8217;s most relevant in a search result. A former colleague of mine, Johannes Hoff Holmedahl, did a quick test on the theory, and it may actually work. For the recipe app I want to do something slightly [...]]]></description>
				<content:encoded><![CDATA[<p>Earlier, I&#8217;ve looked into how I could <a href="http://blog.comperiosearch.com/blog/2013/07/05/a-better-search-result-a-visual-relevancy-hierarchy-building-on-the-phi-spiral/">use the Phi spiral to possibly get a better display of what&#8217;s most relevant</a> in a search result. A former colleague of mine, Johannes Hoff Holmedahl, <a href="//blog.comperiosearch.com/blog/2013/08/07/redesigning-netflix-using-the-phi-spiral/">did a quick test on the theory</a>, and it may actually work.</p>
<p>For the recipe app I want to do something slightly different, showing the absolute search result quality for each result. In other words: If the best search result in a result set is not very good, make it smaller than if it has higher value, thus showing an absolute value for each result. The dialogue equivalent comparing i.e. two movies would be to define the best of them better than the other, but not the best you&#8217;d seen.</p>
<h2>Absolute search result quality</h2>
<p>aka. Absolute visual relevance hierarchy</p>
<p>How do we then measure absolute quality? In an earlier post I described <a href="http://blog.comperiosearch.com/blog/2014/03/07/recipe-app-relevance-tuning-what-is-it-exactly/">what would be our relevancy hierarchy</a>. The more in-season ingredients in a recipe, the better quality.</p>
<p><a href="https://www.flickr.com/photos/eklem/14158409963/"><img class="alignnone" src="https://farm8.staticflickr.com/7349/14158409963_dc2463f1f7.jpg" alt="Visualization of absolute search result quality" width="500" height="281" /></a></p>
<p>I&#8217;ve defined three quality groups for absolute search result quality so far (number of ingredients: n):</p>
<ol>
<li>n &gt;= 4</li>
<li>1 &lt; n &lt; 4</li>
<li>n = 1</li>
</ol>
<p>Here are three different examples on search results set. First has two results with four or more in-season ingredients and second has only one. Third has none, typically something that would happen during the winter months in Norway:</p>
<p><a href="https://www.flickr.com/photos/eklem/14115310566/sizes/l"><img class="alignnone" src="https://farm8.staticflickr.com/7375/14115310566_375a0d5936.jpg" alt="Visualization of absolute search result quality" width="500" height="237" /></a></p>
<p><a href="http://blog.comperiosearch.com/blog/tag/recipe-app/">The recipe app is work in progress</a>. Check back every now and then for new blog posts on the subject.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2014/05/08/how-to-visualize-absolute-search-result-quality/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Search templates in elasticsearch</title>
		<link>http://blog.comperiosearch.com/blog/2014/04/11/revised-architecture-for-the-seasonal-recipe-app-elasticsearch-angularjs-search-templates/</link>
		<comments>http://blog.comperiosearch.com/blog/2014/04/11/revised-architecture-for-the-seasonal-recipe-app-elasticsearch-angularjs-search-templates/#comments</comments>
		<pubDate>Fri, 11 Apr 2014 13:56:57 +0000</pubDate>
		<dc:creator><![CDATA[Christoffer Vig]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[Elasticsearch]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[qbox]]></category>
		<category><![CDATA[recipe app]]></category>
		<category><![CDATA[recipes]]></category>
		<category><![CDATA[relevancy]]></category>
		<category><![CDATA[search templates]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=2194</guid>
		<description><![CDATA[Using search templates simplifies the life of the client searcher. Now she can have an elasticsearch query DSL expert create search templates for him, hiding away all the ugly booleans, weightings, facets and what have you, while she relaxes in his armchair emitting simple searches for &#8216;beetroot&#8217; or any other favourite vegetable, fish, meats, dairy, or [...]]]></description>
				<content:encoded><![CDATA[<p>Using <a href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-template.html#search-template">search templates</a> simplifies the life of the client searcher. Now she can have an elasticsearch query DSL expert create search templates for him, hiding away all the ugly booleans, weightings, facets and what have you, while she relaxes in his armchair emitting simple searches for &#8216;beetroot&#8217; or any other favourite vegetable, fish, meats, dairy, or whatever her search domain requires.</p>
<p>Search templates is a brand new feature  added to elasticsearch version 1.1. 0. It allows potentially complex search logic to be stored as templates. The user sends a query with the parameters that matters for him, along with the name of a search template, and the supplied parameters will be inserted at the proper place on execution.  The template format is <a href="http://mustache.github.io/">moustache</a>, a widely used javascript templating tool.</p>
<p>Cool stuff, you say. How can I use it? And does it really work?</p>
<p>In the current implentation of search templates, you create a JSON request specifying both the template and the parameters.</p>
<script src="https://gist.github.com/10469480.js?file=demo1"></script>
<p>You can save the templates in the config/scripts folder of your elasticsearch installation, and use the saved query.<br />
The template is saved as config/scripts/ingredientsquery.moustache. This is how my template looked like:</p>
<script src="https://gist.github.com/10469480.js?file=template"></script>
<p>And here is a sample query using this template</p>
<script src="https://gist.github.com/10469480.js?file=demo2"></script>
<p>To make changes to the template effective, you need to restart elasticsearch.</p>
<p>You would perhaps expect it to be possible to upload a search template using the REST API.  Unfortunately,  that hasn&#8217;t been implemented yet.  At the moment, you have to store the search templates in the  config/scripts folder in your elasticsearch node.  There is an <a href="https://github.com/elasticsearch/elasticsearch/issues/5637">issue</a> registered to add this feature, but in the mean time, our friends over at <a href="http://qbox.io">qbox</a> are helpful as always and offer to manually place the templates where they belong while we wait for elasticsearch version 1.1.1 (or something).</p>
<p>Using this awesome feature, the only reason we still need some middleware between our elasticsearch installation and our browser is to protect the search service from malicious requests. As it so happens, Qbox have recently added a feature that enables public read only access to the elasticsearch query _search endpoint.</p>
<p>This enables us to use the Qbox elasticsearch service directly from the <a href="http://www.elasticsearch.org/guide/en/elasticsearch/client/javascript-api/current/index.html">angularjs client for elasticsearch</a>.</p>
<p>Thus we eliminate the need for the searchclient in ruby, and one less server component to care about.</p>
<p>Sounds nice? This is work in progress, so <a href="http://blog.comperiosearch.com/blog/tag/recipe-app/">check back every now and then for new blog posts</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2014/04/11/revised-architecture-for-the-seasonal-recipe-app-elasticsearch-angularjs-search-templates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tech choices for the seasonal recipes app: A skeleton architecture for working with search relevancy</title>
		<link>http://blog.comperiosearch.com/blog/2014/03/20/tech-choices-for-the-seasonal-recipes-app-a-skeleton-architecture-for-working-with-search-relevancy/</link>
		<comments>http://blog.comperiosearch.com/blog/2014/03/20/tech-choices-for-the-seasonal-recipes-app-a-skeleton-architecture-for-working-with-search-relevancy/#comments</comments>
		<pubDate>Wed, 19 Mar 2014 23:32:29 +0000</pubDate>
		<dc:creator><![CDATA[Christoffer Vig]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Elasticsearch]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[middleware]]></category>
		<category><![CDATA[recipe app]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=2042</guid>
		<description><![CDATA[Although the concepts and sketches for the recipe app are the absolute best of the best, we were unfortunately forced to realize that an actual search solution must take the step down from the platonic world of pure ideas and into the hideous, gory and appalling world of bits, slime and bytes.  Luckily we got [...]]]></description>
				<content:encoded><![CDATA[<p>Although the concepts and sketches for the <a title="The seasonal recipe app: Tapping into the mental model" href="http://blog.comperiosearch.com/blog/2014/02/07/the-seasonal-recipe-app-tapping-into-the-mental-model/">recipe app</a> are the absolute best of the best, we were unfortunately forced to realize that an actual search solution must take the step down from the platonic world of pure ideas and into the hideous, gory and appalling world of bits, slime and bytes. <span id="more-2042"></span></p>
<p>Luckily we got some help in our decision process. Elasticsearch presented itself to us as self-evident. <a href="http://qbox.io/">qbox.io</a> helped us out with hosting (Thank you guys!).  We needed something  at least equally cool to create the front end stuff, somewhere to flesh out the design and user interface. We chose AngularJS, perhaps out of ignorance and old habits, it hasn&#8217;t failed us yet.</p>
<p>Now we had the most important parts of the tech stack figured out, we had to figure out how to enable communication between the two. We imagined that somehow the user would &#8220;do something&#8221; in the web part, and his/her actions would be &#8220;sort of transferred&#8221; back into elasticsearch, which in turn would perform some tricks to find out the most relevant information, and return it back to AngularJS. We soon realized that we didn&#8217;t want to communicate directly with elasticsearch from the browser, although it is possible (using for instance <a href="http://www.elasticsearch.org/guide/en/elasticsearch/client/javascript-api/current/about.html#_browser_builds">elasticsearch-angular.js</a>). Putting an elasticsearch instance directly available on the internet is very easy. Unfortunately, it leaves your node freely available to anyone.  Elasticsearch is controlled by issuing calls to the REST API, such as</p><pre class="crayon-plain-tag">curl -XDELETE 'http://localhost:9200/indexname/'</pre><p>Which will, yes you guessed it, <a href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-delete-index.html">delete the index</a> named indexname. While we truly believe in empowering the user, we also believe there has to be limits.  There are several options for locking down the service. One very common option is to block port 9200 in the firewall, and set up a web server/proxy such as <a href="http://nginx.org/">nginx</a> that can route web traffic to a selected address like, say, <strong>/search</strong> to a specific address on the server running on port 9200 inside the box.  That way you can protect elasticsearch, and open just the parts you want to allow traffic on.</p>
<p>In the end we actually did use nginx as a webserver and proxy, but we didn&#8217;t pass the queries straight to elasticsearch.</p>
<p>We made ourselves a tiny search client in the middle. Some of the reasons were:</p>
<ol>
<li><a href="http://en.wikipedia.org/wiki/Separation_of_concerns">Separation of concerns</a></li>
<li>Security</li>
<li>Testability</li>
</ol>
<div>We do not want the front end to care about the details of the implementation of the query language. Actually, the front end does not care about that at all. All it cares about is  &#8220;Hey, give me the <a href="http://ec2-54-195-32-62.eu-west-1.compute.amazonaws.com:3000/search?ingredients=jordskokk">recipes </a>with <a href="http://en.wikipedia.org/wiki/Jerusalem_artichoke">sunroot </a>in them. And I don&#8217;t mean tomorrow!&#8221;</div>
<div>
<div id="attachment_2152" style="width: 665px" class="wp-caption alignnone"><a href="http://blog.comperiosearch.com/wp-content/uploads/2014/03/recipe-app-tech-setup-01.png"><img class="wp-image-2152  " src="http://blog.comperiosearch.com/wp-content/uploads/2014/03/recipe-app-tech-setup-01-1024x640.png" alt="" width="655" height="410" /></a><p class="wp-caption-text">The search architecture</p></div>
</div>
<p>The recipe web-app takes care of getting some explicit input from the user. In addition to that, we may gather some implicit information to use as &#8220;hints&#8221;, for instance  the time of day, the day of the week, the month of the year, geo-location,  browser/mobile/os and so on. The web-app sends parameters to the search client as a simple GET query i.e. <a href="http://ec2-54-195-32-62.eu-west-1.compute.amazonaws.com/search?ingredients=potet">/search?ingredients=potet</a> and receives in return the unmodified elasticsearch JSON response.</p>
<p>By separating the search logic from the user interface, we can easily test the results of modifying query parameters such as what fields to search in and what weight to give to different fields. Modifying details of the elasticsearch query can be done without fear of accidentally breaking something in the front end. We could even swap out the entire search engine without having the front end notice.</p>
<p>The search client is implemented in <a href="https://www.ruby-lang.org/en/">ruby</a>, using <a href="http://intridea.github.io/grape/">grape</a>,  a tool to build lightweight REST- like  APIS.  Connecting and talking to elasticsearch is taken care of by the <a href="https://github.com/elasticsearch/elasticsearch-ruby">official elasticsearch ruby client</a>.</p>
<p>The skeleton code for the search client is available on <a href="https://github.com/comperiosearch/searchclient-ruby">github</a>. We have stripped away the &#8220;special&#8221; queries, leaving only the most generic functionality needed to start creating a search solution. It can receive query parameters, issue queries to elasticsearch and return the unmodified response, and log it. In actual implementations we have added complexity to the queries, functions that retrieve only facets, or query in different subsets of the index.</p>
<p>Feel free to fork the project and tailor it to your own needs. If you have suggestions for improvements, don&#8217;t be shy about it, create a pull request.</p>
<p>&nbsp;</p>
<p>Sounds nice? This is work in progress, so <a href="http://blog.comperiosearch.com/blog/tag/recipe-app/">check back every now and then for new blog posts</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2014/03/20/tech-choices-for-the-seasonal-recipes-app-a-skeleton-architecture-for-working-with-search-relevancy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Relevance tuning in the search domain. What is it exactly?</title>
		<link>http://blog.comperiosearch.com/blog/2014/03/07/recipe-app-relevance-tuning-what-is-it-exactly/</link>
		<comments>http://blog.comperiosearch.com/blog/2014/03/07/recipe-app-relevance-tuning-what-is-it-exactly/#comments</comments>
		<pubDate>Fri, 07 Mar 2014 16:26:06 +0000</pubDate>
		<dc:creator><![CDATA[Espen Klem]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[content]]></category>
		<category><![CDATA[filters]]></category>
		<category><![CDATA[ideas]]></category>
		<category><![CDATA[recipe app]]></category>
		<category><![CDATA[relevance]]></category>
		<category><![CDATA[relevancy tuning]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[user story]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=2032</guid>
		<description><![CDATA[First thing first! Let&#8217;s get rid of the bullshit bingo lingo: &#8220;Relevancy tuning&#8221; in search is a fancy description for something that&#8217;s not very magical, even if it sounds like just that. It&#8217;s about getting the right results on top of your search result. End of story. If somebody asks you a question, you should [...]]]></description>
				<content:encoded><![CDATA[<p>First thing first! Let&#8217;s get rid of the bullshit bingo lingo: &#8220;Relevancy tuning&#8221; in search is a fancy description for something that&#8217;s not very magical, even if it sounds like just that. It&#8217;s about getting the right results on top of your search result. End of story. If somebody asks you a question, you should start by giving that person the most likely answer first. Most search engines seems to be digressing. It&#8217;s because we haven&#8217;t told in a clear manner what to be expected from them. And because we often use generic tools to solve specific problems.</p>
<p>One generic tool for getting the right results on top is the &#8220;<a href="http://en.wikipedia.org/wiki/Tf%E2%80%93idf">term frequency–inverse document frequency</a>&#8220;, or <a href="https://www.google.no/?gfe_rd=ctrl&amp;ei=_NAZU7qjL8-AwAP6_oCgBg&amp;gws_rd=cr#q=tf-idf&amp;safe=off">tf-idf</a> for short. It&#8217;s a combination of how often a term is mentioned in a document compared to how often it&#8217;s mentioned in all of your documents in the index. So, rare terms within the whole index used often in one document makes it a good search result when searching for that term. But most likely, not good enough. You need to figure out what&#8217;s the characteristics of your content, and what are the most characteristic use cases and user stories for your users. Only then can you achieve great relevancy, &#8230;  I mean get the right result on top of your search result.</p>
<h2>Model for relevance tuning</h2>
<p>We&#8217;ll use our Recipe app as an example&#8230;</p>
<p><img class="alignnone" src="http://farm4.staticflickr.com/3122/12989606394_97436f539e_z.jpg" alt="Model for relevance tuning" width="360" height="640" /></p>
<p>So, for our food recipe app, we have some obvious content characteristics:</p>
<ul>
<li>The more ingredients in-season for one recipe is good. We&#8217;re doing an OR-search on all ingredients in-season so this comes out-of-the-box &#8230; almost.</li>
<li>Quite a lot of recipes doesn&#8217;t stand the test of time. We know that most of the recipes at oppskrift.klikk.no from 2008 or newer are quite good and have nice photos.</li>
<li>We&#8217;re not sure if we need this, but we know whom of the writers to trust. This may be an overkill when we already have a boosting on newer recipes.</li>
</ul>
<p>And we know a lot about our users as well:</p>
<ul>
<li>Most grown up people in Norway have a job, thus limited time to prepare a meal. This means that recipes that takes shorter preparations should be boosted from Monday through Thursday. The verdict on Friday is still not decided.</li>
<li>During the weekend people have more time to make dinner. The recipes that takes a short time to prepare most probably cut some corners, and are not that good compared to recipes that takes a little longer time. So for the weekends, we should do a demotion of really quick recipes, at least for dinners.</li>
</ul>
<p>This is the info we&#8217;re going to use to sort our search result. But we have more knowledge about our users that we can use to auto-set filters for certain times of the day:</p>
<ul>
<li>Most work days, people don&#8217;t plan a breakfast meal or lunch. The whole day we can auto-set the main &#8220;course&#8221; filter.</li>
<li>During the weekend, people may also plan a lunch. We&#8217;ve decided to auto-set the &#8220;light meal&#8221;-filter during weekends up until lunch time. After that the &#8220;main course&#8221; filter is auto-set. We&#8217;ll log if the first thing our users do is to set another filter.</li>
<li>On Friday and Saturday a lot of Norwegians drink beer, wine or liquor. After some hours of drinking, they get hungry. Maybe we should have an &#8220;afterparty, quick and greasy and tasty-meal&#8221;-filter auto-set for late Fridays and Saturdays?</li>
</ul>
<p>So, what&#8217;s the filters we&#8217;ve decided on:</p>
<ul>
<li>Light meals</li>
<li>Starters</li>
<li>Main courses</li>
<li>Deserts</li>
<li>&#8230; and maybe the Afterparty-thingy</li>
</ul>
<p>What do you think?</p>
<p><img class="alignnone" src="http://farm4.staticflickr.com/3143/12988485805_d1a693e95c_z.jpg" alt="Model for relevance tuning" width="640" height="360" /></p>
<p>Sounds nice? This is work in progress, so <a href="http://blog.comperiosearch.com/blog/tag/recipe-app/">check back every now and then for new blog posts</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2014/03/07/recipe-app-relevance-tuning-what-is-it-exactly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The seasonal recipe app: Tapping into the mental model</title>
		<link>http://blog.comperiosearch.com/blog/2014/02/07/the-seasonal-recipe-app-tapping-into-the-mental-model/</link>
		<comments>http://blog.comperiosearch.com/blog/2014/02/07/the-seasonal-recipe-app-tapping-into-the-mental-model/#comments</comments>
		<pubDate>Fri, 07 Feb 2014 15:09:26 +0000</pubDate>
		<dc:creator><![CDATA[Espen Klem]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[brainstorm]]></category>
		<category><![CDATA[concept]]></category>
		<category><![CDATA[ideas]]></category>
		<category><![CDATA[qbox]]></category>
		<category><![CDATA[recipe app]]></category>
		<category><![CDATA[relevance]]></category>
		<category><![CDATA[relevancy tuninig]]></category>
		<category><![CDATA[ux]]></category>
		<category><![CDATA[wireframes]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=1980</guid>
		<description><![CDATA[Our mental model for the seasonal recipe app is helping people use the best ingredients for any particular time of year is the goal for our little demo search app. Since a lot of people in Norway actually go into the nature and forage, fetch, pick, shoot and fish their own food, we wanted to [...]]]></description>
				<content:encoded><![CDATA[<p>Our mental model for the seasonal recipe app is helping people use the best ingredients for any particular time of year is the goal for our little demo search app. Since a lot of people in Norway actually go into the nature and forage, fetch, pick, shoot and fish their own food, we wanted to divide into some of the most typical and normal places where you can find those types of food. We then have two variables for our search: <strong>Place where you find the food</strong> and <strong>Time of year (Month)</strong>.</p>
<h2>Tapping into the mental model</h2>
<p>Each variable combination will do an OR-search containing a lot of ingredients for that particular place and time of year. Our relevancy model so far:</p>
<ol>
<li>Recipes with the highest amount of ingredients hits</li>
<li>Newest recipes</li>
<li>Recipes written by Christopher Sjuve</li>
</ol>
<p>Number one on the list is given, but why number two and three? A lot of the older recipes doesn&#8217;t stand the test of time, and we know we trust Christopher Sjuve&#8217;s recipes.</p>
<p><img class="alignnone" src="http://farm8.staticflickr.com/7320/12363398174_f9d83062bc_c.jpg" alt="" width="461" height="259" /></p>
<p>&nbsp;</p>
<p>The places we&#8217;ve chosen:</p>
<ol>
<li>The sea</li>
<li>The farm</li>
<li>The garden</li>
<li>The forest</li>
<li>The mountain</li>
</ol>
<p>It&#8217;s an odd bunch of places, but so far we think it will work. Logs and usability testing will tell us later if we&#8217;re hitting the target or not. The farm doesn&#8217;t fit that well with the others, since you don&#8217;t normally enter a farm and steal a cow or some potatoes. But it will be what&#8217;s closest in content to your average supermarket, and will be the default choice. Almost all of the places will have some overlapping ingredients. Each search is a combination of a place and a month. 5 places x 12 months means a sprite of 60 images where you swipe horizontal to select a place. Month will be selected for you, but to open up for exploration we think it will be valuable to  have a vertical swipe to select month.</p>

<a href='http://blog.comperiosearch.com/blog/2014/02/07/the-seasonal-recipe-app-tapping-into-the-mental-model/0-swipe-place/'><img width="150" height="150" src="http://blog.comperiosearch.com/wp-content/uploads/2014/02/0-swipe-place-150x150.png" class="attachment-thumbnail" alt="0-swipe-place" /></a>
<a href='http://blog.comperiosearch.com/blog/2014/02/07/the-seasonal-recipe-app-tapping-into-the-mental-model/1-sea/'><img width="150" height="150" src="http://blog.comperiosearch.com/wp-content/uploads/2014/02/1-sea-150x150.png" class="attachment-thumbnail" alt="1-sea" /></a>
<a href='http://blog.comperiosearch.com/blog/2014/02/07/the-seasonal-recipe-app-tapping-into-the-mental-model/2-farm/'><img width="150" height="150" src="http://blog.comperiosearch.com/wp-content/uploads/2014/02/2-farm-150x150.png" class="attachment-thumbnail" alt="2-farm" /></a>
<a href='http://blog.comperiosearch.com/blog/2014/02/07/the-seasonal-recipe-app-tapping-into-the-mental-model/3-garden/'><img width="150" height="150" src="http://blog.comperiosearch.com/wp-content/uploads/2014/02/3-garden-150x150.png" class="attachment-thumbnail" alt="3-garden" /></a>
<a href='http://blog.comperiosearch.com/blog/2014/02/07/the-seasonal-recipe-app-tapping-into-the-mental-model/4-forest/'><img width="150" height="150" src="http://blog.comperiosearch.com/wp-content/uploads/2014/02/4-forest-150x150.png" class="attachment-thumbnail" alt="4-forest" /></a>
<a href='http://blog.comperiosearch.com/blog/2014/02/07/the-seasonal-recipe-app-tapping-into-the-mental-model/5-mountain/'><img width="150" height="150" src="http://blog.comperiosearch.com/wp-content/uploads/2014/02/5-mountain-150x150.png" class="attachment-thumbnail" alt="5-mountain" /></a>
<a href='http://blog.comperiosearch.com/blog/2014/02/07/the-seasonal-recipe-app-tapping-into-the-mental-model/recipe-app-mental-model/'><img width="150" height="150" src="http://blog.comperiosearch.com/wp-content/uploads/2014/04/recipe-app-mental-model-150x150.jpg" class="attachment-thumbnail" alt="The mental model of the recipe app, mockups" /></a>
<a href='http://blog.comperiosearch.com/blog/2014/02/07/the-seasonal-recipe-app-tapping-into-the-mental-model/rp_12363398174_f9d83062bc_c-jpg/'><img width="150" height="150" src="http://blog.comperiosearch.com/wp-content/uploads/2014/02/12363398174_f9d83062bc_c-150x150.jpg" class="attachment-thumbnail" alt="rp_12363398174_f9d83062bc_c.jpg" /></a>

<p>Here&#8217;s the first wireframes on the UX concept.</p>
<p><img class="alignnone" src="http://farm4.staticflickr.com/3813/12365584783_9bec51cf06_z.jpg" alt="" width="640" height="361" /></p>
<p>First version of the query matrix. So far not organized by places, but types of ingredients.</p>
<p><a href="http://ec2-54-195-32-62.eu-west-1.compute.amazonaws.com:3000/search?ingredients=rødbet">The search is already up and running, but lack every sign of graphical user interface</a>.</p>
<p><a href="http://qbox.io/"><img class="alignnone" src="http://farm8.staticflickr.com/7456/12366227173_38b6792cd5_z.jpg" alt="" width="640" height="284" /></a></p>
<p><strong><a href="http://qbox.io/">Thanks to Qbox.io for letting us use a Hosted Elasticsearch</a> instance for this project!</strong></p>
<p>&nbsp;</p>
<p>Sounds nice? This is work in progress, so <a href="http://blog.comperiosearch.com/blog/tag/recipe-app/">check back every now and then for new blog posts</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2014/02/07/the-seasonal-recipe-app-tapping-into-the-mental-model/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
