<?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; Javascript</title>
	<atom:link href="http://blog.comperiosearch.com/blog/tag/javascript/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: better user experience with one line of JavaScript</title>
		<link>http://blog.comperiosearch.com/blog/2015/05/18/search-better-user-experience-with-one-line-of-javascript/</link>
		<comments>http://blog.comperiosearch.com/blog/2015/05/18/search-better-user-experience-with-one-line-of-javascript/#comments</comments>
		<pubDate>Mon, 18 May 2015 13:59:01 +0000</pubDate>
		<dc:creator><![CDATA[Espen Klem]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[enterprise search]]></category>
		<category><![CDATA[focus]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[search box]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[ux]]></category>
		<category><![CDATA[website search]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=3680</guid>
		<description><![CDATA[What&#8217;s the cheapest trick you can do to get a better user experience on your search solution, and make your users do better search queries? Add a small line of JavaScript in your template&#8217;s document ready function: [crayon-69d8ca1a3558e396606043/] This will do two things for the user: It&#8217;ll be easier to see the search box . [...]]]></description>
				<content:encoded><![CDATA[<p>What&#8217;s the cheapest trick you can do to get a better user experience on your search solution, and make your users do better search queries?</p>
<p><img class="alignnone wp-image-3683 size-full" src="http://blog.comperiosearch.com/wp-content/uploads/2015/05/search-box.png" alt="Illustration: A standard search box" width="598" height="66" /></p>
<p>Add a small line of JavaScript in your template&#8217;s document ready function:</p><pre class="crayon-plain-tag">$("#MySearchBox").focus();</pre><p>This will do two things for the user:</p>
<ol>
<li>It&#8217;ll be easier to see the search box .</li>
<li>The user can start typing without having to click inside the search box.</li>
</ol>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2015/05/anim-just-cursor.gif"><img class="alignnone wp-image-3682 size-full" src="http://blog.comperiosearch.com/wp-content/uploads/2015/05/anim-just-cursor.gif" alt="Illustration: Better user experience ny setting focus on the search box" width="598" height="66" /></a></p>
<p>Next issue is that most intranet and websites are more than just a search solution. Maybe you don&#8217;t want that much attention on the search box on your homepage. The solution is then to do this on your search result page.</p>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2015/05/anim-one-word.gif"><img class="alignnone wp-image-3685 size-full" src="http://blog.comperiosearch.com/wp-content/uploads/2015/05/anim-one-word.gif" alt="Illustration: Better user experience ny setting focus on the search box" width="598" height="66" /></a></p>
<p>This will make it easier for your users to enhance their search query when they&#8217;re not happy with the search result at hand.</p>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2015/05/anim-more-words.gif"><img class="alignnone wp-image-3684 size-full" src="http://blog.comperiosearch.com/wp-content/uploads/2015/05/anim-more-words.gif" alt="Illustration: Better user experience ny setting focus on the search box" width="598" height="66" /></a></p>
<p>Do you have any other examples on other quick fixes that could make an even better user experience for your search solution?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2015/05/18/search-better-user-experience-with-one-line-of-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5 reasons Lebron is the future, or why the Forage search engine will rock</title>
		<link>http://blog.comperiosearch.com/blog/2014/05/28/5-reasons-lebron-future-forage-search-engine-will-rock/</link>
		<comments>http://blog.comperiosearch.com/blog/2014/05/28/5-reasons-lebron-future-forage-search-engine-will-rock/#comments</comments>
		<pubDate>Wed, 28 May 2014 08:51:51 +0000</pubDate>
		<dc:creator><![CDATA[Espen Klem]]></dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Browserify]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[forage]]></category>
		<category><![CDATA[Forage Search Engine]]></category>
		<category><![CDATA[future]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Lebron]]></category>
		<category><![CDATA[leveldb]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[search engine]]></category>
		<category><![CDATA[Webrebels]]></category>
		<category><![CDATA[Webrebels conference]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=2388</guid>
		<description><![CDATA[The Lebron stack Last week, I saw the future. Wohaa, that&#8217;s always a great feeling.  I&#8217;ve seen it in earlier weeks also, but now it was even brighter than before. For me, it&#8217;s still called the Lebron Stack as Max Ogden explains it and consists of LevelDB, Browserify and npm. All this is mostly happening [...]]]></description>
				<content:encoded><![CDATA[<h2>The Lebron stack</h2>
<p>Last week, <a href="https://www.webrebels.org/">I saw the future</a>. Wohaa, that&#8217;s always a great feeling.  I&#8217;ve seen it in earlier weeks also, but now it was even brighter than before. For me, it&#8217;s still called <a href="http://lebron.technology/">the Lebron Stack as Max Ogden explains it</a> and consists of <a href="http://leveldb.org/"><strong>Le</strong>velDB</a>, <a href="http://browserify.org/"><strong>Bro</strong>wserify</a> and <a href="http://npmjs.org/"><strong>n</strong>pm</a>. All this is mostly happening in JavaScript. Before I&#8217;m knocked to the ground: <a href="https://www.google.no/?gfe_rd=cr&amp;ei=p22EU7WML8yS_Ab17AE&amp;gws_rd=cr#q=&quot;why+javascript+is+the+future&quot;&amp;safe=off">I wasn&#8217;t the first to either make the prediction or say it out loud</a>. I&#8217;m way behind, and it&#8217;s not a very novel or extreme idea, just a really good one. But when something is predicted, it may take a long time before it happens, if it happens at all. I think it&#8217;s happening now-ish.</p>
<p>So this blog post is about why I think that time is now. <strong>Disclaimer for the .Net and Java heads</strong> And all you .Net- and Java-heads will surely find some stuff that will be done better within your part of the world, but hear me out! I know the list of &#8220;This already exists in OS [W] or [X]&#8221; or &#8220;You can do that with software [X], [Y] or [Z]&#8220;. I have these thoughts my self, and I&#8217;ve been wondering why I still think that Lebron and JavaScript still will be so much more important. I&#8217;m not saying that .Net and Java stuff will go away, it will just be less important (it already is) and most of the cool and stuff closer to the user will happen in the JavaScript world.</p>
<div style="width: 650px" class="wp-caption alignnone"><a href="https://www.webrebels.org/"><img class=" " src="http://photos-g.ak.instagram.com/hphotos-ak-prn/10349587_639374052804126_792484736_n.jpg" alt="" width="640" height="640" /></a><p class="wp-caption-text">The future is bright at the Webrebels conference in Oslo, May &#8211; 2014.</p></div>
<h2>Here are the reasons I found so far</h2>
<ul>
<li><strong>Most stuff happens in the browser</strong> Selling anything, you want to be where the people are. For regular people that&#8217;s on their smartphone using a web app or just a native app, which in most cases is a web app wrapped as a native app. Emerging markets makes this shift towards the browser happen even faster. The <a href="http://www.mozilla.org/en-US/firefox/os/">Firefox OS</a> may fail as an OS, but still succeed creating a standard smartphone API for web applications, the <a href="https://developer.mozilla.org/en-US/docs/WebAPI">WebAPI</a>. This will make it even easier to create web apps for all of the world&#8217;s smartphones, which leads me on to my next point.</li>
<li><strong>Easier for startups and developers</strong> Competing with the big ones is never easy. <a href="http://aws.amazon.com/">Amazon Web Services</a>, AWS,  and similar services made it a little easier to scale hardware use dynamically, and from that, the cost of hardware. With the browser as a VM and <a href="http://en.wikipedia.org/wiki/Single-page_application">single page applications</a> a lot of the web application rendering and logic is moved from the servers to the clients. So for a small company the choice is easy. Why do all the heavy lifting on your own servers when the users can do most of the application rendering and logic on their smartphones? The irony in the old &#8220;thin vs. thick client&#8221; debate is that <a href="https://www.google.no/search?q=world%27s+thinnest+smartphone&amp;safe=off&amp;source=lnms&amp;tbm=isch&amp;sa=X&amp;ei=g4GEU6SaMoeK4gTz2oDYDQ&amp;ved=0CAgQ_AUoAQ&amp;biw=1919&amp;bih=1072">the clients actually got a lot thinner</a>, and in the same go started doing more of the heavy lifting. While a <a href="http://www.dailymail.co.uk/sciencetech/article-2219188/Inside-Google-pictures-gives-look-8-vast-data-centres.html">Google data center</a> is impressive, I also got a feeling it&#8217;s a sign of something gone terribly wrong.</li>
<li><strong>Collaboration, modularity and minimum effort</strong> npm is great stuff. It takes away a lot of dependency pain in the JavaScript world. Combined with people that are very good at writing small modular programs and lots of stuff under the <a href="http://en.wikipedia.org/wiki/MIT_License">MIT license</a> we have a winner. We now have tools for collaboration that actually works. People build their <a href="https://github.com/mafintosh/torrent-mount">killer</a> <a href="https://github.com/mafintosh/torrent-stream">apps</a> with very little effort on top of <a href="https://github.com/mafintosh/torrent-stream/blob/master/package.json">others&#8217; greatness</a>. No more <a href="http://en.wikipedia.org/wiki/Comparison_of_text_editors">reinventing the text editor</a>.</li>
<li><strong>Cheaper hardware for regular users</strong> Okay, most people access the Internet through their phone, but the Chromebook explains this point very well. Why have a full OS, with all the hardware costs to run it fairly fast, when all you do is fire up a browser? <a href="https://www.google.no/?gfe_rd=cr&amp;ei=hISEU_SVNYaX_Aa984HoDg#q=%22the+browser+is+the+os%22&amp;safe=off">The browser is the OS</a> more and more each day. Last time my desktop at home broke down, <a href="https://www.flickr.com/photos/eklem/5040220136/in/set-72157626346440700">I bought a new one</a>. The new one was state of the art and it was a miscalculation buying it. Almost every time I boot it (running Ubuntu), I&#8217;m asked to upgrade to the newest version. That means every half year or so. The laptop I have, I actually use a little, but much less than my pad/tablet and phone.</li>
<li><strong>Everything fun is online</strong> Not a real argument, but hey&#8230; Isn&#8217;t it true?</li>
</ul>
<h2>But what about the Forage search engine you say?</h2>
<p>So, what does these reasons for Lebron/JavaScript&#8217;s future success have to do with the Forage search engine? First of all, it&#8217;s written in JavaScript and <a href="http://youtu.be/ijLtk5TgvZg">needs very little hardware to run properly</a>. You <a href="https://github.com/fergiemcdowall/forage/#installation">install it with npm</a>, and that takes care of all the dependencies, like <a href="https://code.google.com/p/leveldb/">LevelDB</a>, where the data is actually stored. <a href="http://blog.comperiosearch.com/blog/2014/04/29/idea-search-server-running-inside-your-browser/">Hopefully it will run in the browser in near future</a> using Browserify and make testing, installing and maintaining search software so much easier and more accessible. It also opens up a lot of new interesting use cases for search. My guess is that it won&#8217;t compete with the bigger search engines, but that it will open up the possibility for better and cheaper search functionality for small scale solutions. <a href="https://github.com/fergiemcdowall/forage/"><img class="alignnone" src="https://farm6.staticflickr.com/5192/14141658313_ebf053d53d_m.jpg" alt="" width="240" height="150" /></a></p>
<p>Anything you want to add to or subtract from the list?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2014/05/28/5-reasons-lebron-future-forage-search-engine-will-rock/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Idea: search server running inside browser</title>
		<link>http://blog.comperiosearch.com/blog/2014/04/29/idea-search-server-running-inside-your-browser/</link>
		<comments>http://blog.comperiosearch.com/blog/2014/04/29/idea-search-server-running-inside-your-browser/#comments</comments>
		<pubDate>Tue, 29 Apr 2014 18:15:36 +0000</pubDate>
		<dc:creator><![CDATA[Espen Klem]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[forage]]></category>
		<category><![CDATA[Forage Document Processor]]></category>
		<category><![CDATA[Forage Search Engine]]></category>
		<category><![CDATA[Forage Search Server]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[search engine]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=2232</guid>
		<description><![CDATA[Got an idea to use the browser as a virtual machine for Forage Forage is Fergus McDowall&#8217;s pet project: A search server written in JavaScript and based on Node.js and LevelDB. Since it&#8217;s JavaScript, and HTML5 local storage has the same key/value storage as levelDB (HTML5 local storage for Chrome actually is levelDB) it has the [...]]]></description>
				<content:encoded><![CDATA[<p>Got an idea to use the browser as a virtual machine for Forage <a href="https://github.com/fergiemcdowall/forage">Forage is Fergus McDowall&#8217;s pet project</a>: A search server written in JavaScript and based on Node.js and LevelDB. Since it&#8217;s JavaScript, and HTML5 local storage has the same key/value storage as levelDB (HTML5 local storage for Chrome actually is levelDB) it has the possibility to run inside any modern browser. This would mean that the user could get a search server running inside browser.</p>
<p>Forage could then be added with a bookmarklet to any page (A bookmark adding a javascript to the page you&#8217;re on). With some simple UI-stuff you could define the Forage Document Processor Adapter, set up rules for Forage Crawler, crawl, process, index and then search within your indexed documents. All without using any servers, on premises or in the cloud. When the user is satisfied she or he could download the JSON-file with processed documents + scripts for adding a search box,  search result and navigators to a page.</p>
<h2>Possible use cases for search server running inside browser:</h2>
<ul>
<li><strong>Easy site search setup<br />
</strong>One real benefit, and the initial idea, would be that the user would not need any server to test Forage and actually crawl a site. When page crawled the user can download JSON ready to be indexed + setup-files for a search box, navigators and search result. Or add it to a cloud service and there continue the work you started in your browser.</li>
<li><strong>A easy and modern search solution behind the firewall<br />
</strong>Behind the firewall, almost all software looks a bit duller, more beige and basically not modern. But through the browser you could easily combine the strength of  Forage and all the hidden gems behind a firewall. There would be some big issues with security, but for intranet and people search it could be a great solution.</li>
<li><strong>Ad hoc search on a site that is not yours<br />
</strong>Say you&#8217;re looking for something on a site. How about ad hock index it and then search it. Yes, it&#8217;s a bandwidth abuse waiting to happen, but could make a good tool for a lot of situations.</li>
<li><strong>Your life, searchable<br />
</strong>This may need a browser add on, but then again, maybe not. Anyway: How about your whole online life, searchable. Today you have your browser history. It shows you page title and page link. What if all the text and images was searchable?</li>
</ul>
<h2>Some UX sketches of the idea:</h2>
<p><a href="https://www.flickr.com/photos/eklem/14233858701/in/set-72157643790505944">The user finds a page to crawl &#8230;<br />
</a><a href="https://www.flickr.com/photos/eklem/14233858701/in/set-72157643790505944"><img class="alignnone" style="border: 1px solid black" src="https://farm6.staticflickr.com/5492/14233858701_eeae399a87.jpg" alt="Search server running inside browser: The user finds a page to crawl ..." width="500" height="313" /></a></p>
<p><a href="https://www.flickr.com/photos/eklem/14050545130/in/set-72157643790505944/">&#8230; clicks the bookmarklet &#8230;<br />
</a><a href="https://www.flickr.com/photos/eklem/14050545130/in/set-72157643790505944/"><img class="alignnone" style="border: 1px solid black" src="https://farm3.staticflickr.com/2934/14050545130_c6ae387c88.jpg" alt="Search server running inside browser: The user finds a page to crawl ..." width="500" height="313" /></a></p>
<p>.<a href="https://www.flickr.com/photos/eklem/14257334383/in/set-72157643790505944/">.. that adds Forage JavaScript-stuff to the page &#8230;<br />
</a><a href="https://www.flickr.com/photos/eklem/14257334383/in/set-72157643790505944/"><img class="alignnone" style="border: 1px solid black" src="https://farm3.staticflickr.com/2908/14257334383_41deb607f7.jpg" alt="Search server running inside browser: Bookmarklet added" width="500" height="313" /></a></p>
<p><a href="https://www.flickr.com/photos/eklem/14257334533/in/set-72157643790505944/">&#8230; much like a browser plugin or add on &#8230;<br />
</a><a href="https://www.flickr.com/photos/eklem/14257334533/in/set-72157643790505944/"><img class="alignnone" style="border: 1px solid black" src="https://farm6.staticflickr.com/5157/14257334533_ff97de13ef.jpg" alt="Search server running inside browser: Works much like a browser addon or plugin" width="500" height="313" /></a></p>
<p><a href="https://www.flickr.com/photos/eklem/14236885594/in/set-72157643790505944/">&#8230; tests a jQuery selector statement &#8230;<br />
</a><a href="https://www.flickr.com/photos/eklem/14236885594/in/set-72157643790505944/"><img class="alignnone" style="border: 1px solid black" src="https://farm3.staticflickr.com/2899/14236885594_441d1c7f35.jpg" alt="Search server running inside browser: Defining item" width="500" height="313" /></a></p>
<p><a href="https://www.flickr.com/photos/eklem/14237149605/in/set-72157643790505944/">&#8230; and adds the field to the item when satisfied. Repeated until a full item is defined.<br />
<img class="alignnone" src="https://farm6.staticflickr.com/5240/14237149605_b8d0f6be3e.jpg" alt="" width="500" height="313" /></a></p>
<p>Here&#8217;s the <a href="https://github.com/fergiemcdowall/forage/issues/32">feature suggestion at the Forage GitHub page</a>. Ideas or comments are more than welcome! Want to know more about Forage? Check out the <a href="https://github.com/fergiemcdowall/forage">Forage GitHub-pages</a> or <a href="http://blog.comperiosearch.com/blog/tag/forage/">stuff we&#8217;ve written about Forage</a>.</p>
<p>EDIT: <a href="http://blog.comperiosearch.com/blog/2014/05/21/crawl-interfaces-for-forage-running-inside-your-browser/">Drawn some new mock ups on the crawler part: Forage Fetch</a> and written about the <a href="http://blog.comperiosearch.com/blog/2014/05/28/5-reasons-lebron-future-forage-search-engine-will-rock/">killer combo Lebron and what it will mean for search</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2014/04/29/idea-search-server-running-inside-your-browser/feed/</wfw:commentRss>
		<slash:comments>3</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>Get the new version of Forage, the search server for node.js</title>
		<link>http://blog.comperiosearch.com/blog/2013/11/18/get-the-new-version-of-forage-the-search-server-for-node-js/</link>
		<comments>http://blog.comperiosearch.com/blog/2013/11/18/get-the-new-version-of-forage-the-search-server-for-node-js/#comments</comments>
		<pubDate>Mon, 18 Nov 2013 21:16:45 +0000</pubDate>
		<dc:creator><![CDATA[Fergus McDowall]]></dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[forage]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[leveldb]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=1840</guid>
		<description><![CDATA[The new version of Forage is out! 0.3.0 fixes lots niggles with indexing, and gives a pretty hefty improvement to memory usage. There is also a built in matcher for creating cool auto-suggest and auto-complete controls based on the content of the corpus. In related news there is now a family of crawling tools which [...]]]></description>
				<content:encoded><![CDATA[<p>The new version of <a href="http://www.foragejs.net">Forage</a> is out!</p>
<p><a href="https://github.com/foragejs/forage/releases/tag/0.3.0">0.3.0 fixes lots niggles</a> with indexing, and gives a pretty hefty improvement to memory usage. There is also a built in matcher for creating cool auto-suggest and auto-complete controls based on the content of the corpus.</p>
<p>In related news there is now a family of crawling tools which allow you to scrape, process and index web content into your Forage server. Check out <a href="https://github.com/foragejs/forage-fetch">forage-fetch</a>, <a href="https://github.com/foragejs/forage-document-processor">forage-document-processor</a> and <a href="https://github.com/foragejs/forage-indexer">forage-indexer</a> on the <a href="https://github.com/foragejs">forage.js GitHub group</a>.</p>
<p>As always, feedback, pull requests, comments, praise, criticism and beer are most welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2013/11/18/get-the-new-version-of-forage-the-search-server-for-node-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instant search with AngularJS and elasticsearch</title>
		<link>http://blog.comperiosearch.com/blog/2013/10/24/instant-search-with-angularjs-and-elasticsearch/</link>
		<comments>http://blog.comperiosearch.com/blog/2013/10/24/instant-search-with-angularjs-and-elasticsearch/#comments</comments>
		<pubDate>Thu, 24 Oct 2013 09:22:09 +0000</pubDate>
		<dc:creator><![CDATA[Murhaf Fares]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[elastic.js]]></category>
		<category><![CDATA[Elasticsearch]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=1826</guid>
		<description><![CDATA[Join our breakfast seminar in Oslo November 28th In this blog post we try to explain how to build a single-page application (SPA) to search in elasticsearch using AngularJS. For simplicity, we will use a twitter index which you can easily create yourself (see here and here). Angular is an open-source JavaScript framework maintained by [...]]]></description>
				<content:encoded><![CDATA[<address><a href="http://www.comperio.no/frokost131128" target="_blank">Join our breakfast seminar in Oslo November 28th</a></address>
<p><img class="alignright size-medium wp-image-1751" src="http://blog.comperiosearch.com/wp-content/uploads/2013/10/es-ang-300x191.png" alt="" width="300" height="191" />In this blog post we try to explain how to build a single-page application (SPA) to search in elasticsearch using <a title="AngularJS " href="http://angularjs.org/" target="_blank">AngularJS</a>. For simplicity, we will use a twitter index which you can easily create yourself (see <a href="https://github.com/s1monw/hammertime" target="_blank">here</a> and <a href="https://github.com/comperiosearch/elasticsearch-uio-demo/blob/master/examples/advanced/setup-twitter-river.md" target="_blank">here</a>).<br />
Angular is an open-source JavaScript framework maintained by Google. According to the official Angular website &#8220;Angular teaches the browser new syntax through a construct we call directives&#8221;&#8212;in other words, Angluar allows you to extend the HTML syntax to make your application &#8216;more dynamic&#8217;. With Angular, we can also build applications following the Model-View-Control (MVC) design pattern.</p>
<p>To communicate with elasticsearch, we rely on <a href="https://github.com/fullscale/elastic.js" target="_blank">elastic.js</a>, a JavaScript client for elasticsearch.</p>
<p>In this post, we assume some basic understanding of search concepts and Angular. If you are not familiar with Angular, see the further readings section.</p>
<h2>Sketching the structure out</h2>
<p>Angular applications, in general, consist of three types of components: models, views and controllers, and our application is no exception.<br />
The model in our application is, more or less, included within elastic.js, which sends requests to elasticsearch and returns the requested information as JSON objects. The views are <em>almost </em>plain HTML pages which allow the user to enter search queries and display the results of those queries. The controllers are mediators between elastic.js and the views. We have two views and two corresponding controllers for Twitter and Stackoverflow, but we will not be implementing the Stackoverflow part; we added it only for the sake of clarity.</p>
<p>The full code is on <a href="https://github.com/Murhaf/angular-elasticsearch-example">github</a>, you can start by looking at the general structure of the application and then come back here to understand how the different parts of this application work together.</p>
<h2>The single page in the single-page application</h2>
<p>Single-page applications contain, as the name suggests, one page whose content changes dynamically. This page is called <code>index.html</code> in our search application. The following code snippet shows the main parts of index.html.</p>
<script src="https://gist.github.com/7038944.js?file=index.html"></script>
<p>There are two important points to note about the code above. First, the Angluar directive <code>np-app</code> within the <code>&lt;html&gt;</code> tag which defines the boundary of the Angular application. Second, the <code>ng-view</code> directive which specifies where the different views will be rendered within the layout of index.html. Said differently, <code>ng-view</code> is &#8216;replaced&#8217; by the dynamic content in the main page.</p>
<h3>searchApp.js</h3>
<p>In each and every Angular application, there is at least one Angular module. &#8220;searchApp&#8221; is the sole and main module in our application, as indicated in <code>ng-app</code> above. The following piece of code defines this module with its dependencies.</p>
<script src="https://gist.github.com/7038944.js?file=searchApp.js"></script>
<p>The module searchApp depends on three other modules, namely: (1) elasticjs.service, the JavaScript client for elasticsearch, elastic.js, (2) <a href="http://docs.angularjs.org/api/ngSanitize" target="_blank">ngSanitize</a>, an Angular module to sanitize HTML, and (3) <a href="http://binarymuse.github.io/ngInfiniteScroll" target="_blank">infinite-scroll</a>, a directive to implement infinite scrolling in Angular.</p>
<p>We also need to configure the so-called routes, URLs linking to views and controllers. In concrete terms, we need to link the items in the navigation bar to HTML partials. To do so, we use the route service, <code>$routeProvider</code>. Observe that each route has a view, templateUrl, and a controller. Recall that we used the directive <code>ng-view</code> to define the dynamic part within the main page, <code>$routeProvider</code> and <code>ng-view</code> are used together to achieve this dynamic behavior.</p>
<h2>Twitter view</h2>
<p>The first thing we need in a search application is a search box, ha? The following code snippet defines an instant search box that calls a search function, <code>search()</code>, every time the input text is changed. This <code>search()</code> function will be defined later in the Twitter controller.</p>
<script src="https://gist.github.com/7040018.js?file=searchbox.twitter.html"></script>
<p>Observe that we bind the input text to a property named <code>queryTerm</code> using the Angular directive <code>ng-model</code>. This binding makes the input value available throughout the Angular application via an object called scope (<code>$scope</code>). It is noteworthy that binding in Angular is two-way, meaning that if the input text (queryTerm) is changed somewhere in the application this change will be directly reflected on the user interface and vice versa.<br />
Now let&#8217;s dive into how the search function works, and then we can come back to displaying the search results.</p>
<h2>Simple queries</h2>
<p>All the search functionalities are defined within the Twitter controller, TwitterController.js. We start by implementing a simple search function and then gradually enhance it. First, we define a controller named Twitter, which depends on <code>$scope</code> and <code>esjResource</code> (the elastic.js client).</p>
<script src="https://gist.github.com/7039581.js?file=TwitterController.js"></script>
<p>Within the twitter controller, we instantiate the elastic.js client, passing the URL of the local elasticsearch instance. All search requests to elasticsearch go through a <a href="http://docs.fullscale.co/elasticjs/ejs.Request.html" target="_blank">Request</a> object, <code>statusRequest</code>, which queries the specified index and type.<br />
Observe that we are using the binding <code>$scope.queryTerm</code> to access the search query. We use the <a href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-match-query.html" target="_blank">match query</a> family in elasticsearch to search in the <code>_all</code> field for <code>$scope.queryTerm</code>. In addition, we define the fields to be returned by elasticsearch instead of returning full documents. Finally, the search results are appended to <code>$scope.resultArr</code> (again defined within the <code>$scope</code> to make accessible by the views).</p>
<p>With the code above, however, we only get the top ten results matching the user&#8217;s query, usually we want to show more than that, this is where pagination comes into play.</p>
<h3>Pagination with infinite scroll</h3>
<p>Each search request by elastic.js returns ten results by default, but the user&#8217;s information need might not be satisfied by the top 10 results, hence we want to allow the user to load more results if needed. The process of dividing the search results into different pages is called pagination. However, in this example, we will not implement the classic pagination, but instead we will use scrolling; whenever a user scrolls down and reaches the bottom of the page, a new search will be performed with an offset of <code>pege_number*result_per_page</code> and, consequently, a new set of results will be rendered.</p>
<script src="https://gist.github.com/7039581.js?file=pagination.js"></script>
<p>The function <code>show_more</code> will be called whenever the user scrolls down and hits the end of the page. Every time the function <code>show_more</code> is called, it increases the page number, and then calls another search function, <code>searchMore()</code>. The only difference between <code>searchMore()</code> and <code>search()</code> is that the latter defines an offset, <code>.from(offset)</code>.</p>
<h3>Highlighting</h3>
<p>Elasticsearch implements search result highlighting on one or more fields. In the following we define highlighting on the text field, and specify that for each hit the highlighted fragments should be <strong>in bold</strong>.</p>
<script src="https://gist.github.com/7039581.js?file=highlight.js"></script>
<p>The code above defines a <a href="http://docs.fullscale.co/elasticjs/ejs.Highlight.html" target="_blank"><code>Highlight</code></a> object, then passes it to the search request. No changes are required in the search function.</p>
<h2>Viewing, again</h2>
<p>Now that we have defined all the functions needed to send queries to elasticsearch, we can extend our view to display search results.<br />
<script src="https://gist.github.com/7040018.js?file=twitter.html"></script></p>
<p>The directive <code>infinite-scroll</code> specifies that the function <code>show_more()</code> should be called on scroll-down. The directive <a href="http://docs.angularjs.org/api/ng.directive:ngRepeat" target="_blank"><code>ng-repeat</code></a> is like an &#8216;iterative loop&#8217; that repeats the HTML template for each element in the collection specified, e.g. the directive <code>ng-repeat="doc in results.hits.hits"</code> iterates over all the hits returned by elastic.js from elasticsearch. Note that the array <code>resultArr</code> is accessible from the Twitter view because it was defined on the $scope object in TwitterController.js. <code>renderResult</code> and <code>renderResultMetadata</code> are JavaScript functions defined in TwitterController.js, both function return HTML, hence we need to sanitize their returned values using the directive <code>ng-bind-html</code>. We didn&#8217;t explain the functions <code>renderResult</code> and <code>renderResultMetadata</code> as they are straightforward.</p>
<p>In future posts, we will go through faceting with elasticsearch and Angular. If you are curious, though, the code on github already contains faceting.</p>
<h2>Further readings</h2>
<p><a href="http://www.fullscale.co/elasticjs/" target="_blank">elastic.js user guide</a><br />
<a href="http://www.fullscale.co/blog/2013/02/28/getting_started_with_elasticsearch_and_AngularJS_searching.html" target="_blank">Getting Started with elasticsearch and AngularJS: Part1 &#8211; Searching</a><br />
<a href="http://docs.angularjs.org/tutorial/" target="_blank">Angular tutorial &#8212; official website</a><br />
<a href="https://github.com/IgorMinar/foodme" target="_blank">Foodme: Angular example application</a></p>
<p>&nbsp;</p>
<h2><a href="http://www.comperio.no/frokost131128" target="_blank">Join our breakfast seminar in Oslo November 28th</a></h2>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2013/10/24/instant-search-with-angularjs-and-elasticsearch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Norch is changing its name to Forage</title>
		<link>http://blog.comperiosearch.com/blog/2013/08/26/norch-is-changing-its-name-to-forage/</link>
		<comments>http://blog.comperiosearch.com/blog/2013/08/26/norch-is-changing-its-name-to-forage/#comments</comments>
		<pubDate>Mon, 26 Aug 2013 14:41:13 +0000</pubDate>
		<dc:creator><![CDATA[Fergus McDowall]]></dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[forage]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[leveldb]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[norch]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=1661</guid>
		<description><![CDATA[&#8220;Norch&#8221; appears to be a colloquialism in some far flung corners of the Globe, and this unfortunate semantic mixup was slowing adoption of the otherwise excellent search server formally known as Norch. Henceforth, said search server shall be known as Forage. Check it out here and update all favourites and bookmarks accordingly. In related news, [...]]]></description>
				<content:encoded><![CDATA[<p>&#8220;Norch&#8221; appears to be a colloquialism in some far flung corners of the Globe, and this unfortunate semantic mixup was slowing adoption of the otherwise excellent search server formally known as Norch.</p>
<p>Henceforth, said search server shall be known as Forage. <a href="https://github.com/fergiemcdowall/forage/blob/master/README.md">Check it out here</a> and update all favourites and bookmarks accordingly.</p>
<p>In related news, Nor.. sorry Forage is now 10% as popular as Solr on Github. Thanks to all users and contributors who are putting Forage through its paces. We love you.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2013/08/26/norch-is-changing-its-name-to-forage/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Search driven websites</title>
		<link>http://blog.comperiosearch.com/blog/2013/08/09/search-driven-websites/</link>
		<comments>http://blog.comperiosearch.com/blog/2013/08/09/search-driven-websites/#comments</comments>
		<pubDate>Fri, 09 Aug 2013 11:14:46 +0000</pubDate>
		<dc:creator><![CDATA[Håvard Eidheim, Victoria Værnø, Øyvind Wedøe]]></dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[handlebars]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[search driven]]></category>
		<category><![CDATA[search driven website]]></category>
		<category><![CDATA[Solr]]></category>
		<category><![CDATA[students]]></category>
		<category><![CDATA[summer]]></category>
		<category><![CDATA[summer internship]]></category>
		<category><![CDATA[summer job]]></category>
		<category><![CDATA[summer project]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=1626</guid>
		<description><![CDATA[Search driven sites lets the reader find what they need on their own premises, not the architect&#8217;s! This year&#8217;s summer internship program has been centered around the concept “Search driven websites”. Over the course of the summer we&#8217;ve gone from a concept and a vision to a prototype website, and we&#8217;d like to share the potential [...]]]></description>
				<content:encoded><![CDATA[<h4>Search driven sites lets the reader find what they need on their own premises, not the architect&#8217;s!</h4>
<p>This year&#8217;s summer internship program has been centered around the concept “Search driven websites”. Over the course of the summer we&#8217;ve gone from a concept and a vision to a prototype website, and we&#8217;d like to share the potential we&#8217;ve uncovered along the way with you.</p>
<h3 style="text-align: center">What is a search driven website?</h3>
<p style="text-align: left" dir="ltr">On a search driven website, everything is driven by search. More useful and less painfully obvious, a search driven website will get all its content, all its navigation and menus as a result of a search query. This allows a different and more dynamic approach to the structuring and placement of content, in contrast to a typical folder based, editor dependent website where someone has to decide exactly which articles and images will reside on the front page, or any page, at any one time.</p>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2013/08/searchbased2.jpg"><img class="wp-image-1560 aligncenter" src="http://blog.comperiosearch.com/wp-content/uploads/2013/08/searchbased2.jpg" alt="" width="466" height="290" /></a></p>
<p style="text-align: left" dir="ltr">A traditional site requires the user to spend time learning and navigating a cramped and complex menu structure to find the content desired. We believe that navigation can and should be done in a better way, through the use of an ever-ready search bar, dynamic navigators and relevant links. Even when displaying a single page, a search is performed to retrieve that article along with related results.</p>
<p style="text-align: left" dir="ltr">There are immediate advantages to using search as the main logic module of a website. Take the front page: Set the site&#8217;s opening search to &#8220;*&#8221; &#8211; search everything &#8211; and make the search engine order the results by relevance, popularity and date. Display the results as proper, readable articles, and you get a site containing the content you want to display without having to manually specify what goes where. A clear advantage here is that popular results will be displayed automatically on the front page, letting many of your readers find what they want immediately. This will also let your site adapt to your readers&#8217; interests automatically, and not just when you perform a user test or go through a slew of analytics.</p>
<h3 style="text-align: center">A unified experience</h3>
<p dir="ltr">Within this vision of search driven websites is the idea that just as the front page content is retrieved with a search, the reader&#8217;s personal searches should also be displayed like the front page. Let&#8217;s use a specific example. Below is a screen shot from the front page of aftenposten.no, a large Norwegian news site.</p>
<p style="text-align: center"><a href="http://blog.comperiosearch.com/wp-content/uploads/2013/08/front-page.png"><img class=" wp-image-1516 aligncenter" style="border: 1px solid black" src="http://blog.comperiosearch.com/wp-content/uploads/2013/08/front-page.png" alt="" width="599" height="380" /></a></p>
<p dir="ltr">This looks pretty good. Now let&#8217;s search for China and see how it looks.</p>
<p style="text-align: center"><a href="http://blog.comperiosearch.com/wp-content/uploads/2013/08/search.png"><img class="wp-image-1515 aligncenter" style="border: 1px solid black" src="http://blog.comperiosearch.com/wp-content/uploads/2013/08/search.png" alt="" width="570" height="402" /></a></p>
<p dir="ltr">Not looking so good anymore. When we perform a search, it no longer looks like a newspaper. It no longer IS a newspaper, it is a mini Google. What if, instead, the results looked just like the front page?</p>
<p style="text-align: center"><a href="http://blog.comperiosearch.com/wp-content/uploads/2013/08/front-page-search.png"><img class="aligncenter  wp-image-1514" style="border: 1px solid black" src="http://blog.comperiosearch.com/wp-content/uploads/2013/08/front-page-search.png" alt="" width="604" height="461" /></a></p>
<p style="text-align: left" dir="ltr">Now the search becomes an integrated part of the website. Readers no longer have to enter “search mode” to find what they are looking for, they simply type something into the search bar and get a site specifically tailored to their interests. It&#8217;s clean, fresh and feels natural. This part of the search driven vision could easily be implemented in most websites out there, and we believe that unifying the search and the rest of the website would make the Internet a more comfortable place to be.</p>
<h3 style="text-align: center">Reduce maintenance and integration costs</h3>
<p style="text-align: left" dir="ltr">The big advantage of search is that you can simply tell the search engine what you want and it will find the best content for you. We know this might sound obvious, but think about the consequences. Life becomes easier when all you need to do is ask the search to fill your site with content. Remember, both the site administrator and the readers can have a say in what the search engine will look for. To base your website on search can be a good alternative when it is important that relevant and updated content is displayed at all times. If your content is located in many different places and you have different readers with different information needs, a search based solution could be your best bet.</p>
<p style="text-align: left" dir="ltr">With a search based website, the decisions become all about what to search for in which situations. By gathering statistics and usage patterns, the search can be tweaked to give each reader a personalized experience. Whenever you want to add a new page to your site about a particular topic, you&#8217;d simply get the content of your new page through a customized search. The rest is just creating relevant content.</p>
<p style="text-align: left" dir="ltr">When businesses get  new software systems, merge with or acquire other businesses, you often get several sources for your content. This is an organizational pain and comes with high software integration costs. In the purest version of the search driven vision, all you would need to do is make sure your search engine can index the new source. There is no need to move your content or cross/double post articles, as long as the content is in the search engine it&#8217;ll be available through your search driven site.</p>
<p style="text-align: center"><a href="http://blog.comperiosearch.com/wp-content/uploads/2013/08/search-based-sources1.jpg"><img class=" wp-image-1601 aligncenter" src="http://blog.comperiosearch.com/wp-content/uploads/2013/08/search-based-sources1.jpg" alt="" width="486" height="324" /></a></p>
<p style="text-align: left" dir="ltr">Readers often want an overview of what exists on your site as they look for content. Search based navigation could be the answer. Up until recent years, people have been used to navigating through mutually exclusive folders, and this is the way many websites are built today. An alternative approach is to let the search engine figure out which categories exist, for example by observing where pages have been posted or what they are tagged with. Let clicks in the menu navigation be searches for the menu keywords, or a search for elements with a specific category tag. The real locations and structure of your content will no longer be important. This reduces the integration work on site navigation by not having to consider the actual locations of the content, just make sure the new content is categorized or tagged properly.</p>
<h3 style="text-align: center"> Our prototype</h3>
<p>This summer we have created a prototype for this concept, giving the rest of Comperio an example implementation and a platform for further discussions. You can  see our prototype at the address below.  To check out the category navigation click the &#8220;show categories&#8221; in the bottom right corner.</p>
<p style="text-align: center"><a title="beta.comperio.no" href="http://beta.comperio.no">beta.comperio.no</a></p>
<p>The site is composed of four parts. A search engine, an admin interface, a search API and a client. The client is created using Javascript and handlebars.js, the search engine is an Apache Solr instance and the admin interface and search API are both contained in a wordpress plugin. The client requests content from the search API, which uses the search engine as a back end to find relevant content before it is returned to the client. Everything found in the prototype is completely search driven, including the front page, single page view, related items and category navigation. The admin interface lets you control indexing as well as different search parameters.</p>
<h3 style="text-align: center">A last note</h3>
<p style="text-align: left">Over the summer we have built a website completely based on search. We believe that using search as the main content delivery method has great potential. Businesses today have vast amounts of information, and there is an ever increasing need for sharing, accessibility and flexibility. These are challenges that can&#8217;t be ignored and we have enjoyed uncovering, discussing, and hopefully getting closer to a solution to these problems in light of the concept of search driven web sites.</p>
<p style="text-align: center"><a href="http://blog.comperiosearch.com/wp-content/uploads/2013/08/sommerstudenter1.jpg"><img class=" wp-image-1644 aligncenter" src="http://blog.comperiosearch.com/wp-content/uploads/2013/08/sommerstudenter1.jpg" alt="" width="512" height="341" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2013/08/09/search-driven-websites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Norch- a search engine for node.js</title>
		<link>http://blog.comperiosearch.com/blog/2013/07/05/norch-a-search-engine-for-node-js/</link>
		<comments>http://blog.comperiosearch.com/blog/2013/07/05/norch-a-search-engine-for-node-js/#comments</comments>
		<pubDate>Fri, 05 Jul 2013 13:24:02 +0000</pubDate>
		<dc:creator><![CDATA[Fergus McDowall]]></dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[forage]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[norch]]></category>
		<category><![CDATA[search-index]]></category>
		<category><![CDATA[Solr]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=1495</guid>
		<description><![CDATA[***** UPDATE 10th Sept 2013: Norch is now known as Forage- read about this change here ***** Norch is a search engine written for Node.js. Norch uses the Node search-index module which is in turn written using the super fast levelDB library that Google open-sourced in 2011. The aim of Norch is to make a [...]]]></description>
				<content:encoded><![CDATA[<p>*****<br />
<strong>UPDATE 10th Sept 2013:</strong> Norch is now known as <strong>Forage</strong>- <a href="http://blog.comperiosearch.com/blog/2013/08/26/norch-is-changing-its-name-to-forage/" title="Norch is changing its name to Forage">read about this change here</a><br />
*****</p>
<p><a href="http://fergiemcdowall.github.io/norch/">Norch</a> is a search engine written for Node.js. Norch uses the <a href="https://github.com/fergiemcdowall/search-index">Node search-index module</a> which is in turn written using the super fast levelDB library that Google open-sourced in 2011.</p>
<p>The aim of Norch is to make a simple, fast search server, that requires minimal configuration to set up. Norch sacrifices complex functionality for a limited robust feature set, that can be used to set up a freetext search engine for most enterprise scenarios.</p>
<p>Currently Norch features</p>
<ul>
<li>Full text search</li>
<li>Stopword removal</li>
<li>Faceting</li>
<li>Filtering</li>
<li>Relevance weighting (tf-idf)</li>
<li>Field weighting</li>
<li>Paging (offset and resultset length)</li>
</ul>
<div>&nbsp;</div>
<div>Norch can index any data that is marked up in the appropriate JSON format</div>
<div>&nbsp;</div>
<div><a href="https://github.com/fergiemcdowall/norch/releases/v0.2.1">Download the first release of Norch (0.2.1) here</a></div>
<div></div>
<div></div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2013/07/05/norch-a-search-engine-for-node-js/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introducing Solrstrap: A blazing fast tool for querying Solr in a Googleish fashion</title>
		<link>http://blog.comperiosearch.com/blog/2013/02/17/introducing-solrstrap/</link>
		<comments>http://blog.comperiosearch.com/blog/2013/02/17/introducing-solrstrap/#comments</comments>
		<pubDate>Sun, 17 Feb 2013 10:21:31 +0000</pubDate>
		<dc:creator><![CDATA[Fergus McDowall]]></dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[bootstrap]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Solr]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=1235</guid>
		<description><![CDATA[I have just made the first (unnumbered) release of Solrstrap available on github http://fergiemcdowall.github.com/solrstrap/ Solrstrap is a Query-Result interface for Solr- it is intended to be a starting point for those building web interfaces that talk to Solr, or a very lightweight admin tool for querying Solr in a Googleish fashion. Cool things about Solrstrap: [...]]]></description>
				<content:encoded><![CDATA[<p>I have just made the first (unnumbered) release of Solrstrap available on github <a href="http://fergiemcdowall.github.com/solrstrap/">http://fergiemcdowall.github.com/solrstrap/</a></p>
<p>Solrstrap is a Query-Result interface for Solr- it is intended to be a starting point for those building web interfaces that talk to Solr, or a very lightweight admin tool for querying Solr in a Googleish fashion.</p>
<p>Cool things about Solrstrap:</p>
<ul>
<li>Requires <em>only</em> local installation- easy to set up</li>
<li>Access to all Bootstrap functionality. Can be easily extended in a Bootstrappy way.</li>
<li>Blazing fast</li>
<li>Uses less bandwidth</li>
</ul>
<p>Use it as you see fit. Merciless criticism and fawning praise equally welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2013/02/17/introducing-solrstrap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
