<?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/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>full text search &#8211; Squix &#8211; TechBlog</title>
	<atom:link href="https://blog.squix.org/tag/full-text-search/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.squix.org</link>
	<description></description>
	<lastBuildDate>Sun, 17 Apr 2016 07:56:50 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.8</generator>
<site xmlns="com-wordpress:feed-additions:1">121913304</site>	<item>
		<title>Speeding up data store queries with self-merge joins</title>
		<link>https://blog.squix.org/2011/02/speeding-up-data-store-queries-with.html</link>
					<comments>https://blog.squix.org/2011/02/speeding-up-data-store-queries-with.html#respond</comments>
		
		<dc:creator><![CDATA[Daniel Eichhorn]]></dc:creator>
		<pubDate>Sun, 27 Feb 2011 07:33:00 +0000</pubDate>
				<category><![CDATA[Common]]></category>
		<category><![CDATA[full text search]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[self merge joins]]></category>
		<guid isPermaLink="false">http://blog.squix.org/2011/02/27/speeding-up-data-store-queries-wi/</guid>

					<description><![CDATA[For a while now Feederator allows some kind of full text queries. When items are read for the first time into the datastore an index will be created. This index is currently a break down of the single words in the title, but can be ... <p><a class="read-more btn btn-secondary" href="https://blog.squix.org/2011/02/speeding-up-data-store-queries-with.html">Read More</a></p>]]></description>
										<content:encoded><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">For a while now Feederator allows some kind of full text queries. When items are read for the first time into the datastore an index will be created. This index is currently a break down of the single words in the title, but can be extended to the description and other attributes of an item. My first attempt of implementing the full text search on the AppEngine resulted in a very costly algorithm.<br />
The fulltext search index is stored as a set of strings. The datastore allows you to query for items on a set as if it would be a singular attribute, like a single String for example. So you can create a query for a set of strings <i>index={&#8220;green&#8221;, &#8220;yellow&#8221;, &#8220;red&#8221;} </i>in this way <i>WHERE index == &#8220;red&#8221; </i>which would be a hit in this case. I tried to do a query like this <i>WHERE index == &#8220;red&#8221; AND index == &#8220;green&#8221; order by date </i>which returned with errors telling me that I need to create a datastore index for that query. I thought that the error came from the fact that I had to filters on the attribute index. But I was wrong. The problem was that I wanted to sort the results at the same time. So, by forgetting about the in-database-sorting the query works and it works darn fast. And even better: you don&#8217;t even need an index for AND connected filters like that! Which means you can save storage space (in my case almost 1GB!).</p>
<p>Here are some rules of thumb that I learned from this lesson. Due to the way the datastore is organized (don&#8217;t forget its BigTable nature!) you have to pay attention when designing your data model.</p>
<ol style="text-align: left;">
<li>You can query easily on sets</li>
<li>Try to avoid non-equal filters or filters that use OR. The best filters are ones that try to find an intersection between different domains on ONE entity</li>
<li>Sort your results in-memory to avoid the need for indexes</li>
<li>Sets are expensive to serialize/ deserialize. This costs occure when you write or read a set from datastore. To avoid serialization costs put your full text index on a separate child object. You query on the child object only for the key. With the key you get the parent object and then you can do in-memory sorting/ ranking</li>
</ol>
<div>These links helped me a lot to understand how to optimize my full text search:</div>
<div>
<ul style="text-align: left;">
<li><a href="http://googleappengine.blogspot.com/2010/04/making-your-app-searchable-using-self.html">Making your app searchable using self merge-joins</a></li>
<li><a href="http://code.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html">Brett Slatkin&#8217;s presentation at Google I/O</a></li>
</ul>
</div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.squix.org/2011/02/speeding-up-data-store-queries-with.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">95</post-id>	</item>
		<item>
		<title>New Features: Searching the archive</title>
		<link>https://blog.squix.org/2010/12/new-features-searching-archive.html</link>
					<comments>https://blog.squix.org/2010/12/new-features-searching-archive.html#respond</comments>
		
		<dc:creator><![CDATA[Daniel Eichhorn]]></dc:creator>
		<pubDate>Sun, 19 Dec 2010 13:50:00 +0000</pubDate>
				<category><![CDATA[Common]]></category>
		<category><![CDATA[app engine]]></category>
		<category><![CDATA[feederator]]></category>
		<category><![CDATA[full text search]]></category>
		<category><![CDATA[rss]]></category>
		<guid isPermaLink="false">http://blog.squix.org/2010/12/19/new-features-searching-archive/</guid>

					<description><![CDATA[I&#8217;m trying to improve Feederator.org. Sometimes changes are rather invisible to the end user. Sometimes new features extend the use of feederator rather dramatically. I enabled such a feature today: searching the archives with full text key words. To keep your inbox clean Feederator moves ... <p><a class="read-more btn btn-secondary" href="https://blog.squix.org/2010/12/new-features-searching-archive.html">Read More</a></p>]]></description>
										<content:encoded><![CDATA[<p>I&#8217;m trying to improve Feederator.org. Sometimes changes are rather invisible to the end user. Sometimes new features extend the use of feederator rather dramatically. I enabled such a feature today: searching the archives with full text key words.<br />
To keep your inbox clean Feederator moves items older than 3 days to the archive. Once they are in the archive you can search for them. Make sure that your most significant word comes first, otherwise it might be omitted. The search is not as good yet as Google but it is getting better. Indexed words are part of the title of a post and its categories. In addition the MIME Type of the attachment will also be indexed. Entering &#8220;2010 nzb dvdrip&#8221; will return with a list of items containing 2010 and dvdrip in the title and having a usenet enclosure.<br />
In the time of this writing there are already more than 20&#8217;000 torrent items and more than 15&#8217;000 nzb items indexed.</p>
<p>Other new features:</p>
<ul>
<li>Social bookmarking items: share items that you like with your friends in Twitter, Facebook and others</li>
<li>Drag And Drop: by dragging an item with the dotted handle to a feed label on the left you can copy that item to a new feed. This also works with search results: you can search for movies and once you found one that you like you can drag it to the feed that your downloader has subscribed to</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.squix.org/2010/12/new-features-searching-archive.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">100</post-id>	</item>
	</channel>
</rss>
