<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blog.vyvojar.cz/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Michal Ježek</title><link>http://blog.vyvojar.cz/michaljezek/default.aspx</link><description /><dc:language /><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Full-Text Search (MS SQL Server) pro internetové obchody a jiné aplikace.</title><link>http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx</link><pubDate>Thu, 25 Mar 2010 11:44:00 GMT</pubDate><guid isPermaLink="false">99a92ff2-698a-48c2-8eaf-f3d9b6202627:236162</guid><dc:creator>MichalJezek</dc:creator><slash:comments>4</slash:comments><comments>http://blog.vyvojar.cz/michaljezek/comments/236162.aspx</comments><wfw:commentRss>http://blog.vyvojar.cz/michaljezek/commentrss.aspx?PostID=236162</wfw:commentRss><description>&lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; Úvod        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Co očekává uživatel od hledání?         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Karsa Search Manager         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Testovací databáze         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Vytvoření fulltextového katalogu         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Kvalita hledání&amp;#160; &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; Váha sloupců&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; iFTS Predicates and Functions         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Vyhledávací vzory         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Personalizované hledání         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Přímé volání výsledné uložené procedury         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Závěr&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Úvod&lt;/strong&gt;     &lt;br /&gt;Cílem článku je příblížit problematiku vytvoření a správu relevantního full-textového hledání ve webových projektech - internetový obchodech. Informace zde uvedené vycházejí ze zkušeností při tvorbě aplikace &lt;a href="http://www.karsa.eu/cs/"&gt;Karsa SQL fulltext search manager&lt;/a&gt; a následných implementacích hledání. V článku se zaměřujeme na problematiku hledání v internetových obchodech, ale postup lze samozřejmě aplikovat na libovolnou webovou, desktopovou aplikaci.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;br /&gt;&lt;strong&gt;Co očekává uživatel od hledání? &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Uživatel očekává, že pokud zadá hledáný výraz, ihned se zobrazí relevantní výsledky. Nepřemýšlí nad tím, že Vaše aplikace není google. Pokud se nezobrazí &lt;strong&gt;relevantní výsledky&lt;/strong&gt; zpravidla odchází. Tím klesá konverzní poměr – nákupu.     &lt;br /&gt;Obecně uživatelé nedůvěřují hledání na stránkách mimo hlavní portály, právě z důvodu nízké relevantnosti výsledků. Cílem by tedy mělo být vytvořit co nejvíce relevantní hledaní a s MS SQL Server iFTS (Integrated Full Text Search) tato možnost rozhodně je.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Karsa Search Manager &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Karsa Fulltext Search Manager je desktopová aplikace, díky&amp;#160; které se zvýšuje efektivita práce a redukují se chyby při tvorbě fulltextového hledání. Desktopový manager slouží k nastavení    &lt;br /&gt;hledání a následnému vygenerování uložených procedur na MS SQL Server.Není tedy potřeba registrace žádných dll ani vkládání .net kódu na SQL Server, vždy se spouští standardní T-SQL script a využívají se široké možnosti SQL Server iFTS. &lt;/p&gt;  &lt;p&gt;Vytvoření několik set řádkového scriptu je velice časově náročné, nehledě na jeho následné úpravy dle a/b testování a vyhodnocení logů a právě v tomto aplikace významně vývojáři usnadňuje život. Aplikace neomezuje vývojáře při tvorbě vlastních vyhledávacích scriptů a odvádí “černou práci” při generování pomocných scriptů, výtvoření katalogu, propojení, profilování, aktualizacích.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Testovací databáze&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Pro ukázky hledání budeme používat toto zjednodušené schéma imaginárního internetového obchodu.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/DB_schema_5D219EBE.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="DB_schema" border="0" alt="DB_schema" src="http://blog.vyvojar.cz/blogs/michaljezek/DB_schema_thumb_33AACCCD.png" width="460" height="259" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Tabulka eshop_product obsahuje jen několik záznamů, na kterých budeme demostrovat hledání&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/items_767B80BA.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="items" border="0" alt="items" src="http://blog.vyvojar.cz/blogs/michaljezek/items_thumb_44151C8A.png" width="486" height="88" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Vytvoření fulltextového katalogu &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;K vytvoření Fulltextového katalogu můžeme využít více možností. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1. SQL Server Managment studio      &lt;br /&gt;2. T-SQL       &lt;br /&gt;3. Karsa Search manager &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Zde si uvedeme možnosti 1 a 3. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SQL Server Managment studio      &lt;br /&gt;&lt;/strong&gt;1. V objekt exploreru, otevřete server, rozbalte databáze a otevřete databázi v které chcete vytvořit full-text katalog.     &lt;br /&gt;2. Rozbalte Storege, klikněte pravým tlačítkem na Full Text Catalogs     &lt;br /&gt;3. Vyberte New Full-Text Catalog     &lt;br /&gt;4. V New Full-Text Catalog dialogu uveďte informace o katalogu, který chcete vytvořit. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/NewFulltextCatalog_6C12ABF5.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="NewFulltextCatalog" border="0" alt="NewFulltextCatalog" src="http://blog.vyvojar.cz/blogs/michaljezek/NewFulltextCatalog_thumb_77A86934.png" width="396" height="203" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Nový full-text katalog&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/FulltextCatalogProperties_4BA08BF7.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="FulltextCatalogProperties" border="0" alt="FulltextCatalogProperties" src="http://blog.vyvojar.cz/blogs/michaljezek/FulltextCatalogProperties_thumb_1CB62800.png" width="492" height="442" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Výběr tabulek a indexu&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Při výběru indexu dejte pozor, aby byl vybrán Clustered index. Clustrovaný index je výrazně rychlejší&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/IndexClustered_208BCC2B.png"&gt;&lt;img style="border-right-width:0px;margin:10px 0px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="IndexClustered" border="0" alt="IndexClustered" src="http://blog.vyvojar.cz/blogs/michaljezek/IndexClustered_thumb_79BDB5EA.png" width="360" height="50" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Karsa Search manager &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Výhodou použití je svázanost návrhu full-textového hledání s katalogem. Pokud přidáte nový sloupec ve kterém chcete hledat a tento sloupec není definován ve full-textovém katalogu je tento sloupce označen červeně. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/AddFulltextColumn_37894D08.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="AddFulltextColumn" border="0" alt="AddFulltextColumn" src="http://blog.vyvojar.cz/blogs/michaljezek/AddFulltextColumn_thumb_4E489491.png" width="221" height="287" /&gt;&lt;/a&gt; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Po stisknutí tlačítka Generování pomocných scriptů se na databázi nebo do souboru vygeneruje pomocný script, který sloupce, přidá do full-textového katalogu&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/GenerovaniPomocnychScriptu_40E2818B.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="GenerovaniPomocnychScriptu" border="0" alt="GenerovaniPomocnychScriptu" src="http://blog.vyvojar.cz/blogs/michaljezek/GenerovaniPomocnychScriptu_thumb_0CAE5845.png" width="314" height="151" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Při návrhu hledaní se těchto změn provádějí desítky a tato funkcionalita šetří velice čas. Pokud není vytvořen full-text katalog je také automaticky vytvořen. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Kvalita hledání &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Kvalitou hledání rozumíme počet výsledků, které jsou relevantní k hledanému výrazu. Nejčastější chybou hledání v aplikacích je přiliš nízká míra relavantních výsledků v hledání. Výsledk obsahuje příliš irelevantních záznamů, nebo neobsahuje žádné záznamy. To je způsobeno přiliš striktním full-textovým dotazem. Například hledaná fráze: Mountains bike pedals&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;   &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;select&lt;/span&gt;  * &lt;span style="color:#0000ff;"&gt;from&lt;/span&gt; eshop_product &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;contains&lt;/span&gt;([Description], &lt;span style="color:#006080;"&gt;' &amp;quot;mountains&amp;quot; and &amp;quot;bike&amp;quot; and &amp;quot;pedals&amp;quot;'&lt;/span&gt;) &lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Výsledkem je nalezený jeden záznam&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/3slovacontains_587A2EFE.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="3slovacontains" border="0" alt="3slovacontains" src="http://blog.vyvojar.cz/blogs/michaljezek/3slovacontains_thumb_55D1734D.png" width="435" height="40" /&gt;&lt;/a&gt; &lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Pokud by jsme použili tento dotaz ve výsledku se nezobrazí záznam, který 
  &lt;br /&gt;v popisu obsahuje jen slova &lt;strong&gt;bike and pedals &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mužeme změnit dotaz například takto&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;select&lt;/span&gt;  * &lt;span style="color:#0000ff;"&gt;from&lt;/span&gt; eshop_product &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;contains&lt;/span&gt;([Description], &lt;span style="color:#006080;"&gt;' (&amp;quot;mountains&amp;quot; and &amp;quot;bike&amp;quot; and &amp;quot;pedals&amp;quot;) or (&amp;quot;bike&amp;quot; and &amp;quot;pedals&amp;quot;)'&lt;/span&gt;)&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Výsledkem jsou dva záznamy&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/3slovacontainsAND_55D1A61E.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="3slovacontainsAND" border="0" alt="3slovacontainsAND" src="http://blog.vyvojar.cz/blogs/michaljezek/3slovacontainsAND_thumb_213149E3.png" width="442" height="64" /&gt;&lt;/a&gt; &lt;/em&gt;&lt;/p&gt;

