<?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; fs4sp</title>
	<atom:link href="http://blog.comperiosearch.com/blog/tag/fs4sp/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>Once upon a time, there was a company called FAST&#8230;</title>
		<link>http://blog.comperiosearch.com/blog/2013/04/01/once-upon-a-time-there-was-fast/</link>
		<comments>http://blog.comperiosearch.com/blog/2013/04/01/once-upon-a-time-there-was-fast/#comments</comments>
		<pubDate>Mon, 01 Apr 2013 21:55:20 +0000</pubDate>
		<dc:creator><![CDATA[Marcus Johansson]]></dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[ESP]]></category>
		<category><![CDATA[fast]]></category>
		<category><![CDATA[fs4sp]]></category>
		<category><![CDATA[SP2013]]></category>

		<guid isPermaLink="false">http://blog.comperiosearch.com/?p=1293</guid>
		<description><![CDATA[…that came out of nowhere, worked its way to the top, and then all of a sudden earlier this year disappeared for good. Time has come to say farewell. In my previous blog post, Examining the new search core in SharePoint 2013, I attached a presentation on Slideshare. The first few slides summarized FAST&#8217;s product [...]]]></description>
				<content:encoded><![CDATA[<p><strong>…that came out of nowhere, worked its way to the top, and then all of a sudden earlier this year disappeared for good. Time has come to say farewell.</strong></p>
<p><span id="more-1293"></span></p>
<p>In my previous blog post, <a href="http://blog.comperiosearch.com/blog/2013/03/06/examining-the-new-search-core-in-sharepoint-2013/">Examining the new search core in SharePoint 2013</a>, I attached a presentation on <a href="http://www.slideshare.net/comperio/axceler-webinar-feb2013-examining-the-new-search-core-in-sp2013">Slideshare</a>. The first few slides summarized FAST&#8217;s product history, both before and after it was acquired by Microsoft. I also boldly stated that we&#8217;re seeing the “End of an era, the birth of a new age”. As cheesy as it may sound, at least from a technology perspective, I find this to be very true.</p>
<p>FAST Search and Transfer, the Norwegian company that sprung from the university in Trondheim, was founded as early as 1997. That&#8217;s a staggering 16 years ago. Even 4 years before the initial release of SharePoint.</p>
<p>Although it&#8217;s debatable when FAST initially entered the Enterprise Search market, the first release of FAST Data Search (FDS) was certainly a milestone. Much later, Microsoft acquired FAST and snapped up its hugely successful successor, the Enterprise Search Platform (ESP). It was later turned into the products FSIA/FSIS and also served as the backbone for FAST Search Server 2010 for SharePoint (FS4SP).</p>
<p>One thing that strikes me when reminiscing about FAST, is how the technology stack can be traced throughout its history. Many of the internal FAST processes we saw in FS4SP were actually already introduced back in FDS (of course in varying shape and form). But like I said in my last blog post, the idea that “FAST is now fully integrated” in SharePoint 2013 is just… well, wrong. The “technology trace” is now gone.</p>
<p>The figure below outlines FAST&#8217;s product history. As you can see, FS4SP was a merge between the FAST and the SharePoint worlds. And it showed. A Microsoft technician, who shall remain unnamed, once referred to it as the “bastard child of the two paradigms”. Although a little harsh – FS4SP was arguably a great improvement to the search-deprived SharePoint world – there was certainly some truth to it.</p>
<p align="center"><a href="http://blog.comperiosearch.com/wp-content/uploads/2013/03/The-evolution-of-FAST.png"><img title="The evolution of FAST" src="http://blog.comperiosearch.com/wp-content/uploads/2013/03/The-evolution-of-FAST_thumb1.jpg" alt="The evolution of FAST" border="0" /></a></p>
<p>Eventually, with the arrival of SharePoint 2013, Microsoft released a well-tailored and cohesive search experience. But there was no longer an obvious technical inheritance from the earlier FAST product line, which is why SharePoint 2013 isn&#8217;t about having FAST “fully integrated”. It&#8217;s, simply put, a whole new platform. Of course with a few exceptions, e.g. some functionality from FSIS carried over to the new release. But generally speaking, we&#8217;re looking at a completely new platform, rewritten from the ground up.</p>
<p>In other words, the pre-MS technology is no longer around and the “technology trace” that we saw in earlier products is now cut off. Additionally, the “FAST” trademark has now slowly started the process of fading into obscurity.</p>
<p>All said and done, it&#8217;s only appropriate that FAST – the company, its technology and the trademark – is finally given a proper farewell. Without further ado, I give you its obituary: FAST, may you rest in peace, among friends in Enterprise Software heaven.</p>
<p align="center"><img title="FAST obituary" src="http://blog.comperiosearch.com/wp-content/uploads/2013/03/FAST-obituary.png" alt="FAST obituary" border="0" /></p>
<p align="left">(Sorry, just couldn&#8217;t help but to shamelessly plug Comperio&#8217;s consulting services <img src="http://blog.comperiosearch.com/wp-content/uploads/2013/03/smile3.gif" alt="" />)</p>
<div class="bjtags">Tags: <a href="http://technorati.com/tag/FAST" rel="tag">FAST</a>, <a href="http://technorati.com/tag/ESP" rel="tag">ESP</a>, <a href="http://technorati.com/tag/FS4SP" rel="tag">FS4SP</a>, <a href="http://technorati.com/tag/SP2013" rel="tag">SP2013</a></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2013/04/01/once-upon-a-time-there-was-fast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Bets &#8211; and nothing but the Best Bets!</title>
		<link>http://blog.comperiosearch.com/blog/2012/01/27/nothing-but-best-bets/</link>
		<comments>http://blog.comperiosearch.com/blog/2012/01/27/nothing-but-best-bets/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 00:13:57 +0000</pubDate>
		<dc:creator><![CDATA[Marcus Johansson]]></dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[fastsearch]]></category>
		<category><![CDATA[fs4sp]]></category>

		<guid isPermaLink="false">http://nuggets.comperiosearch.com/?p=821</guid>
		<description><![CDATA[In FAST Search for SharePoint (FS4SP), Best Bets are result items that are added manually to the results of a search query. But unless you edit the web part, FS4SP will also show you the Keyword Definition along with the Best Bets. Or&#8230;? Let&#8217;s take it from the beginning. Using Best Bets, i.e. hard-wiring a [...]]]></description>
				<content:encoded><![CDATA[<p>In FAST Search for SharePoint (FS4SP), Best Bets are result items that are added manually to the results of a search query. But unless you edit the web part, FS4SP will also show you the Keyword Definition along with the Best Bets. Or&#8230;?</p>
<p><span id="more-821"></span>Let&#8217;s take it from the beginning. Using Best Bets, i.e. hard-wiring a certain result item to a particular search term, is a great way for Search Administrators to make sure end-users find what they’re looking for. Interestingly enough, there’s sometimes a slight contempt towards Best Bets in the technical community. Some people seem to think that the search solution’s relevance model should be able to stand on its own, and make sure the best results are always returned at the top of the results anyway.</p>
<p>But as a Search Administrator, if you could increase the perceived end-user experience <em>a lot</em> by a just <em>a little</em> manual (or semi-automatic) labor, wouldn’t you do it? Sure you would. One way of doing that is simply to look into the top X search queries in your query logs, and spend a few minutes on each search query and hard-wire a certain result item against it.</p>
<p>Anyway – we’re on the Technology section, so let’s get dirty.</p>
<p>In FS4SP, Best Bets are managed through the FAST Search Keywords page under Site Collection Administration. Adding a new one is easy: you start by creating a keyword, and then attach a Best Bet to it. Simple enough.</p>
<p>Let’s say you added the keyword “Comperio”, with the definition “Microsoft Search Partner of the Year 2011”. You then attached a Best Bet to it, linking to Comperio’s web site. With the minimal configuration, you’d end up with something like this:</p>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2012/01/image.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.comperiosearch.com/wp-content/uploads/2012/01/image_thumb.png" border="0" alt="image" width="390" height="210" /></a></p>
<p>Cool! You got yourself a Best Bet, and this is how they’re shown on the majority of FS4SP deployments out there. However, the Best Bet is not the only thing showing. The first star is showing the keyword itself, a long with its definition.</p>
<p>Let’s say you want to save some pixel real-estate, and decides that showing just the link is enough. At the Edit Keyword page, there’s no switch saying if to show the definition or not, but you can remove the text altogether from the text area shown below. That ought to do it!</p>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2012/01/image1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.comperiosearch.com/wp-content/uploads/2012/01/image_thumb1.png" border="0" alt="image" width="390" height="191" /></a></p>
<p>Unfortunately, the result is not much better. We still get two stars, only now the keyword definition text is removed. The keyword itself is floating around by its own above the Best Bet – and not a single pixel was saved from vertical misery.</p>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2012/01/image2.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.comperiosearch.com/wp-content/uploads/2012/01/image_thumb2.png" border="0" alt="image" width="391" height="180" /></a></p>
<p>There’s no other setting on the FAST Search Keywords page to fix this – but there’s still a nice work-around. Enter PowerShell!</p>
<p>In an FS4SP shell, get hold of a Search Setting Group object corresponding to your Site Collection. If you only have one site collection, you can do:</p><pre class="crayon-plain-tag">$ssg = Get-FASTSearchSearchSettingGroup</pre><p>If you have more than one, and haven’t named the group manually, pass in the id of your site collection to the the cmdlet’s –Name parameter. Running the two lines below in a SharePoint Management shell will print the id:</p><pre class="crayon-plain-tag">$site = Get-SPSite -Identity &lt;a href=&quot;http://&amp;lt;site collection root&amp;gt;&quot;&gt;http://&amp;lt;site collection root&amp;gt;&lt;/a&gt;
$site.ID</pre><p>When you’ve got hold of the search setting group, you can use it to view all internal information about the keyword:</p><pre class="crayon-plain-tag">PS C:\FASTSearch\bin&amp;gt; $ssg.Keywords.GetKeyword(&quot;comperio&quot;)
Synonyms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : {}
BestBets&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : {Comperio}
FeaturedContent : {}
Promotions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : {}
Group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Microsoft.SharePoint.Search.Extended.Administration.WCFClient.SearchSettingGroupImplWCF
Definition&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : &amp;lt;DIV&amp;gt;&amp;amp;nbsp;&amp;lt;/DIV&amp;gt;
Term&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : comperio
LastChanged&nbsp;&nbsp;&nbsp;&nbsp; : 1/27/2012 12:36:57 AM
Id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 2</pre><p>Looking at the Definition property, you’ll notice that’s it not actually empty at all &#8211; even though you&#8217;ve clearly removed all text from the definition text area. It contains the HTML entity for a non-breaking space wrapped in a &lt;div&gt; tag! Turns out that if you use the GUI to clear the definition, this is literally as empty you can make it. Even on a brand new keyword, without even specifying a definition. Bug or feature? I don’t know. But now knowing what the problem is, you can easily fix it for yourself by running:</p>
<div>
<pre class="crayon-plain-tag">PS C:\FASTSearch\bin&amp;gt; $keyword = $ssg.Keywords.GetKeyword(&quot;comperio&quot;)
PS C:\FASTSearch\bin&amp;gt; $keyword.Definition = $null</pre><br />
And with no further a due, your Best Bet is finally standing strong – on its own!</p>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2012/01/image3.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.comperiosearch.com/wp-content/uploads/2012/01/image_thumb3.png" border="0" alt="image" width="389" height="140" /></a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2012/01/27/nothing-but-best-bets/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How FS4SP primary keys work</title>
		<link>http://blog.comperiosearch.com/blog/2011/12/18/fs4sp-primary-keys-work/</link>
		<comments>http://blog.comperiosearch.com/blog/2011/12/18/fs4sp-primary-keys-work/#comments</comments>
		<pubDate>Sun, 18 Dec 2011 12:03:22 +0000</pubDate>
		<dc:creator><![CDATA[Marcus Johansson]]></dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[fastsearch]]></category>
		<category><![CDATA[fs4sp]]></category>
		<category><![CDATA[sp2010]]></category>

		<guid isPermaLink="false">http://nuggets.comperiosearch.com/?p=733</guid>
		<description><![CDATA[Just like in most systems that contains data, each indexed content item in FAST Search for SharePoint (FS4SP) is associated with a certain primary key. No surprises here – in order to update or remove an item from the index, the system must be able to uniquely identify it. For the most part, Microsoft has [...]]]></description>
				<content:encoded><![CDATA[<p>Just like in most systems that contains data, each indexed content item in FAST Search for SharePoint (FS4SP) is associated with a certain primary key. No surprises here – in order to update or remove an item from the index, the system must be able to uniquely identify it.</p>
<p>For the most part, Microsoft has done a great job integrating FAST into the SharePoint world, but there are certainly some areas where you notice there are actually two paradigms behind the scene: how things work in SharePoint, and how things (used to) work in FAST.</p>
<p>The primary key of the FS4SP index is one of those areas. In this post, I’ll try to make this a little more understandable.</p>
<p>First of all, the place where most people will notice that a primary key actually exists is in the crawl log on the FAST Content SSA.</p>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2011/12/Untitled.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Untitled" src="http://blog.comperiosearch.com/wp-content/uploads/2011/12/Untitled_thumb.png" border="0" alt="Untitled" width="536" height="238" /></a></p>
<p>Each indexed item is assigned an auto-incremented integer referred to as Item ID. All right, so let’s dig a little deeper.</p>
<p>If you’ve been reading up on FS4SP, you probably already know that there is an internal FAST-process called “qrserver”. It is responsible for receiving queries from the FAST Query SSA and internally forwarding the query to the actual index. You might also know that this process exposes a small web interface. For security reasons, it’s only available from within the server it runs on. More specifically: <a href="http://localhost:13280">http://localhost:13280</a>.</p>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2011/12/image.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.comperiosearch.com/wp-content/uploads/2011/12/image_thumb.png" border="0" alt="image" width="527" height="335" /></a></p>
<p>Searching for something here will return results in an internal XML format. The actual result items are listed under the &lt;RESULTSET&gt; tag a bit down in the XML. There are lots of things to talk about here, e.g. that the naming convention used internally in FAST is quite different to what is used when the results come back through the FAST Query SSA. A managed property for example, is referred to as a “field” internally. But let’s not fret over that now. Instead, let’s look at the first few properties of the first result:</p>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2011/12/image1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.comperiosearch.com/wp-content/uploads/2011/12/image_thumb1.png" border="0" alt="image" width="569" height="63" /></a></p>
<p>After a few quick comparisons of the crawl log on the FAST Content SSA and the search results from the qrserver, it’s clear that the Item ID is stored in FS4SP’s index inside the property <strong>contentid</strong>. When comparing with the Item IDs listed on the FAST Content SSA, we also notice that SharePoint is prefixing the Item ID with “ssic://” when it&#8217;s stored in the index. In other words, the <em>true</em> primary key as used internally, is based on the pattern “ssic://[auto-incremented integer]”.</p>
<p>But as anyone who’s been using FAST pre-Microsoft can tell you, the contentid is actually <em>not</em> the primary key of the index. The real primary key is what’s stored inside the property <strong>internalid</strong>. The value of this property is the MD5 digest of the contentid, concatenated with the name of the content collection it is stored in. Let’s double-check, using our example. We had these two:</p><pre class="crayon-plain-tag">&amp;lt;FIELD NAME=&quot;internalid&quot;&amp;gt;8a832873c701c00135ce827d6c64c09c_sp&amp;lt;/FIELD&amp;gt;
&amp;lt;FIELD NAME=&quot;contentid&quot;&amp;gt;ssic://33&amp;lt;/FIELD&amp;gt;</pre><p>Calculating the MD5 digest of the contentid correctly yields the internalid (sans the collection suffix):</p><pre class="crayon-plain-tag">md5(&ldquo;ssic://33&rdquo;) == &ldquo;8a832873c701c00135ce827d6c64c09c&rdquo;</pre><p>Since the internalid is suffixed with the name of the collection, we can actually put several items with the same contentid into the index. The requirement being that they’re stored in separate collections, so that the concatenated internalid value becomes unique. In FS4SP however, we often use only the default “sp” collection. Luckily, SharePoint makes sure to assign the Item IDs so that they’re unique across all collections, hence creating unique internalid:s even though the items are in the same collection.</p>
<p>However, there are ways in FS4SP to index data without going through the FAST Content SSA, i.e. you can index data without letting SharePoint know about it. This happens when you’re using any of the <a href="http://technet.microsoft.com/en-us/library/ff383272.aspx">FAST Search specific connectors</a> or the command-line tool <a href="http://technet.microsoft.com/en-us/library/ee943508.aspx">docpush</a>. These tools talk directly with the index, bypassing SharePoint completely. Thus, the content id item won’t be assigned an Item ID using the “ssic://” pattern.</p>
<p>So, what happens instead? Let’s try it out. Using the docpush tool, we can send an arbitrary web page into the index:</p>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2011/12/image2.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.comperiosearch.com/wp-content/uploads/2011/12/image_thumb2.png" border="0" alt="image" width="563" height="102" /></a></p>
<p>Using the qrserver web interface, we inspect what was indexed:</p>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2011/12/image3.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.comperiosearch.com/wp-content/uploads/2011/12/image_thumb3.png" border="0" alt="image" width="544" height="80" /></a></p>
<p>In this case, the contentid property is the URL of the web page we specified. This makes sense as the URL is unique for the whole web, and as such it is also a good candidate for being a primary key in the index. A URL is just a special case of a URI, which is what many of the <a href="http://technet.microsoft.com/en-us/library/ee943520.aspx">FS4SP command-line tools</a> use when referring to the primary key of the index. Examples being the docpush tool (when deleting a item from the index with the –d switch) and the waadmin tool (used for retrieving link cardinality data for an indexed item).</p>
<p>To sum up with some key points:</p>
<ul>
<li>The primary key of the index is stored in a property called <strong>contentid</strong>, though in the SharePoint GUIs it is referred to as an <strong>Item ID</strong> and look slightly different. They relate to one another as: [contentid] = ssic://[item id]</li>
<li>Items that are indexed using the connectors of the FAST Content SSA are assigned a contentid on the form “ssic://”…</li>
<li>Items that are indexed with the FAST Search specific connectors or the docpush tool do not follow the same pattern, but are typically a proper URL or a value from a database.</li>
<li>If a command-line tool calls for a “URI” to an indexed item, use whatever is stored in the item’s contentid property.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2011/12/18/fs4sp-primary-keys-work/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>User-Centric Design for Deploying FAST Search Server 2010 for SharePoint</title>
		<link>http://blog.comperiosearch.com/blog/2011/10/26/user-centric-design-deploying-fast-search-server-2010-sharepoint/</link>
		<comments>http://blog.comperiosearch.com/blog/2011/10/26/user-centric-design-deploying-fast-search-server-2010-sharepoint/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 11:11:26 +0000</pubDate>
		<dc:creator><![CDATA[Fergus McDowall]]></dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[fast search database connector]]></category>
		<category><![CDATA[fs4sp]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[optimization]]></category>

		<guid isPermaLink="false">http://nuggets.comperiosearch.com/?p=710</guid>
		<description><![CDATA[The presentation I gave on behalf of Comperio at the 2011 Sharepoint Conferance in Anaheim California is now online here. It discusses a strategy for overcoming the challenges that implementers will face when creating internal search applications. In brief, everybody knows that user-experience (UX) is paramount, so why do organisational dynamics conspire to prioritise UX [...]]]></description>
				<content:encoded><![CDATA[<p>The presentation I gave on behalf of Comperio at the 2011 Sharepoint Conferance in Anaheim California <a href="http://www.youtube.com/watch?v=M7xPHHyWfko">is now online here</a>. It discusses a strategy for overcoming the challenges that implementers will face when creating internal search applications. In brief, everybody knows that user-experience (UX) is paramount, so why do organisational dynamics conspire to prioritise UX down?</p>
<p>The video is 70mins long and roughly divided into three sections: 1) the challenges you face as an implementer (quite interesting), 2) the nuts and bolts of how you overcome this, and 3) Some real life examples. At the end of the presentation I showcase some really nice SharePoint search front-ends that Comperio made for Microsoft a few months ago.</p>
<p>How do you make great UX? What can be done to make your Fast Search For SharePoint application a joy to use? Can Scottish people make themselves understood to Americans? What tips would you give the up and coming UX designer?<a href="http://blog.comperiosearch.com/wp-content/uploads/2011/10/spc2011.png"><img src="http://blog.comperiosearch.com/wp-content/uploads/2011/10/spc2011.png" alt="" title="spc2011" width="297" height="120" class="alignleft size-full wp-image-711" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2011/10/26/user-centric-design-deploying-fast-search-server-2010-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning about nctrl, and disabling the FAST Search Web crawler</title>
		<link>http://blog.comperiosearch.com/blog/2011/07/12/learning-about-nctrl-disabling-fast-search-web-crawler/</link>
		<comments>http://blog.comperiosearch.com/blog/2011/07/12/learning-about-nctrl-disabling-fast-search-web-crawler/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 16:08:38 +0000</pubDate>
		<dc:creator><![CDATA[Marcus Johansson]]></dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[FAST Search Web Crawler]]></category>
		<category><![CDATA[fs4sp]]></category>
		<category><![CDATA[nctrl]]></category>

		<guid isPermaLink="false">http://nuggets.comperiosearch.com/?p=571</guid>
		<description><![CDATA[In FAST Search for SharePoint (FS4SP), there are two methods for crawling web sites. Either use the built-in SharePoint crawler on your FAST Content SSA, or use the far more advanced FAST Search Web crawler. For most small web crawls, it&#8217;s not necessary to use the latter, but instead much easier to set up a [...]]]></description>
				<content:encoded><![CDATA[<p>In FAST Search for SharePoint (FS4SP), there are two methods for crawling web sites. Either use the built-in SharePoint crawler on your FAST Content SSA, or use the far more advanced <a href="http://technet.microsoft.com/en-us/library/ff383271.aspx">FAST Search Web crawler</a>. For most small web crawls, it&#8217;s not necessary to use the latter, but instead much easier to set up a new web Content Source, and use <a title="the standard crawl functionality" href="http://technet.microsoft.com/en-us/library/ff384288.aspx">the standard crawl functionality</a>.</p>
<p>But even if you do, you may have noticed that the FAST Search Web crawler is still turned on behind the scenes (on a default single-node installation). The Node Controller, i.e. the &#8220;nctrl&#8221; tool that handles FS4SP internal processes, is set to automatically start the Web crawler and its associated processes by default. In this blog post, we&#8217;ll circumvent this in order to gain some insight into the inner workings of the Node Controller.</p>
<p>Run a “nctrl status”, and you will see all running FS4SP-processes:</p>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2011/07/nctrlstatus.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="nctrlstatus" src="http://blog.comperiosearch.com/wp-content/uploads/2011/07/nctrlstatus_thumb.png" border="0" alt="nctrlstatus" width="565" height="420" /></a></p>
<p>The processes in red are all related to the crawler:</p>
<p><em>crawler<br />
</em>The main component of the FAST Search Web crawler.</p>
<p><em>browserengine<br />
</em>A component which emulates a real web browser, and makes sure the crawler “see” what a regular user see while browsing the web.</p>
<p><em>webanalyzer, fdmworker, walinkstorereceiver, walookupdb0<br />
</em>Components of the Web Analyzer, which calculates a link graph of the  crawled content. This data can be used for ranking purposes (compare to  Google’s PageRank algorithm). Please note that the Web Analyzer is also used for relevance calculations in SharePoint crawls &#8211; and not only for crawled external web content.</p>
<p>If you don’t plan to use the FAST Search Web Crawler, and don&#8217;t care for the output from the Web Analyzer module, you can shave off something like 50-200 MB of RAM usage by stopping these processes. Although it&#8217;s an easy operation, don&#8217;t do this unless you understand the steps involved, the consequences, how to roll back the changes, and most importantly: that you now tread into unsupported and undocumented waters. Also, even though I and a few other people have tested this without running into problems, it&#8217;s impossible to guarantee that your particular configuration is unaffected. But at the very least, please read on to gain some insight into how the Node Controller works.</p>
<p>If you still want to disable the FAST Search Web Crawler, stop all crawler-related processes by running the following command in a FS4SP shell:</p><pre class="crayon-plain-tag">nctrl stop browserengine crawler fdmworker walinkstorerreceiver walookupdb0 webanalyzer</pre><p>Running “nctrl status” will now show you this:</p>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2011/07/nctrlstatus2.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="nctrlstatus2" src="http://blog.comperiosearch.com/wp-content/uploads/2011/07/nctrlstatus2_thumb.png" border="0" alt="nctrlstatus2" width="561" height="417" /></a></p>
<p>As the crawler processes are now in the “User suspended” mode, they will remain suspended even after a full restart of FS4SP.</p>
<p>If you like, you can go even further and clean up the output of “nctrl status” by removing the now disabled processes from the list altogether. To do this, open up the Node Controller’s configuration file, i.e. %FASTSEARCH%\etc\NodeConf.xml. At the top, you will see something like:</p><pre class="crayon-plain-tag">&amp;lt;startorder&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;nameservice&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;configserver&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;contentdistributor&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;indexer&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;search-1&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;topfdispatch&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;samworker&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;samadmin&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;qrserver&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;qrproxy&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;indexingdispatcher&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;browserengine&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;fdmworker&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;walookupdb0&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;walinkstorerreceiver&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;webanalyzer&amp;lt;/proc&amp;gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp; &amp;lt;proc&amp;gt;sprel&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;spelltuner&amp;lt;/proc&amp;gt;
&amp;lt;/startorder&amp;gt;</pre><p>Comment out all crawler-related processes, like this:</p><pre class="crayon-plain-tag">&amp;lt;startorder&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;nameservice&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;configserver&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;contentdistributor&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;indexer&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;search-1&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;topfdispatch&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;samworker&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;samadmin&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;qrserver&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;qrproxy&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;indexingdispatcher&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;!--
  &amp;lt;proc&amp;gt;browserengine&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;fdmworker&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;walookupdb0&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;walinkstorerreceiver&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;webanalyzer&amp;lt;/proc&amp;gt;&nbsp;
  --&amp;gt;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp; &amp;lt;proc&amp;gt;sprel&amp;lt;/proc&amp;gt;
&nbsp; &amp;lt;proc&amp;gt;spelltuner&amp;lt;/proc&amp;gt;
&amp;lt;/startorder&amp;gt;</pre><p>Save the file, and then issue the command “nctrl reloadcfg” to make the Node Controller pick up the changes. All processes you commented out are not stripped from the “nctrl status” output. But the “crawler” process remains, indeed it was not listed under the &lt;startorder&gt; tag that you just edited. This is because the crawler is administered through the “nctrl” tool itself, and not through its configuration file. Run “nctrl remove crawler” to get rid of it as well.</p>
<p>Your status output should now look like the below. Nice and clean!</p>
<p><a href="http://blog.comperiosearch.com/wp-content/uploads/2011/07/nctrlstatus3.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="nctrlstatus3" src="http://blog.comperiosearch.com/wp-content/uploads/2011/07/nctrlstatus3_thumb.png" border="0" alt="nctrlstatus3" width="558" height="415" /></a></p>
<p>Of course, turning off functionality like this is an advanced operation &#8211; not recommended to most users. However, even though you don&#8217;t want to do this yourself, at least you&#8217;ve now gained some insight into how FS4SP&#8217;s Node Controller works. With a little imagination and extrapolating you can now even add your own custom applications to the Node Controller, and make sure they are started alongside FS4SP. Let me know if you have any questions, or run into problems.</p>
<p><strong>Update:</strong></p>
<p>If you&#8217;re serious about getting rid of the FAST Search Web crawler, <a href="http://techmikael.blogspot.com/">Mikael from Tech and Me</a> kindly pointed out an alternative strategy for disabling it: <a href="http://technet.microsoft.com/en-us/library/ff354931.aspx">change the deployment.xml accordingly</a>, and run the Set-FASTSearchConfiguration cmdlet. This will however require you to shut down FS4SP (nctrl stop), which is not necessary using the above procedure. But it&#8217;s arguably a cleaner approach for getting rid of the crawler. TechNet has more information about <a href="http://technet.microsoft.com/en-us/library/ff381247.aspx">deployment reconfigurations</a> in general. Please note that this will overwrite your %FASTSEARCH%\etc\NodeConf.xml &#8211; editing it manually is unsupported after all.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2011/07/12/learning-about-nctrl-disabling-fast-search-web-crawler/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Document Thumbnails and PowerPoint Preview for your search results without installing FAST for SharePoint</title>
		<link>http://blog.comperiosearch.com/blog/2011/05/14/document-thumbnails-and-powerpoint-preview-for-your-search-results-without-installing-fast-for-sharepoint/</link>
		<comments>http://blog.comperiosearch.com/blog/2011/05/14/document-thumbnails-and-powerpoint-preview-for-your-search-results-without-installing-fast-for-sharepoint/#comments</comments>
		<pubDate>Sat, 14 May 2011 11:17:20 +0000</pubDate>
		<dc:creator><![CDATA[Mikael Svenson]]></dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[fast]]></category>
		<category><![CDATA[fs4sp]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[sp2010]]></category>

		<guid isPermaLink="false">http://nuggets.comperiosearch.com/2011/05/document-thumbnails-and-powerpoint-preview-for-your-search-results-without-installing-fast-for-sharepoint/</guid>
		<description><![CDATA[[Originally posted at: http://techmikael.blogspot.com/2011/05/document-thumbnails-and-powerpoint.html] Microsoft offers three different flavors of search for SharePoint 2010: Foundation, Standard and Enterprise. For each level upwards you get more feature and better search capabilities. One of the visual features included with FAST for SharePoint is Thumbnails and Previews for the search results, as listed on the comparison table below (Compare [...]]]></description>
				<content:encoded><![CDATA[<p><em>[Originally posted at: <a title="Tech And Me" href="http://techmikael.blogspot.com/2011/05/document-thumbnails-and-powerpoint.html">http://techmikael.blogspot.com/2011/05/document-thumbnails-and-powerpoint.html</a>]</em></p>
<p>Microsoft offers three different flavors of search for SharePoint 2010: Foundation, Standard and Enterprise. For each level upwards you get more feature and better search capabilities. One of the visual features included with FAST for SharePoint is Thumbnails and Previews for the search results, as listed on the comparison table below (<a href="http://sharepoint.microsoft.com/en-us/buy/Pages/Editions-Comparison.aspx?Capability=Search">Compare SharePoint Editions – Search</a>).</p>
<p>Wouldn’t it be nice to have this feature on all versions of SharePoint? I will tell you how, as I demonstrated in a proof of concept talk at <a href="http://www.arcticsharepointchallenge.com/">Arctic SharePoint Challenge 2011</a>.</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="2011-04-28-Search-Thumbs-Preview-1" src="http://blog.comperiosearch.com/wp-content/uploads/2011/05/2011-04-28-Search-Thumbs-Preview-1.png" border="0" alt="2011-04-28-Search-Thumbs-Preview-1" width="504" height="410" /></p>
<p>The Thumbnail and Preview feature is depending on <a href="http://office.microsoft.com/en-us/web-apps/">Office Web Apps</a>, which is an additional module you can install on all versions of SharePoint 2010 in order to get web based editing capabilities of Office documents (Word, Excel, PowerPoint and OneNote). Office Web Apps itself is free, but requires Volume Licensing for Microsoft Office 2010.</p>
<p>The API’s used for generating the thumbnails and the PowerPoint previews are the <a href="http://download.microsoft.com/download/1/6/F/16F4E321-AA6B-4FA3-8AD3-E94C895A3C97/%5BMS-OMPWHP%5D.pdf">Office Mobile PowerPoint Web Handler Protocol</a> and the <a href="http://download.microsoft.com/download/1/6/F/16F4E321-AA6B-4FA3-8AD3-E94C895A3C97/%5BMS-OMWWH%5D.pdf">Office Mobile Word Web Handler Protocol</a>, both included with Office Web Apps. These API’s include functions to retrieve generated images of the documents as well as functions to retrieve the textual content within the documents. The API works for doc, docx, ppt and pptx files (Office 97-2010 formats).</p>
<p>The Word API is limited to generating a thumbnail for the first page in your document, while the PowerPoint API can generate an image of any slide as seen below.</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="2011-04-28-Search-Thumbs-Preview-2" src="http://blog.comperiosearch.com/wp-content/uploads/2011/05/2011-04-28-Search-Thumbs-Preview-2.png" border="0" alt="2011-04-28-Search-Thumbs-Preview-2" width="504" height="335" /></p>
<p>If you have installed the Enterprise version of SharePoint you have the possibility to create a new Search Center based on the “<em>FAST Search Center</em>” template, even though FAST is not installed.</p>
<p>The FAST Search Center template features XSLT in the Core Results Web Part which renders javascript calls to functions in a file called <em>search.js</em> located in the <em>_layouts</em> folder. Search.js further implements the communication with the mobile API’s to generate the images.</p>
<p>There are quite a few lines of javascript to implement this feature, but if you are a bit experienced with javascript and ajax programming you would be able to program this feature yourself. This will allow you to get thumbnails and PowerPoint previews with any version of SharePoint, from the free Foundation version to the Enterprise version.</p>
<p>If you are less handy with javascript you can copy out the XSLT used in the Core Results WebPart in the FAST Search Center site template, modify it some, and use it with a search site based on the “Enterprise Search Center” template instead. This way you will get additional visual improvements to the standard search page without having to install FAST.</p>
<p>The quick way is to replace some of the <em>xsl:params</em> set by the web part with pre-set variables instead. If you have FAST installed, then the parameters will be set via the Core Results Webpart. As we are using the oob search we have to set these parameters as variables instead.</p>
<p><span style="font-family: 'Envy Code R';"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"><span style="font-size: 9.5pt;">&lt;</span></span></span><span style="font-size: 9.5pt;"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #2b91af;">xsl:variable</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"> </span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #ff0000;">name</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;">=</span></span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="font-size: 9.5pt;"><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">OpenPreviewLink</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;"> </span></span><span><span style="color: #ff0000;">select</span></span><span><span style="color: #0000ff;">=</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">&#8216;Preview&#8217;</span></span><span style="color: #000000;">&#8220;</span></span><span><span style="font-size: 9.5pt; color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: 'Envy Code R';"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"><span style="font-size: 9.5pt;">&lt;</span></span></span><span style="font-size: 9.5pt;"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #2b91af;">xsl:variable</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"> </span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #ff0000;">name</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;">=</span></span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="font-size: 9.5pt;"><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">ClosePreviewLink</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;"> </span></span><span><span style="color: #ff0000;">select</span></span><span><span style="color: #0000ff;">=</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">&#8216;Close Preview&#8217;</span></span><span style="color: #000000;">&#8220;</span></span><span><span style="font-size: 9.5pt; color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: 'Envy Code R';"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"><span style="font-size: 9.5pt;">&lt;</span></span></span><span style="font-size: 9.5pt;"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #2b91af;">xsl:variable</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"> </span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #ff0000;">name</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;">=</span></span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="font-size: 9.5pt;"><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">ThumbnailTooltipLoadingFailed</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;"> </span></span><span><span style="color: #ff0000;">select</span></span><span><span style="color: #0000ff;">=</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">&#8216;Loading failed!&#8217;</span></span><span style="color: #000000;">&#8220;</span></span><span><span style="font-size: 9.5pt; color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: 'Envy Code R';"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"><span style="font-size: 9.5pt;">&lt;</span></span></span><span style="font-size: 9.5pt;"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #2b91af;">xsl:variable</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"> </span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #ff0000;">name</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;">=</span></span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="font-size: 9.5pt;"><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">ThumbnailTooltipLoading</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;"> </span></span><span><span style="color: #ff0000;">select</span></span><span><span style="color: #0000ff;">=</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">&#8216;Click to toggle preview&#8217;</span></span><span style="color: #000000;">&#8220;</span></span><span><span style="font-size: 9.5pt; color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: 'Envy Code R';"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"><span style="font-size: 9.5pt;">&lt;</span></span></span><span style="font-size: 9.5pt;"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #2b91af;">xsl:variable</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"> </span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #ff0000;">name</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;">=</span></span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="font-size: 9.5pt;"><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">AAMZone</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;"> </span></span><span><span style="color: #ff0000;">select</span></span><span><span style="color: #0000ff;">=</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">0</span></span><span style="color: #000000;">&#8220;</span></span><span><span style="font-size: 9.5pt; color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: 'Envy Code R';"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"><span style="font-size: 9.5pt;">&lt;</span></span></span><span style="font-size: 9.5pt;"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #2b91af;">xsl:variable</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"> </span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #ff0000;">name</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;">=</span></span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="font-size: 9.5pt;"><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">PreviewWindowSize</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;"> </span></span><span><span style="color: #ff0000;">select</span></span><span><span style="color: #0000ff;">=</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">160</span></span><span style="color: #000000;">&#8220;</span></span><span><span style="font-size: 9.5pt; color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: 'Envy Code R';"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"><span style="font-size: 9.5pt;">&lt;</span></span></span><span style="font-size: 9.5pt;"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #2b91af;">xsl:variable</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"> </span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #ff0000;">name</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;">=</span></span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="font-size: 9.5pt;"><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">EnableDocumentPreviewPowerPoint</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;"> </span></span><span><span style="color: #ff0000;">select</span></span><span><span style="color: #0000ff;">=</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">&#8216;true&#8217;</span></span><span style="color: #000000;">&#8220;</span></span><span><span style="font-size: 9.5pt; color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: 'Envy Code R';"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"><span style="font-size: 9.5pt;">&lt;</span></span></span><span style="font-size: 9.5pt;"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #2b91af;">xsl:variable</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"> </span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #ff0000;">name</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;">=</span></span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="font-size: 9.5pt;"><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">EnableDocumentPreviewWord</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;"> </span></span><span><span style="color: #ff0000;">select</span></span><span><span style="color: #0000ff;">=</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">&#8216;true&#8217;</span></span><span style="color: #000000;">&#8220;</span></span><span><span style="font-size: 9.5pt; color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: 'Envy Code R';"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"><span style="font-size: 9.5pt;">&lt;</span></span></span><span style="font-size: 9.5pt;"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #2b91af;">xsl:variable</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"> </span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #ff0000;">name</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;">=</span></span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="font-size: 9.5pt;"><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">ConcurrentDocumentPreview</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;"> </span></span><span><span style="color: #ff0000;">select</span></span><span><span style="color: #0000ff;">=</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">10</span></span><span style="color: #000000;">&#8220;</span></span><span><span style="font-size: 9.5pt; color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: 'Envy Code R';"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"><span style="font-size: 9.5pt;">&lt;</span></span></span><span style="font-size: 9.5pt;"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #2b91af;">xsl:variable</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"> </span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #ff0000;">name</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;">=</span></span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="font-size: 9.5pt;"><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">TotalDocumentPreview</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;"> </span></span><span><span style="color: #ff0000;">select</span></span><span><span style="color: #0000ff;">=</span></span><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">10</span></span><span style="color: #000000;">&#8220;</span></span><span><span style="font-size: 9.5pt; color: #0000ff;"> /&gt;</span></span></span></span></p>
<p>I also had to modify the xslt two more places. Around line 665 and line 725 locate the <em>FST_CheckForPreview</em> call and change the function parameter</p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: 'Envy Code R';"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"><span style="font-size: 9.5pt;"> </span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: 'Envy Code R';"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"><span style="font-size: 9.5pt;">&#8216;&lt;</span></span></span><span style="font-size: 9.5pt;"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #2b91af;">xsl:value-of</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;"> </span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #ff0000;">select</span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="color: #0000ff;">=</span></span></span><span style="mso-bidi-font-family: 'Envy Code R';"><span style="font-size: 9.5pt;"><span style="color: #000000;">&#8220;</span><span><span style="color: #0000ff;">sitename</span></span><span style="color: #000000;">&#8220;</span></span><span><span style="font-size: 9.5pt; color: #0000ff;">/&gt;&#8217;</span></span></span></span></p>
<p>with</p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="font-family: 'Envy Code R';"><span style="font-size: 9.5pt; color: #0000ff;"> </span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="mso-bidi-font-family: 'Envy Code R';"><span style="font-family: 'Envy Code R';"><span style="font-size: 9.5pt; color: #0000ff;">&#8216;http://rootsite&#8217;</span></span></span></p>
<p>where rootsite is the name of your SharePoint server url.</p>
<p>This was to ensure the calls to the Mobile API went to the top level site, as they failed when called on sub-site url’s.</p>
<p>That being said, there are several other good reasons for deploying FAST for SharePoint in your organization besides these visual enhancements. Capabilities to enrich and modify your content prior to indexing, thus tailoring search experience towards the real needs of your users, as well as the powerful query capabilities offered via FAST Query Language are just a couple of arguments for choosing FAST.</p>
<p>But then again, it never hurts to have moderate amounts of eye-candy on your search page, as it will increase the perceived quality of the results.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2011/05/14/document-thumbnails-and-powerpoint-preview-for-your-search-results-without-installing-fast-for-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The True Value of Enterprise Search Technology</title>
		<link>http://blog.comperiosearch.com/blog/2011/05/11/the-true-value-of-enterprise-search-technology/</link>
		<comments>http://blog.comperiosearch.com/blog/2011/05/11/the-true-value-of-enterprise-search-technology/#comments</comments>
		<pubDate>Wed, 11 May 2011 09:30:00 +0000</pubDate>
		<dc:creator><![CDATA[Vegard Sandvold]]></dc:creator>
				<category><![CDATA[User Experience]]></category>
		<category><![CDATA[business goals]]></category>
		<category><![CDATA[enterprise search]]></category>
		<category><![CDATA[fast]]></category>
		<category><![CDATA[fs4sp]]></category>
		<category><![CDATA[ucd]]></category>
		<category><![CDATA[user needs]]></category>

		<guid isPermaLink="false">http://nuggets.comperiosearch.com/?p=449</guid>
		<description><![CDATA[Technology has no inherent business value. Technology doesn&#8217;t provide improved findabiliy, decision-making or knowledge management by itself. Technology just provides features that help users perform tasks, thereby reaching their goals. Only when user goals and business goals align, can you hope to create business value. Without people, there is no purpose &#8211; and without purpose, [...]]]></description>
				<content:encoded><![CDATA[<div id="attachment_452" style="width: 586px" class="wp-caption aligncenter"><a href="http://blog.comperiosearch.com/wp-content/uploads/2011/05/3332644561_c9d5041d02_z.jpg"><img class="size-full wp-image-452 " title="3332644561_c9d5041d02_z" src="http://blog.comperiosearch.com/wp-content/uploads/2011/05/3332644561_c9d5041d02_z.jpg" alt="" width="576" height="383" /></a><p class="wp-caption-text">flickr.com/theredproject</p></div>
<p><strong>Technology has no inherent business value.</strong> Technology doesn&#8217;t provide improved findabiliy, decision-making or knowledge management by itself. Technology just provides features that help users perform tasks, thereby reaching their goals. Only when user goals and business goals align, can you hope to create business value. Without people, there is no purpose &#8211; and without purpose, there is no value.</p>
<p>Enterprise search technology is no different from the rest in this respect. In fact, <strong>I know only 3 good reasons for investing in search technology</strong>.</p>
<p><span id="more-449"></span></p>
<p>Spending time and money on an enterprise search platform like FAST Search For SharePoint (FS4SP) may be a good idea if you believe the success of your business depends on:</p>
<ol>
<li>Consolidation of information from different data sources and formats.</li>
<li>Content refinement and entity extraction.</li>
<li>Linguistic processing and advanced querying capabilities.</li>
</ol>
<p>There is of course more to search than this, but these features are in my opinion the hallmarks of FS4SP and the old FAST ESP &#8211; what enterprise search does better, faster and with higher tractability than any other available technology. Search is by no means the only way to access information, and similar technologies (like <a href="http://en.wikipedia.org/wiki/Data_warehouse">data warehouse</a>, <a href="http://en.wikipedia.org/wiki/Extract,_transform,_load">ETL</a> and <a href="http://en.wikipedia.org/wiki/Topic_Maps">topic maps</a>) will let you do similar things, each having their own particular strengths and weaknesses.</p>
<p>The true value of enterprise search technology is not bound to fair promises of improved efficiency and profitability, but to the marvels it can do in the hands of brilliant engineers &#8211; without requiring any prior knowledge of the context of use. Business value is only attainable when technological capabilities form a higher unity with user needs and business goals through cross-diciplinary user-centered design.</p>
<p>The success of your business may depend on improved findability, decision-making and knowledge management, and that is<strong> the true value of designing the user experience of search</strong>.</p>
<p><em>Note: this post is cross-posted at <a href="http://www.thingsontop.com/true-enterprise-search-technology-1171.html">Things On Top</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2011/05/11/the-true-value-of-enterprise-search-technology/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Working with crawled and managed properties via code</title>
		<link>http://blog.comperiosearch.com/blog/2011/05/04/working-with-crawled-and-managed-properties-via-code/</link>
		<comments>http://blog.comperiosearch.com/blog/2011/05/04/working-with-crawled-and-managed-properties-via-code/#comments</comments>
		<pubDate>Wed, 04 May 2011 20:52:13 +0000</pubDate>
		<dc:creator><![CDATA[Mikael Svenson]]></dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[fast]]></category>
		<category><![CDATA[fs4sp]]></category>
		<category><![CDATA[sp2010]]></category>

		<guid isPermaLink="false">http://nuggets.comperiosearch.com/2011/05/working-with-crawled-and-managed-properties-via-code/</guid>
		<description><![CDATA[I was teaching a FAST for SharePoint Workshop today and we were doing labs on creating and mapping crawled properties to managed properties with the FAST Administration UI and via PowerShell. But one student wanted to know how to do this in code, hence this blog post. Instead of having a deployment script creating your [...]]]></description>
				<content:encoded><![CDATA[<p>I was teaching a FAST for SharePoint Workshop today and we were doing labs on creating and mapping crawled properties to managed properties with the FAST Administration UI and via PowerShell. But one student wanted to know how to do this in code, hence this blog post.</p>
<p>Instead of having a deployment script creating your properties, you could have an event receiver which creates your mappings once a site or list is provisioned. Or when some other action is going on.</p>
<p>So how do you go about doing this?</p>
<p>Well, first off Crawled and Managed Properties for FAST are a part of the index schema and is accessible via the following two namespaces:</p>
<p><strong><a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.search.extended.administration.aspx">Microsoft.SharePoint.Search.Extended.Administration</a></strong> <strong><a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.search.extended.administration.schema.aspx">Microsoft.SharePoint.Search.Extended.Administration.Schema</a></strong></p>
<p>which are the namespaces used for working with the FAST components.</p>
<p>Below is a quick example showing how this can be done in code, with comments along the way to guide the process. It’s all pretty straight forward.</p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #0000ff;"><span style="font-size: 9.5pt;">const</span></span></span><span><span style="font-size: 9.5pt;"><span style="color: #000000;"> </span><span><span style="color: #0000ff;">string</span></span><span style="color: #000000;"> propertyName = </span><span><span style="color: #a31515;">&#8220;productname&#8221;</span></span><span style="color: #000000;">;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #008000;">// Get a reference to the Index Schema via the SchemaContext class</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #2b91af;"><span style="font-size: 9.5pt;">SchemaContext</span></span></span><span><span style="font-size: 9.5pt;"><span style="color: #000000;"> schemaContext = </span><span><span style="color: #0000ff;">new</span></span><span style="color: #000000;"> </span><span><span style="color: #2b91af;">SchemaContext</span></span><span style="color: #000000;">();</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #2b91af;"><span style="font-size: 9.5pt;">Schema</span></span></span><span><span style="font-size: 9.5pt; color: #000000;"> schema = schemaContext.Schema;</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;"> </span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #008000;">// Assign a guid to the custom Crawled Propery Category</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #2b91af;"><span style="font-size: 9.5pt;">Guid</span></span></span><span><span style="font-size: 9.5pt;"><span style="color: #000000;"> myGuid = </span><span><span style="color: #0000ff;">new</span></span><span style="color: #000000;"> </span><span><span style="color: #2b91af;">Guid</span></span><span style="color: #000000;">(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #2b91af;"><span style="font-size: 9.5pt;">Category</span></span></span><span><span style="font-size: 9.5pt; color: #000000;"> catGroup;</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #008000;">// Create if it does not exist</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #0000ff;"><span style="font-size: 9.5pt;">if</span></span></span><span><span style="font-size: 9.5pt; color: #000000;"> (!schema.AllCategories.Contains(myGuid))</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;">{</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="color: #000000;"><span style="mso-spacerun: yes;"><span style="font-size: 9.5pt;"> </span></span><span style="font-size: 9.5pt;">catGroup = schema.AllCategories.Create(</span></span><span style="font-size: 9.5pt;"><span><span style="color: #a31515;">&#8220;My Crawled Properties&#8221;</span></span><span style="color: #000000;">, myGuid);</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;">}</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #0000ff;">else</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;">{</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="color: #000000;"><span style="mso-spacerun: yes;"><span style="font-size: 9.5pt;"> </span></span><span style="font-size: 9.5pt;">catGroup = schema.AllCategories[myGuid];</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;">}</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;"> </span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #008000;">// Create a new crawled property if it doesn&#8217;t exist</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #2b91af;"><span style="font-size: 9.5pt;">CrawledProperty</span></span></span><span><span style="font-size: 9.5pt; color: #000000;"> cp = catGroup.GetAllCrawledProperties().Where(</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="color: #000000;"><span style="mso-spacerun: yes;"><span style="font-size: 9.5pt;"> </span></span><span style="font-size: 9.5pt;">c =&gt; c.Name == propertyName &amp;&amp; c.VariantType == 31 &amp;&amp; c.Propset == myGuid).FirstOrDefault();</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #0000ff;"><span style="font-size: 9.5pt;">if</span></span></span><span><span style="font-size: 9.5pt;"><span style="color: #000000;"> (cp == </span><span><span style="color: #0000ff;">null</span></span><span style="color: #000000;">) cp = catGroup.CreateCrawledProperty(propertyName, myGuid, 31);</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;"> </span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #008000;">// Create a new managed property if it doesn&#8217;t exist</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #2b91af;"><span style="font-size: 9.5pt;">ManagedProperty</span></span></span><span><span style="font-size: 9.5pt; color: #000000;"> mp;</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #0000ff;"><span style="font-size: 9.5pt;">if</span></span></span><span><span style="font-size: 9.5pt; color: #000000;"> (!schema.AllManagedProperties.Contains(propertyName))</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;">{</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="color: #000000;"><span style="mso-spacerun: yes;"><span style="font-size: 9.5pt;"> </span></span><span style="font-size: 9.5pt;">mp = schema.AllManagedProperties.Create(propertyName, </span></span><span style="font-size: 9.5pt;"><span><span style="color: #a31515;">&#8220;&#8221;</span></span><span style="color: #000000;">, </span><span><span style="color: #2b91af;">ManagedType</span></span><span style="color: #000000;">.Text);</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;">}</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #0000ff;">else</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;">{</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="color: #000000;"><span style="mso-spacerun: yes;"><span style="font-size: 9.5pt;"> </span></span><span style="font-size: 9.5pt;">mp = schema.AllManagedProperties[propertyName];</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;">}</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;"> </span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #008000;">// Create a new crawled to managed property mapping if it doesn&#8217;t exit</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #2b91af;"><span style="font-size: 9.5pt;">CrawledPropertyMapping</span></span></span><span><span style="font-size: 9.5pt; color: #000000;"> mapping = mp.GetCrawledPropertyMappings();</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #0000ff;"><span style="font-size: 9.5pt;">if</span></span></span><span><span style="font-size: 9.5pt; color: #000000;"> (!mapping.Contains(cp))</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;">{</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="color: #000000;"><span style="mso-spacerun: yes;"><span style="font-size: 9.5pt;"> </span></span><span style="font-size: 9.5pt;">mapping.Add(cp);</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="color: #000000;"><span style="mso-spacerun: yes;"><span style="font-size: 9.5pt;"> </span></span><span style="font-size: 9.5pt;">mp.SetCrawledPropertyMappings(mapping);</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;">}</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;"> </span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #008000;">// Get a reference to the default full text index (first one)</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #2b91af;"><span style="font-size: 9.5pt;">FullTextIndex</span></span></span><span><span style="font-size: 9.5pt; color: #000000;"> fti = schema.AllFullTextIndecies.First();</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;"> </span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #008000;">// Get the full text index mapping from the Managed Property</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #2b91af;"><span style="font-size: 9.5pt;">FullTextIndexMappingCollection</span></span></span><span><span style="font-size: 9.5pt; color: #000000;"> fullTextIndexMappingCollection = mp.GetFullTextIndexMappings();</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #2b91af;"><span style="font-size: 9.5pt;">FullTextIndexMapping</span></span></span><span><span style="font-size: 9.5pt; color: #000000;"> indexMapping =</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="color: #000000;"><span style="mso-spacerun: yes;"><span style="font-size: 9.5pt;"> </span></span><span style="font-size: 9.5pt;">fullTextIndexMappingCollection.Where(ftpMap =&gt; ftpMap.FullTextIndex.Name == fti.Name).FirstOrDefault();</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #008000;">// Set a mapping to importance level 6, if it&#8217;s not already set to something else</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span><span style="color: #0000ff;"><span style="font-size: 9.5pt;">if</span></span></span><span><span style="font-size: 9.5pt;"><span style="color: #000000;"> (indexMapping == </span><span><span style="color: #0000ff;">null</span></span><span style="color: #000000;"> || !fullTextIndexMappingCollection.Contains(indexMapping))</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;">{</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="color: #000000;"><span style="mso-spacerun: yes;"><span style="font-size: 9.5pt;"> </span></span><span style="font-size: 9.5pt;">fullTextIndexMappingCollection.Create(fti, 6);</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span><span style="font-family: Consolas;"><span style="font-size: 9.5pt; color: #000000;">}</span></span></span></p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0cm 0cm 10pt;"><span style="font-family: Calibri;"><span style="font-size: 11pt; color: #000000;"> </span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2011/05/04/working-with-crawled-and-managed-properties-via-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Query Suggestions in FAST Search for SharePoint 2010 (FS4SP)</title>
		<link>http://blog.comperiosearch.com/blog/2011/05/03/query-suggestions-fast-search-4-sharepoint-2010-fs4sp/</link>
		<comments>http://blog.comperiosearch.com/blog/2011/05/03/query-suggestions-fast-search-4-sharepoint-2010-fs4sp/#comments</comments>
		<pubDate>Tue, 03 May 2011 09:10:58 +0000</pubDate>
		<dc:creator><![CDATA[Trond Øivind Eriksen]]></dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[fast]]></category>
		<category><![CDATA[fs4sp]]></category>
		<category><![CDATA[query completion]]></category>
		<category><![CDATA[query suggestions]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[sp2010]]></category>

		<guid isPermaLink="false">http://nuggets.comperiosearch.com/?p=409</guid>
		<description><![CDATA[Adding query suggestions to your search solution is a feature that can contribute to a better search experience for end-users. First of all, it makes us save time as we don&#8217;t have to type in the entire query. Secondly, it can help the user avoid potential spelling errors,  which in turn can reduce the quality of the [...]]]></description>
				<content:encoded><![CDATA[<p>Adding query suggestions to your search solution is a feature that can contribute to a better search experience for end-users. First of all, <em>it makes us save time</em> as we don&#8217;t have to type in the entire query. Secondly, it can help the user <em>avoid potential spelling errors</em>,  which in turn can reduce the quality of the results, and avoid that the user has to spend more time finding the information he/she is looking for. Also,  it can aid the user to do the first search more specific, by <em>adding information that may be pertinent to the search</em>.</p>
<p>With FS4SP,  these query suggestions are automatically created over a period of time based on how often the users search for a specific query within a certain timeframe. Sometimes, it can however make sense to modify the query suggestions manually &#8211; and to help us do that, we can always lean on PowerShell.</p>
<p>The script I have implemented, has the following parameters:</p><pre class="crayon-plain-tag">.\QuerySuggestions.ps1 -file [fileName] -action [add|delete] -queryssa [querySSAName]</pre><p>where <em>file</em> is the file with the query suggestion phrases (one per line), <em>action</em> decides if the query suggestions should be added or deleted, <em>queryssa</em> is the name of the Query SSA. And now for the actual code.</p><pre class="crayon-plain-tag">#Get input
param
(
    [string]$file,
    [string]$action,
    [string]$queryssa
)

function LoadQueryCompletion()
{
    # Read input file with stuff that you should add to the Query suggestion list
    if (test-path $file)
    {
        log VERBOSE &quot;Reading file: $file&quot;
	$input = Get-Content $file
    }
    else
    {
        log ERROR &quot;File noe found. Exiting script.&quot;
        exit 1
    }
    # Get SSA search application
    $searchapp = Get-SPEnterpriseSearchServiceApplication -Identity $queryssa

    # Populating a dictionary with the query suggestions that have already been added before
    $query_suggestions = Get-SPEnterpriseSearchLanguageResourcePhrase -SearchApplication $searchapp -Language En-Us -Type QuerySuggestionAlwaysSuggest
    $already_dict = @{}
    foreach ($term in $query_suggestions)
    {
        if (!$term){ continue }
        $already_dict.Add($term.Phrase,$term.Phrase)
    }

    if ($action -eq &quot;add&quot;)
	{
	    foreach ($entry in $input) {
	        if ($already_dict.ContainsKey($entry))
	        {
	            log WARNING &quot;Key already added: $entry&quot;
	        }
	        else
	        {

			try {
				log VERBOSE &quot;Adding entry ($entry) with language En-US&quot;
			    	$nooutput = new-spenterprisesearchlanguageresourcephrase -SearchApplication $searchapp -Language En-Us -Type QuerySuggestionAlwaysSuggest -Name $entry
				$already_dict.Add($entry,$entry)
			}catch {
				log ERROR &quot;Could not add entry ($entry). Exiting script.&quot;
				exit 1
			}
	        }
	    }
	}
	elseif ($action -eq &quot;delete&quot;)
	{
		foreach ($entry in $input) {
			try {
				if ($already_dict.ContainsKey($entry)) {
					log VERBOSE &quot;Removing entry ($entry) with language En-US&quot;
			    	        $nooutput = remove-spenterprisesearchlanguageresourcephrase -SearchApplication $searchapp -Language En-Us -Type QuerySuggestionAlwaysSuggest -Identity $entry -Confirm:$false
					$already_dict.Remove($entry)
				}else{
					log WARNING &quot;Entry ($entry) has not been added as a query suggestion&quot;
				}
			}catch {
				log ERROR &quot;Could not remove entry ($entry).&quot;
			}
	    }
	}
	else
	{
		log ERROR &quot;-action parameter contains an invalid value. Exiting script.&quot;
	}

    #Run timerjob manually to upload entries from DB
    Start-SPTimerJob -Identity &quot;prepare query suggestions&quot;

    log VERBOSE &quot;Finished loading query completion phrases.&quot;
}

#Main
$spInstalled = Get-PSSnapin | Select-String Sharepoint
if (!$spInstalled)
{
    Add-PSSnapin Microsoft.Sharepoint.PowerShell
}
LoadQueryCompletion</pre><p>If you want to include the logging output , add this to the top of the PowerShell script.</p><pre class="crayon-plain-tag"># Log level to color mapping
$lc = @{
	VERBOSE=&quot;green&quot;;
	WARNING=&quot;yellow&quot;;
	ERROR=&quot;red&quot;;
	MESSAGE=&quot;blue&quot;;
}
function log([string] $level, [string] $message) {
	$date = get-date -uformat &quot;%G-%m-%d %T&quot;
	write-host &quot;[$date] &quot; -nonewline
	write-host -foregroundcolor $lc[$level] $level.padright(7) -nonewline
	write-host &quot; $message&quot;
}</pre><p>If you&#8217;re really picky (like me), you should also consider having some kind of validation on the input parameters. For instance verifying that the file exists, that the action parameter contains a valid value, and that the Query SSA exists. You can check the last-mentioned by adding the following lines of code to the script.</p><pre class="crayon-plain-tag">$ssaExists = Get-SPEnterpriseSearchServiceApplication | Select-String $queryssa
if ($ssaExists -eq $null)
{
	log ERROR &quot;-queryssa is invalid. Search Service Application does not exist. Exiting script.&quot;
	$queryssas = Get-SPEnterpriseSearchServiceApplication | Where-Object {$_.DefaultSearchProvider -eq &quot;FASTSearch&quot;}
	foreach ($queryssa in $queryssas)
        {
		if ($queryssa)
    	    	{
    			$name = $queryssa.Name
    			log VERBOSE &quot;Found the following Query SSA: $name&quot;
    	    	}
        }
}</pre><p>After doing that, you should be ready to run the script on the SharePoint Admin server.</p>
<p>Afterwards, go to your FAST Search Center, and start typing one of the terms you have added. The result can look something like in the screenshot below.</p>
<p><img class="alignnone size-full wp-image-410" src="http://blog.comperiosearch.com/wp-content/uploads/2011/05/QuerySuggestions.png" alt="" width="428" height="246" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2011/05/03/query-suggestions-fast-search-4-sharepoint-2010-fs4sp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Three Main Reasons Why You Should Upgrade to FAST for SharePoint</title>
		<link>http://blog.comperiosearch.com/blog/2011/05/02/three-main-reasons-why-you-should-upgrade-to-fast-for-sharepoint/</link>
		<comments>http://blog.comperiosearch.com/blog/2011/05/02/three-main-reasons-why-you-should-upgrade-to-fast-for-sharepoint/#comments</comments>
		<pubDate>Mon, 02 May 2011 19:23:04 +0000</pubDate>
		<dc:creator><![CDATA[Mikael Svenson]]></dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[fast]]></category>
		<category><![CDATA[fs4sp]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://nuggets.comperiosearch.com/2011/05/three-main-reasons-why-you-should-upgrade-to-fast-for-sharepoint/</guid>
		<description><![CDATA[I was fortunate to be one of three finalists in SharePoint Magazine’s Aspiring Author Contest. Today the article went live and I’m quite happy about it. You can read the article over at SharePoint Magazine, and if you like it feel free to click the Facebook Like button at the end. The other two finalists [...]]]></description>
				<content:encoded><![CDATA[<p>I was fortunate to be one of three finalists in SharePoint Magazine’s Aspiring Author Contest. Today the article went live and I’m quite happy about it.</p>
<p>You can read the article over at <a href="http://sharepointmagazine.net/articles/business-user/three-main-reasons-why-you-should-upgrade-to-fast-for-sharepoint">SharePoint Magazine</a>, and if you like it feel free to click the Facebook Like button at the end.</p>
<p>The other two finalists are:</p>
<p>“<a href="http://spm.to/23">Best Practices for SharePoint Groups</a>” by Josh McCarty and “<a href="http://spm.to/24">A Guide to Leaving Lotus Notes and Moving to Microsoft SharePoint</a>” by Andrew Vevers.</p>
<p>And if you are serious about search within SharePoint, go FAST!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.comperiosearch.com/blog/2011/05/02/three-main-reasons-why-you-should-upgrade-to-fast-for-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
