{"id":1402,"date":"2014-02-10T22:19:09","date_gmt":"2014-02-10T21:19:09","guid":{"rendered":"http:\/\/soci.hu\/blog\/?p=1402"},"modified":"2014-04-10T14:24:20","modified_gmt":"2014-04-10T13:24:20","slug":"sql-server-full-text-index-problema-es-megoldas","status":"publish","type":"post","link":"https:\/\/soci.hu\/blog\/index.php\/2014\/02\/10\/sql-server-full-text-index-problema-es-megoldas\/","title":{"rendered":"SQL Server Full text index probl\u00e9ma \u00e9s megold\u00e1s"},"content":{"rendered":"<p>Az egyik c\u00e9gnek \u00edrtam full text keres\u0151s k\u00f3dot. Az eg\u00e9sz el\u00e9g egyszer\u0171 stuff, full text catalogot kell l\u00e9trehozni, \u00e9s megjel\u00f6lni az indexelend\u0151 oszlopokat. A catalog lehet accent sensitive vagy nem (\u00e9kezet sz\u00e1m\u00edt-e), de mindig case insensitive (kis-nagy bet\u0171 nem sz\u00e1m\u00edt). A t\u00e1bl\u00e1k oszlopain\u00e1l meg kell adni egy word breakert, ez t\u00f6rdeli fel a sz\u00f6veget szavakra, ezt indexeli, ebben keres\u00fcnk.<br \/>\nA keres\u00e9st az sql where felt\u00e9telben <a href=\"http:\/\/technet.microsoft.com\/en-us\/library\/ms187787.aspx\">contains<\/a> \u00e9s t\u00e1rsai kulcsszavakkal lehet el\u00e9rni. \u00c9n a <a href=\"http:\/\/technet.microsoft.com\/en-us\/library\/ms189760.aspx\">containstable<\/a>-t szoktam haszn\u00e1lni, mert \u00edgy hat\u00e9konyan lehet limit\u00e1lni a visszaadott halmazt, r\u00e9szletekbe most nem megyek bele.<br \/>\nSokan nem tudj\u00e1k, de a bin\u00e1ris tartalomban is lehet keresni. Ehhez meg kell adni egy plusz oszlopot, amiben a tartalom file extensionj\u00e9t kell megadni. Ez alapj\u00e1n kikeresi a registryben a megfelel\u0151 IFilter (ez m\u00e9g com) implement\u00e1ci\u00f3t, ami kiszedi neki a szavakat a bin\u00e1ris mosl\u00e9kb\u00f3l. Van pl. pdfhez, htmlhez, office doksikhoz, k\u00e9pekhez (\u00e1ll\u00edt\u00f3lag ocrezik, nekem m\u00e9g nem m\u0171k\u00f6d\u00f6tt), stb. Sz\u00f3val hat\u00e9konyan lehet kerestetni nagy doksikban is.<br \/>\nA probl\u00e9ma eset\u00fcnkben az volt, hogy C#-ra adott vissza eredm\u00e9nyeket, c#-ra nem. Ez ez\u00e9rt fura, mert a case sensitivity-t nem is lehet \u00e1ll\u00edtani, alapban nem az.<br \/>\nM\u00e1r elkezdtem \u00edrni az ms <a href=\"http:\/\/social.msdn.microsoft.com\/Forums\/sqlserver\/en-US\/newthread?category=sqlserver&#038;prof=required\">f\u00f3rumra<\/a>, amikor a prec\u00edz dokument\u00e1l\u00e1s \u00e9rdek\u00e9ben elkezdtem bepaszt\u00e1zni a DDLeket:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nCREATE FULLTEXT CATALOG &#x5B;xxx] WITH ACCENT_SENSITIVITY = OFF;\r\nCREATE FULLTEXT INDEX ON &#x5B;KB].&#x5B;Article](\r\n&#x5B;ArticleText] LANGUAGE &#x5B;English], \r\n&#x5B;ArticleTitle] LANGUAGE &#x5B;English])\r\nKEY INDEX &#x5B;PK_Article] ON (&#x5B;xxx], FILEGROUP &#x5B;PRIMARY])\r\nWITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM);\r\n<\/pre>\n<p>Na, hol a hiba?<br \/>\nRossz volt a word breaker! V\u00e9letlen\u00fcl angolt \u00e1ll\u00edtottam be. Ezzel m\u00e1r egyszer sz\u00edvtam, akkor az \u00e9kezetes keres\u00e9s volt beteg, f\u0151leg a h\u00edres \u0151\u0171 bet\u0171ink miatt.<br \/>\nMi a helyes, ha magyar sz\u00f6veget indexel\u00fcnk? Hungarian sajnos nincs. Szlov\u00e1k van, rom\u00e1n van, ukr\u00e1n van. Magyar nincs. Mi marad nek\u00fcnk? Neutral. Mi ilyen langyi nemzet vagyunk, ilyen semlegesek, a mi karaktereink mellett csak ezzel lehet rendesen kerestetni. Persze, ragoz\u00e1st, sz\u00f3t\u0151keres\u00e9st ne v\u00e1rjunk \u00edgy el, ami a t\u00f6bbi nyelvben rendesen van implement\u00e1lva.<br \/>\nDe \u00f6r\u00fclj\u00fcnk annak, ami van, neutral be\u00e1ll\u00edt\u00e1s mellett m\u00e1r mindk\u00e9t sz\u00ed s\u00e1rpot megtal\u00e1lja.<br \/>\nHogy angol mellett mi\u00e9rt nem? Nem tudom.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Az egyik c\u00e9gnek \u00edrtam full text keres\u0151s k\u00f3dot. Az eg\u00e9sz el\u00e9g egyszer\u0171 stuff, full text catalogot kell l\u00e9trehozni, \u00e9s megjel\u00f6lni az indexelend\u0151&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,4,30],"tags":[],"class_list":["post-1402","post","type-post","status-publish","format-standard","hentry","category-adatbazisok","category-szakmai-elet","category-sql-server"],"_links":{"self":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1402","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=1402"}],"version-history":[{"count":7,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1402\/revisions"}],"predecessor-version":[{"id":1404,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1402\/revisions\/1404"}],"wp:attachment":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=1402"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=1402"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=1402"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}