&lt;p&gt;tak, aby vyhledal dvou i tříslovný výraz. 
  &lt;br /&gt;Pokud bude tabulka eshop_product obsahovat dva zaznamy jeden v popisu obsahující všechna tři slova a druhý jen dvě, musíme toto zohlednit ve výsledku hledání, kdy první záznam obsahující všechna tři slova dostane výšší rank. Stejně by jsme měli zohlednit to pokud slova jsou nalezena v jiném tvaru při použítí &lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;FORMSOF(INFLECTIONAL, bikes near mountains )&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;nebo v jiném pořadí. &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Duležité 
    &lt;br /&gt;&lt;/strong&gt;Obdobně by záznam měl dostat vyšší rank pokud se hledaný výraz vyskytuje v názvu produktu v našem případě sloupce &lt;strong&gt;Name&lt;/strong&gt; něž pokud se nalézne shoda v popisu. &lt;/p&gt;

&lt;p&gt;Karsa full-text manager toto řeší pomocí vyhledávacích vzorů, které lze přiřadit ke každému sloupci a &lt;strong&gt;vyhledávacímu vzoru&lt;/strong&gt; lze nastavit váhu, která se započte do výsledného ranku záznamu. Také je možno nastavit váhu celého sloupce. Vyhledávací vzory jsou základním nástrojem, kterým je možné detailně vyladit váhy hledání a docílit tak relevantnějších výsledků hledání. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/FulltextPatern_0F54B616.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="FulltextPatern" border="0" alt="FulltextPatern" src="http://blog.vyvojar.cz/blogs/michaljezek/FulltextPatern_thumb_58E40413.png" width="534" height="437" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Nastavení váhy sloupce a vyhledávacích vzorů&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;iFTS Predikáty a funkce (Predicates and Functions) &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pomocí predikátů T-SQL, které se používají v klauzulích WHERE, HAVING nebo ve spojovacích podmínkách můžeme prohledávat nestrukturovaná textová data. V textových datech můžeme hledat gramatické tvary slov, synonyma, přesnou shodu. Hledání vrací relevantnější výsledky a je rychlejší než použítí LIKE, protože se textová data prohledávají podle významu a ne podle shody s hledaným výrazem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FREETEXT - FREETEXTTABLE &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Predikát FREETEXT automaticky hledá shodu s gramatickými tvary slov, přesné shody a synonyma. Automaticky také do ranku započítává blízkost hledaných slov odsebe.&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;select&lt;/span&gt;  * &lt;span style="color:#0000ff;"&gt;from&lt;/span&gt; eshop_product &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;freetext&lt;/span&gt;([Description], &lt;span style="color:#006080;"&gt;' bike pedals'&lt;/span&gt;)&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Výsledkem jsou tři záznamy&lt;/em&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/gramatickyTvar_3B94334D.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="gramatickyTvar" border="0" alt="gramatickyTvar" src="http://blog.vyvojar.cz/blogs/michaljezek/gramatickyTvar_thumb_66D8CA54.png" width="429" height="78" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FREETEXTTABLE &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Syntaxe a funkcionalita predikátů FREETEXT a FREETEXTTABLE je velmi podobná&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;select&lt;/span&gt; id, f.rank, Name, Description   &lt;span style="color:#0000ff;"&gt;from&lt;/span&gt; eshop_product &lt;span style="color:#0000ff;"&gt;inner&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;join&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;freetextTable&lt;/span&gt;(eshop_product,Description, &lt;span style="color:#006080;"&gt;' bike pedals'&lt;/span&gt; ) f &lt;span style="color:#0000ff;"&gt;on&lt;/span&gt; eshop_product.id = f.KEY&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Zobrazení ranku záznamů 
    &lt;br /&gt;&amp;#160;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/2slovaFREETEXTTABLE_44CB6161.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="2slovaFREETEXTTABLE" border="0" alt="2slovaFREETEXTTABLE" src="http://blog.vyvojar.cz/blogs/michaljezek/2slovaFREETEXTTABLE_thumb_50611EA0.png" width="350" height="79" /&gt;&lt;/a&gt; &lt;/em&gt;&lt;/p&gt;

