<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C#</title><link>http://www.michaelfalconer.co.uk/category/11.aspx</link><description>C#</description><managingEditor>Michael Falconer</managingEditor><dc:language>en-GB</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Michael Falconer</dc:creator><title>.Net helper class for SQL Server Full Text Search</title><link>http://www.michaelfalconer.co.uk/archive/2004/11/10/207.aspx</link><pubDate>Wed, 10 Nov 2004 09:42:00 GMT</pubDate><guid>http://www.michaelfalconer.co.uk/archive/2004/11/10/207.aspx</guid><description>&lt;P&gt;I've made use of SQL Servers ability to run a full text search in a couple of projects recently&amp;nbsp;and wrote a little helper class that takes a typical search phrase and creates the tsql statement that you can then pass into a CONTAINSTABLE clause. Basically it looks either for words separated by a space, or a phrase with quotes around it, or a mixture of both.&lt;/P&gt;
&lt;P&gt;There is one limitation in this implementation; the noise words are hard coded into a string array. It would be better to read in the contents of the noise word file that SQL Server uses, but in some shared hosting arrangements you may not have access to the file.&lt;/P&gt;
&lt;STYLE type=text/css&gt;.cf { font-family: Courier New; font-size: 10pt; color: #000000; background: #ffffff; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt; }.cl { margin: 0px; MARGIN: 0px; }.cln { color: #008080; background: #ffffff; }.cb1 { color: #0000ff; }.cb2 { color: #808080; }.cb3 { color: #008000; }&lt;/STYLE&gt;

&lt;DIV class=cf&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;using&lt;/SPAN&gt;&lt;SPAN&gt; System;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;using&lt;/SPAN&gt;&lt;SPAN&gt; System.Collections;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;namespace&lt;/SPAN&gt;&lt;SPAN&gt; CamelJones.Data.Utils&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Helper object for converting a search string into a&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Full Text Search query, used in a CONTAINSTABLE clause.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;public&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; class&lt;/SPAN&gt;&lt;SPAN&gt; SqlFtsHelper&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #region&lt;/SPAN&gt;&lt;SPAN&gt; Private Members&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; string&lt;/SPAN&gt;&lt;SPAN&gt; _searchPhrase;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; string&lt;/SPAN&gt;&lt;SPAN&gt; _ftsQuery;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN&gt; ArrayList _ignoredWords = &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;new&lt;/SPAN&gt;&lt;SPAN&gt; ArrayList();&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; string&lt;/SPAN&gt;&lt;SPAN&gt;[] _noiseWords = &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;new&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; string&lt;/SPAN&gt;&lt;SPAN&gt;[] {"about","after","all","also","an","and","another","any","are","as","at","be","because","been","before","being","between","both","but","by","came","can","come","could","did","do","each","for","from","get","got","has","had","he","have","her","here","him","himself","his","how","if","in","into","is","it","like","make","many","me","might","more","most","much","must","my","never","now","of","on","only","or","other","our","out","over","said","same","see","should","since","some","still","such","take","than","that","the","their","them","then","there","these","they","this","those","through","to","too","under","up","very","was","way","we","well","were","what","where","which","while","who","with","would","you","your"};&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #endregion&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #region&lt;/SPAN&gt;&lt;SPAN&gt; Constructors&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Constructor for the SqlFtsHelper object&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;param name="query"&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=cb3&gt;The search string that is to be used to create the Full Text Search query&lt;/SPAN&gt;&lt;SPAN class=cb2&gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; SqlFtsHelper(&lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; searchPhrase)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; _searchPhrase = searchPhrase;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; BuildFTSQuery();&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;33&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #endregion&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #region&lt;/SPAN&gt;&lt;SPAN&gt; Public Methods&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; The query string that was passed in to be used for the Full Text Search&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;39&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;40&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;public&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; string&lt;/SPAN&gt;&lt;SPAN&gt; SearchPhrase&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;41&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;42&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;get&lt;/SPAN&gt;&lt;SPAN&gt; { &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN&gt; _searchPhrase; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;43&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;44&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;45&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;46&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; The T-SQL statement to be used as the contains_search_condition parameter&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;47&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; of a CONTAINSTABLE query&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;48&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;49&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;public&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; string&lt;/SPAN&gt;&lt;SPAN&gt; FTSQuery&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;50&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;51&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;get&lt;/SPAN&gt;&lt;SPAN&gt; { &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN&gt; _ftsQuery; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;52&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;53&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;54&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;55&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; An array of any noise words that were included in the search string&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;56&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;57&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;public&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; object&lt;/SPAN&gt;&lt;SPAN&gt;[] IgnoredWords&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;58&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;59&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;get&lt;/SPAN&gt;&lt;SPAN&gt; { &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN&gt; _ignoredWords.ToArray(); }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;60&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;61&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;62&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #endregion&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;63&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;64&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #region&lt;/SPAN&gt;&lt;SPAN&gt; Private Methods&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;65&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;66&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;67&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Builds the Full Text Search query&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;68&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;69&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; void&lt;/SPAN&gt;&lt;SPAN&gt; BuildFTSQuery()&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;70&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;71&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; _ftsQuery = "";&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;72&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; cleanQuery = _searchPhrase;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;73&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;74&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Strip out comments, wildcards&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;75&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Replace("--","");&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;76&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Replace("*","");&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;77&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Replace("%","");&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;78&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;79&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Rather than simply split the string, walk&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;80&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// through it looking for phrases or individual&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;81&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// words&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;82&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Trim();&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;83&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;while&lt;/SPAN&gt;&lt;SPAN&gt;(cleanQuery.Length&amp;gt;0)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;84&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;85&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// If this is the only word&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;86&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(cleanQuery.IndexOf('"')==-1 &amp;amp;&amp;amp; cleanQuery.IndexOf(' ')==-1)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;87&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;88&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(!CheckNoiseWord(cleanQuery))&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;89&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;90&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FTSAddWord(cleanQuery);&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;91&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;92&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;break&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;93&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;94&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;95&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Get the next word/phrase&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;96&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(!cleanQuery.StartsWith("\""))&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;97&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;98&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Get the word from the search string&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;99&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;int&lt;/SPAN&gt;&lt;SPAN&gt; end = cleanQuery.IndexOf(" ");&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;100&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(end&amp;lt;=0){end = cleanQuery.Length;}&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;101&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; theWord = cleanQuery.Substring(0,end);&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;102&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;103&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Check it's not a noise word&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;104&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(!CheckNoiseWord(theWord))&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;105&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;106&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FTSAddWord(theWord);&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;107&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;108&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;109&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Remove the word from the search string&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;110&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Remove(0,end);&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;111&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Trim();&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;112&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;continue&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;113&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;114&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;115&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;116&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// A phrase&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;117&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;int&lt;/SPAN&gt;&lt;SPAN&gt; end = cleanQuery.IndexOf('"',1) + 1;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;118&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(end&amp;lt;=1){end = cleanQuery.Length;}&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;119&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FTSAddPhrase(cleanQuery.Substring(0,end));&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;120&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Remove(0,end);&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;121&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Trim();&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;122&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;continue&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;123&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;124&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;125&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;126&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;127&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;128&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Checks a string for noise words and, if any exist,&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;129&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; removes them from the string and adds them to the&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;130&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; array of ignored words.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;131&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;132&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;param name="word"&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=cb3&gt;the word to check&lt;/SPAN&gt;&lt;SPAN class=cb2&gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;133&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;returns&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=cb3&gt;true if the word is a noise word, otherwise false&lt;/SPAN&gt;&lt;SPAN class=cb2&gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;134&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; bool&lt;/SPAN&gt;&lt;SPAN&gt; CheckNoiseWord(&lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; word)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;135&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;136&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(IsNoiseWord(word))&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;137&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;138&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _ignoredWords.Add(word);&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;139&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;140&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;141&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;142&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;143&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;144&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;145&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Add an individual word to the query&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;146&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;147&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;param name="word"&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=cb3&gt;the word to be added&lt;/SPAN&gt;&lt;SPAN class=cb2&gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;148&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; void&lt;/SPAN&gt;&lt;SPAN&gt; FTSAddWord(&lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; word)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;149&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;150&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(_ftsQuery.Length&amp;gt;0)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;151&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;152&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _ftsQuery = _ftsQuery + " AND ";&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;153&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;154&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; _ftsQuery = _ftsQuery + "FORMSOF(INFLECTIONAL, " + word + ")";&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;155&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;156&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;157&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;158&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Add a phrase to the FTS query&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;159&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;160&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;param name="phrase"&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=cb3&gt;the phrase to be added&lt;/SPAN&gt;&lt;SPAN class=cb2&gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;161&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; void&lt;/SPAN&gt;&lt;SPAN&gt; FTSAddPhrase(&lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; phrase)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;162&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;163&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(_ftsQuery.Length&amp;gt;0)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;164&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;165&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _ftsQuery = _ftsQuery + " AND ";&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;166&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;167&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; _ftsQuery = _ftsQuery + phrase;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;168&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;169&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;170&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;171&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Checks if the word is a noise word&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;172&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;173&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;param name="word"&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=cb3&gt;the word to check&lt;/SPAN&gt;&lt;SPAN class=cb2&gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;174&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;returns&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=cb3&gt;true if it is a noise word, otherwise false&lt;/SPAN&gt;&lt;SPAN class=cb2&gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;175&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; bool&lt;/SPAN&gt;&lt;SPAN&gt; IsNoiseWord(&lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; word)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;176&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;177&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Exclude individual characters&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;178&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(word.Length&amp;gt;1)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;179&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;180&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Iterate through the string array of noise words,&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;181&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// and check the word parameter does not match&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;182&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;foreach&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; item &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;in&lt;/SPAN&gt;&lt;SPAN&gt; _noiseWords)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;183&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;184&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(word==item)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;185&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;186&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;187&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;188&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;189&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;190&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;191&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;192&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;193&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;194&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;195&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;196&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #endregion&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;197&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;198&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;P.S. The code snippet above was formatted using the CopySourceAsHtml VS addin by &lt;A href="http://www.jtleigh.com/people/colin/blog/"&gt;Colin Coller&lt;/A&gt;.&lt;/P&gt;&lt;img src ="http://www.michaelfalconer.co.uk/aggbug/207.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Michael Falconer</dc:creator><title>New site - journalonline.co.uk</title><link>http://www.michaelfalconer.co.uk/archive/2004/10/25/205.aspx</link><pubDate>Mon, 25 Oct 2004 12:07:00 GMT</pubDate><guid>http://www.michaelfalconer.co.uk/archive/2004/10/25/205.aspx</guid><description>&lt;P&gt;Last week a site I've been working on for a couple of months went live - &lt;A href="http://www.journalonline.co.uk"&gt;www.journalonline.co.uk&lt;/A&gt;. Developed for the &lt;A href="http://www.lawscot.org.uk"&gt;Law Society of Scotland&lt;/A&gt; and working with &lt;A href="http://www.connectcommunications.co.uk"&gt;Connect Communications&lt;/A&gt;, the site is an online resource of information that appears in the printed magazine 'The Journal'.&lt;/P&gt;
&lt;P&gt;The site is entirely developed in &lt;A title=ASP.NET href="http://www.asp.net" target=_blank&gt;ASP.NET&lt;/A&gt; (using c#) and has a SQL Server 2000 backend. I made use of &lt;A href="http://www.wilsondotnet.com"&gt;Paul Wilson's&lt;/A&gt; &lt;A href="http://authors.aspalliance.com/PaulWilson/Articles/?id=14"&gt;master pages&lt;/A&gt; for maintaining the site templates, and also used the Data Provider and &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/cmab.asp"&gt;Configuration Management&lt;/A&gt; application blocks. Note that if you plan to use the Configuration Management application blosk, I strongly recommend you check out the forum on the gotdotnet site where the component is hosted - there are a number of known issues with it.&lt;/P&gt;
&lt;P&gt;The search facility provided on the site (to search the library of articles) makes use of a Full Text Index. Having used Index Server a number of times in the past to provide search facilities,&amp;nbsp;I understood the ease of integration this approach would offer, and the in built facility for ranking results. It was also a low cost solution, as no third party software was required. The main downside can be the performance of the index population, but in this case that wasn't an issue as the frequency of updates was low.&lt;/P&gt;
&lt;P&gt;The backend of the system also uses &lt;A href="http://www.freetextbox.com"&gt;FreeTextBox&lt;/A&gt; (the same component used to manage this blog!).&lt;/P&gt;
&lt;P&gt;Feel free to have a look and let me know what you think!&lt;/P&gt;&lt;img src ="http://www.michaelfalconer.co.uk/aggbug/205.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Michael Falconer</dc:creator><title>Exception handling in .net applications</title><link>http://www.michaelfalconer.co.uk/archive/2004/08/28/196.aspx</link><pubDate>Sat, 28 Aug 2004 19:20:00 GMT</pubDate><guid>http://www.michaelfalconer.co.uk/archive/2004/08/28/196.aspx</guid><description>&lt;P&gt;One of the features of the .net CLR that I love the best is structured exception handling. Having worked largely on ASP / VBScript / VB applications prior to moving to C# / .net, the ability to catch and handle every type of error that can occur has proved invaluable.&lt;/P&gt;
&lt;P&gt;Most of the .net applications I've worked on so far have been relatively simple, with very few interface boundaries and therefore I've not had to worry too much about catching exceptions until they bubble to the UI. The current project I'm working on, however, involves properly stuctured DAL / BLL and UI layers, plus I've been implementing provider patterns for a variety of components. One of my sources of information&amp;nbsp;/ inspiration has been the source code for .Text, where I noticed a number of classes the used&amp;nbsp;a try...finally block without any catch. At first this looked a bit odd, until I came across &lt;A href="http://www.interact-sw.co.uk/iangblog/2004/08/16/whentocatch"&gt;this article&lt;/A&gt; on &lt;A href="http://www.interact-sw.co.uk/iangblog/"&gt;Ian Griffith's weblog&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;So, if his closing remark (If it's news to you that your &lt;CODE&gt;finally&lt;/CODE&gt; blocks should be outnumbering your &lt;CODE&gt;catch&lt;/CODE&gt; blocks by a significant margin, then you're probably doing something wrong) applies to you, check it out.&lt;/P&gt;&lt;img src ="http://www.michaelfalconer.co.uk/aggbug/196.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Michael Falconer</dc:creator><title>Generics - List&amp;lt;Employee&amp;gt; or EmployeeList?</title><link>http://www.michaelfalconer.co.uk/archive/2004/08/25/195.aspx</link><pubDate>Wed, 25 Aug 2004 09:31:00 GMT</pubDate><guid>http://www.michaelfalconer.co.uk/archive/2004/08/25/195.aspx</guid><description>&lt;P&gt;I was over talking to Jim last night, showing him some of the stuff I've been working on recently. One thing I pointed out was the fact that a lot of the classes I created were very similar (in particular the collection classes I had to create). I commented on the fact that they were an extremely good candidate for being a &lt;A href=http://msdn.microsoft.com/msdnmag/issues/03/09/NET/ target="_blank"&gt;generic&lt;/A&gt;, so thought I'd look a bit more into it this morning.&lt;/P&gt;
&lt;P&gt;Now, the applications I'm developing at the moment are based on v1.1 of the framework, so I've not had much time to play with v2, and certainly can't change the taget framweork version at the last minute. But when I can across &lt;A href=http://blogs.msdn.com/ericgu/archive/2004/08/17/215740.aspx target="_blank"&gt;this discussion&lt;/A&gt; on &lt;A href=http://blogs.msdn.com/ericgu target="_blank"&gt;Eric Gunnersons blog&lt;/A&gt;, how I wished I could!!!&lt;/P&gt;&lt;img src ="http://www.michaelfalconer.co.uk/aggbug/195.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>