&lt;p&gt;FREETEXTTABLE přidává možnost definovat arumenty, název tabulky, sloupce, které se mají prohledávat. Vrací také rank, podle kterého lze omezit počet výsledků. &lt;/p&gt;

&lt;p&gt;FREETEXT – FREETEXTTABLE jsou méně precizní způsoby hledání než predikát CONTAINS. Právě pro svoji “automatičnost„ si uživatelé často stěžují na nerelevantní výsledky. Z tohoto důvodu se v karsa full-text manageru predikát FREETEXT nepoužívá.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONTAINS - CONTAINSTABLE &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nabízí rozšířené možnosti oproti predikátu FREETEXT. CONTAINSTABLE se používá jako základní predikát při vytváření vyhledávacích vzorů v Karsa full-text search manageru. &lt;/p&gt;

&lt;p&gt;Můžeme použít hledání pomocí: &lt;/p&gt;

&lt;p&gt;Gramatických tvarů 
  &lt;br /&gt;Fráze 

  &lt;br /&gt;Operátorů AND OR NOT 

  &lt;br /&gt;Blízkosti slov (proximity) 

  &lt;br /&gt;Váhy slov (Weighted terms) 

  &lt;br /&gt;Prefixů&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Gramatických tvarů&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Pokud chceme najít slovo bike i v jiném tavaru použijeme predikát &lt;strong&gt;FORMSOF(INFLECTIONAL, bikes) &lt;/strong&gt;v ukázce doplněno o hledání v &lt;strong&gt;THESAURUS&lt;/strong&gt; souboru&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; * &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt; eshop_product  &lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;contains&lt;/span&gt;([Description], &lt;span style="color:#006080;"&gt;' FORMSOF(INFLECTIONAL, bikes) or  FORMSOF(THESAURUS, bicycle)'&lt;/span&gt; )&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fráze &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hledání přesné fráze&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; * &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt; eshop_product  &lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;CONTAINS&lt;/span&gt; ([Description], &lt;span style="color:#006080;"&gt;'&amp;quot;mountains  bike pedals&amp;quot;'&lt;/span&gt;);&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/3slovacontains_1097381B.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="3slovacontains" border="0" alt="3slovacontains" src="http://blog.vyvojar.cz/blogs/michaljezek/3slovacontains_thumb_17B67493.png" width="435" height="40" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Operátor AND OR NOT &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hledáme slova &lt;strong&gt;bike a pedals&lt;/strong&gt; a nechceme ve výsledku zobrazit silniční kola&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; * &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt; eshop_product  &lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;contains&lt;/span&gt;([Description], &lt;span style="color:#006080;"&gt;'&amp;quot;bike&amp;quot; and &amp;quot;pedals&amp;quot; and not (FORMSOF(INFLECTIONAL, &amp;quot;road&amp;quot;) or &amp;quot;road bicycles&amp;quot;) '&lt;/span&gt; )&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/3slovacontainsAND_70E85E52.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="3slovacontainsAND" border="0" alt="3slovacontainsAND" src="http://blog.vyvojar.cz/blogs/michaljezek/3slovacontainsAND_thumb_1C2CF55A.png" width="442" height="64" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blízkost slov &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NEAR&lt;/strong&gt; zohledňuje vzdálenost slov v hledaném textu od sebe. Bližším slovům přiděluje vyšší rank.&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; * &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt; eshop_product  &lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;contains&lt;/span&gt;([Description], &lt;span style="color:#006080;"&gt;'bike NEAR mountains '&lt;/span&gt;)&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/near_47718C61.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="near" border="0" alt="near" src="http://blog.vyvojar.cz/blogs/michaljezek/near_thumb_20A37621.png" width="432" height="42" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Váha slov &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pomocí &lt;strong&gt;ISABOUT&lt;/strong&gt; lze pridělit slovům výšší váhu. Tato váha se promítne u nalezených záznamů do výsledného ranku. &lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;select&lt;/span&gt; id, f.rank, Name, Description   &lt;span style="color:#0000ff;"&gt;from&lt;/span&gt; eshop_product &lt;span style="color:#0000ff;"&gt;inner&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;join&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;containstable&lt;/span&gt;(eshop_product,Description, &lt;span style="color:#006080;"&gt;'ISABOUT(bike weight(.9), pedals weight(.3) )  '&lt;/span&gt; ) f &lt;span style="color:#0000ff;"&gt;on&lt;/span&gt; eshop_product.id = f.KEY&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/isabout_70EB5D47.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="isabout" border="0" alt="isabout" src="http://blog.vyvojar.cz/blogs/michaljezek/isabout_thumb_1825A67D.png" width="339" height="76" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prefixy &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Použitím zástupného symbolu hvězdička *, který prezentuje nula nebo více znaků 
  &lt;br /&gt;lze docílit obdobného hledání jako při použití &lt;strong&gt;LIKE&lt;/strong&gt;. Zde, ale těžíme z výšší rychlosti full-textového hledání. Toto hledání se často používá při hledání kódů produktů.&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt; * &lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt; eshop_product  &lt;span style="color:#0000ff;"&gt;WHERE&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;CONTAINS&lt;/span&gt; ([Description], &lt;span style="color:#006080;"&gt;'&amp;quot;moun*&amp;quot;'&lt;/span&gt;);&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/hvezdicka_7C811A86.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="hvezdicka" border="0" alt="hvezdicka" src="http://blog.vyvojar.cz/blogs/michaljezek/hvezdicka_thumb_6AA486B9.png" width="430" height="57" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vyhledávací vzory &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vyhledávací vzory umožňují přesné vyladění vah hledání. Předdefinováno je celkem 9 vzorů hledání. Vzory je možné také vytvářet vlastní&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/vyhledavaciVzory_1D8BFD39.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="vyhledavaciVzory" border="0" alt="vyhledavaciVzory" src="http://blog.vyvojar.cz/blogs/michaljezek/vyhledavaciVzory_thumb_3EE91224.png" width="508" height="323" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;U každého vzoru je možné nastavit jeho název, defaultní váhu a samotný obsah vzoru. Vyhledávací vzory je možné aplikovat také na vazební tabulky a tím docílit vyšší relevance hledání. V naši ukázce například prohledávaním tabulky eshop_forum. Obsah vzoru je definován pomocí těla C# metody (vb.net se připravuje), který je možno editovat. Například&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Test(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; text, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] words){&lt;br /&gt;&lt;span style="color:#008000;"&gt;//Tento obsah je možné editovat&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color:#008000;"&gt;//String text  vyhladávaný text&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#008000;"&gt;//string[]    words  - pole s vyhledávaným textem, rozděleným na slova. &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Zjednodušeně platí: words = text.Split(&amp;quot; &amp;quot;) 
  &lt;br /&gt;Tělo metody musí vrátit validní SQL fulltextový vzor vhodný pro zadání vyhladávaných slov. V těle metody lze použít jakýkoliv validní C# výraz. Můžete například odstranit nechtěné znaky, přeházet slova atd. Tato funkce se ukládá na SQL server jako text do pomocné tabulky a dodávaná knihovna dll filtering provider ji načíta. Není tedy využíván .Net kód na straně SQL Serveru.&amp;#160; Pokud se vyhledávání neaplikuje, není odesíláné na SQL server a nesnižuje se tak rychlost&amp;#160;&amp;#160; &lt;/p&gt;

&lt;p&gt;hledání. Ve výsledném SQL dotazů může být použit jakýkoliv validní SQL výraz, například FORMSOF INFLECTIONAL &lt;/p&gt;

&lt;p&gt;Ukázeme si krátký postup jak vytvořit vlastní vzor. Budeme vytvářet nový vzor hledání, který bude zohledňovat váhu pořadí slov v hledaném výrazu, pomocí predikátu &lt;strong&gt;ISABOUT&lt;/strong&gt;. Tento vzor není standardně definován. 

  &lt;br /&gt;Vzor nazveme &lt;strong&gt;IsAboutMoreWords&lt;/strong&gt;. Vzor bude aplikován pokud v hledaném výrazu je použito tři a více slov. Dle pořadí slov v hledaném výrazu přiřadí těmto slovům váhu. &lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;height:254px;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (words.Length &amp;lt; 3)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;}&lt;br /&gt;System.Text.StringBuilder result = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; System.Text.StringBuilder();&lt;br /&gt;result.Append(&lt;span style="color:#006080;"&gt;&amp;quot;'ISABOUT(&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;double&lt;/span&gt; weight = 1.0;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; words.Length; i++)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; weightText = weight.ToString().Replace(&lt;span style="color:#006080;"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;);&lt;br /&gt;    result.AppendFormat(&lt;span style="color:#006080;"&gt;&amp;quot;\&amp;quot;{0}\&amp;quot; weight({1})&amp;quot;&lt;/span&gt;, words&lt;img src="http://blog.vyvojar.cz/emoticons/emotion-55.gif" alt="Idea" /&gt;, weightText);&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (i &amp;lt; words.Length - 1)&lt;br /&gt;    {&lt;br /&gt;        result.Append(&lt;span style="color:#006080;"&gt;&amp;quot;, &amp;quot;&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;    weight -= 0.1;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (weight &amp;lt; 0.1)&lt;br /&gt;    {&lt;br /&gt;        weight = 0.1;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;result.Append(&lt;span style="color:#006080;"&gt;&amp;quot;)'&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; result.ToString();&lt;br /&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;Pokud budeme hledat výraz &lt;strong&gt;„mountains&amp;#160; bike pedals“&lt;/strong&gt; výsledkem je tento string &lt;strong&gt;'ISABOUT(&amp;quot;mountains&amp;quot; weight(1), &amp;quot;bike&amp;quot; weight(0.9), &amp;quot;pedals&amp;quot; weight(0.8))'&lt;/strong&gt; , který se použije v predikatu CONTAINSTABLE. Vzor stačí uložit a můžete jej přiřadit k libovolným sloupcům, kde jej chcete použít.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vyvojar.cz/blogs/michaljezek/fulltextpaternEdit_2663960B.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="fulltextpaternEdit" border="0" alt="fulltextpaternEdit" src="http://blog.vyvojar.cz/blogs/michaljezek/fulltextpaternEdit_thumb_10E3C5FF.png" width="520" height="319" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Editace vyhledávacího vzoru. Editor kontroluje validnost kódu.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Personalizované hledání &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pomocí rersonalizovaného hledání můžeme uživateli nabídnout ješte více relevantnější výsledky. Můžeme měnit váhu sloupců a vyhledávacích vzorů při každém hledání a to pro konkrétního uživatele. 
  &lt;br /&gt;Tím se nám nabízejí šíroké možnosti použítí. Můžeme například logovat pohyb uživatele&amp;#160; po obchodu a dle stráveného času v určitých kategoriích preferovat určité sloupce, vyhledávací vzory nebo modifikovat hledaný výraz.&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;Personalizované hledání může být velice silným nástrojem. &lt;/p&gt;

&lt;p&gt;Ukázka nastavení váhy sloupce &lt;strong&gt;Name&lt;/strong&gt; na 100&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;FilterService service = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;br /&gt;FilterService(&lt;span style="color:#006080;"&gt;@&amp;quot;Server=.\SQLEXPRESS;Database=KarsaFulltextSample;Trusted_Connection=True&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;FilterCriteria filterCriteria = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; FilterCriteria();&lt;br /&gt;filterCriteria.FulltextSearchText = &lt;span style="color:#006080;"&gt;&amp;quot;bike&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;IEnumerable&amp;lt;FulltextColumnsPattern&amp;gt; fulltextPatterns;&lt;br /&gt;fulltextPatterns = service.GetDefaultFulltextColumnsPatterns();&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (FulltextColumnsPattern fulltextPattern &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; fulltextPatterns)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; ((fulltextPattern.NodeName == &lt;span style="color:#006080;"&gt;&amp;quot;eshop_product&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp;&lt;br /&gt;        (fulltextPattern.Columns.Contains(&lt;span style="color:#006080;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;)))&lt;br /&gt;    {&lt;br /&gt;        fulltextPattern.Weight = 100;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;FilterResult result = service.GetItems(1, 10,&lt;br /&gt;                        filterCriteria, fulltextPatterns);&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (ResultItem item &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; result.ItemsOnPage)&lt;br /&gt;{&lt;br /&gt;    Console.WriteLine(item.Identification[&lt;span style="color:#006080;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;]);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;FilterService service = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;br /&gt;FilterService(&lt;span style="color:#006080;"&gt;@&amp;quot;Server=.\SQLEXPRESS;Database=KarsaFulltextSample;Trusted_Connection=True&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;FilterCriteria filterCriteria = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; FilterCriteria();&lt;br /&gt;filterCriteria.FulltextSearchText = &lt;span style="color:#006080;"&gt;&amp;quot;bike&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;IEnumerable&amp;lt;FulltextColumnsPattern&amp;gt; fulltextPatterns;&lt;br /&gt;fulltextPatterns = service.GetDefaultFulltextColumnsPatterns();&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (FulltextColumnsPattern fulltextPattern &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; fulltextPatterns)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; ((fulltextPattern.NodeName == &lt;span style="color:#006080;"&gt;&amp;quot;eshop_product&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp;&lt;br /&gt;        (fulltextPattern.Columns.Contains(&lt;span style="color:#006080;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;)))&lt;br /&gt;    {&lt;br /&gt;        fulltextPattern.Weight = 100;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;FilterResult result = service.GetItems(1, 10,&lt;br /&gt;                        filterCriteria, fulltextPatterns);&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (ResultItem item &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; result.ItemsOnPage)&lt;br /&gt;{&lt;br /&gt;    Console.WriteLine(item.Identification[&lt;span style="color:#006080;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;]);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Přímé volání výsledné uložené procedury &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Možnost volat výslednou uloženou procedůru z karsa fulltext search manageru především ocení vývojáři, kteří nepoužívají C#, vb.net, ale třeba PHP, Java, Python, C++ a chtějí vytvořit relevantnější hledání. &lt;/p&gt;

&lt;p&gt;Ukázka přímého volaní.&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;EXEC karsa_generated_list_selection&lt;br /&gt;    -- limit result to only first 100 items&lt;br /&gt;    @minIndex = 0,  -- items with smaller index are skipped&lt;br /&gt;    @maxIndex = 99, -- items with bigger index are skipped&lt;br /&gt;    &lt;br /&gt;    -- text to search &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;&lt;br /&gt;    @fulltextSearchText = &lt;span style="color:#006080;"&gt;'sony'&lt;/span&gt;,&lt;br /&gt;    -- table with fulltext patterns associated with columns&lt;br /&gt;    @fulltextColumnPatternTable = &lt;span style="color:#006080;"&gt;'#inputFulltextColumnPattern'&lt;/span&gt;,    &lt;br /&gt;    -- minimal required rank&lt;br /&gt;    @fulltextMinRank = 1,        &lt;br /&gt;    -- If not &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; table will contain debug data. If &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;, debug data are not provided.    &lt;br /&gt;    @fulltextDebugTable = &lt;span style="color:#006080;"&gt;'#outputFulltextDebugData'&lt;/span&gt;,&lt;br /&gt;    &lt;br /&gt;    -- Sorters are comma-separated and prefix with &lt;span style="color:#006080;"&gt;&amp;quot;+&amp;quot;&lt;/span&gt; (ascending) or &lt;span style="color:#006080;"&gt;&amp;quot;-&amp;quot;&lt;/span&gt; (descending)&lt;br /&gt;    @sorters = &lt;span style="color:#006080;"&gt;'+Name,-Manufacturer'&lt;/span&gt;,&lt;br /&gt;    -- This table will be filled with result items&lt;br /&gt;    @resultTable = &lt;span style="color:#006080;"&gt;'#outputResult'&lt;/span&gt;,&lt;br /&gt;    -- If not &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; table will contain profile data. If &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;, profile data are not provided.&lt;br /&gt;    @profileTable = &lt;span style="color:#006080;"&gt;'#outputProfileData'&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Závěr&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Karsa fulltext manager je ke stažení v &lt;a href="http://www.karsa.eu/cs/ke-stazeni"&gt;české&lt;/a&gt; i &lt;a href="http://www.karsa.eu/download"&gt;anglické&lt;/a&gt; verzi. 

  &lt;br /&gt;V článku nejsou uvedený další možnosti zvyšování relevance, jako jsou například. &lt;/p&gt;

&lt;p&gt;Vyhledávání v relačních tabulkách 
  &lt;br /&gt;Stoplist&amp;#160;&amp;#160; &lt;br /&gt;Thesaurus file&amp;#160; &lt;br /&gt;Zvýraznění výsledků hledání&amp;#160; / Highlighting 

  &lt;br /&gt;Našeptávač 

  &lt;br /&gt;Historie hledání&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;Logování hledáných výrazů 

  &lt;br /&gt;Cachování hledaných výrazů 

  &lt;br /&gt;Logování konverze | A/B testování 

  &lt;br /&gt;Parametrické hledání &lt;/p&gt;

&lt;p&gt;o těchto možnostech případně přístě.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Přidej do&lt;/strong&gt; &lt;a href = "http://linkuj.cz/?id=linkuj&amp;amp;url=http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx&amp;amp;;title=Full-Text+Search+(MS+SQL+Server)+pro+internetov%26%23233%3b+obchody+a+jin%26%23233%3b+aplikace." target="_blank" title = "Post http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx"&gt;linkuj.cz!&lt;/a&gt; |  &lt;a href = "http://www.jagg.cz/bookmarks.php?action=add&amp;amp;address=http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx&amp;amp;;title=Full-Text+Search+(MS+SQL+Server)+pro+internetov%26%23233%3b+obchody+a+jin%26%23233%3b+aplikace." target="_blank" title = "Post http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx"&gt;jagg.cz!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx&amp;amp;;title=Full-Text+Search+(MS+SQL+Server)+pro+internetov%26%23233%3b+obchody+a+jin%26%23233%3b+aplikace." target="_blank" title = "Post http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx"&gt;del.icio.us!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx&amp;amp;title=Full-Text+Search+(MS+SQL+Server)+pro+internetov%26%23233%3b+obchody+a+jin%26%23233%3b+aplikace." target="_blank" title = "Post http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx&amp;amp;;title=Full-Text+Search+(MS+SQL+Server)+pro+internetov%26%23233%3b+obchody+a+jin%26%23233%3b+aplikace." target="_blank" title = "Post http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx&amp;amp;;title=Full-Text+Search+(MS+SQL+Server)+pro+internetov%26%23233%3b+obchody+a+jin%26%23233%3b+aplikace.&amp;amp;;top=1" target="_blank" title = "Post http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx"&gt;live it!&lt;/a&gt; |  &lt;a href = "mailto:?body=Thought you might like this: http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx&amp;amp;;subject=Full-Text+Search+(MS+SQL+Server)+pro+internetov%26%23233%3b+obchody+a+jin%26%23233%3b+aplikace." target="_blank" title = "Post http://blog.vyvojar.cz/michaljezek/archive/2010/03/25/full-text-search-ms-sql-server-pro-internetov-obchody-a-jin-aplikace.aspx"&gt;email it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blog.vyvojar.cz/aggbug.aspx?PostID=236162" width="1" height="1"&gt;</description><category domain="http://blog.vyvojar.cz/michaljezek/archive/tags/MS+SQL+fulltext+search/default.aspx">MS SQL fulltext search</category></item></channel></rss>