Dela via


Välj ett språk när du skapar ett fulltextindex

gäller för:SQL ServerAzure SQL Database

När du skapar ett fulltextindex måste du ange ett språk på kolumnnivå för den indexerade kolumnen. Ordbrytaren och stemmers för det angivna språket används av fulltextfrågor i kolumnen. Det finns ett par saker att tänka på när du väljer kolumnspråket när du skapar ett fulltextindex. Dessa överväganden gäller hur texten tokeniseras och sedan indexeras av Full-Text Engine.

Anmärkning

Om du vill ange ett språk på kolumnnivå för en kolumn med fulltextindex använder du LANGUAGE <language_term> -satsen när du anger kolumnen. Mer information finns i SKAPA FULLTEXTINDEX och ALTER FULLTEXT INDEX.

Det här avsnittet innehåller en introduktion till ordbrytare och stemmers och beskriver hur Full-Text Search använder språkkodidentifieraren (LCID) för kolumnnivåspråket.

Introduktion till ordbrytare och stemmers

SQL Server innehåller en fullständig familj med ordbrytare och stemmers. Microsoft Natural Language Group (NLG) implementerar och stöder dessa språkkomponenter.

Ordbrytarna ger följande fördelar:

  • Robusthet

    Testning visar att ordbrytarna är robusta i högtrycksfrågemiljöer.

  • Security

    Ordbrytarna är aktiverade som standard i SQL Server. Vi rekommenderar starkt att externa komponenter som ordbrytare och filter signeras för att förbättra den övergripande säkerheten och robustheten för SQL Server. Du kan konfigurera fulltext för att kontrollera att dessa komponenter är signerade på följande sätt:

    EXECUTE sp_fulltext_service 'verify_signature';
    
  • Kvalitet

    Intern testning visar att ordbrytarna ger bättre semantisk kvalitet än tidigare ordbrytare. Detta ökar träffsäkerheten.

  • Täckning för en omfattande lista över språk, ordbrytare ingår i SQL Server direkt och aktiveras som standard.

En lista över de språk som SQL Server innehåller ordbrytare och stemmers för finns i sys.fulltext_languages.

Så här använder Full-Text Search namnet på språket på kolumnnivå

När du skapar ett fulltextindex måste du ange ett giltigt språknamn för varje kolumn. Om ett språknamn är giltigt men inte returneras av sys.fulltext_languages katalogvyn återgår Full-Text Search till det närmaste tillgängliga språknamnet för samma språkfamilj, om det finns något. Annars faller Full-Text Search tillbaka till den neutrala ordbrytaren. Det här återställningsbeteendet kan påverka träffsäkerheten. Därför rekommenderar vi starkt att du anger ett giltigt och tillgängligt språknamn för varje kolumn när du skapar ett fulltextindex.

Anmärkning

LCID används mot alla datatyper som är berättigade till fulltextindexering (till exempel tecken eller nchar). Om du har sorteringsordningen för en kolumn av typen char, varchar eller texttyp inställd på en annan språkinställning än det språk som identifieras av LCID, används LCID ändå under fulltextindexering och frågekörning av dessa kolumner.

Ordbrytning

En ordbrytare tokeniserar texten som indexeras på ordgränser, som är språkspecifika. Därför skiljer sig ordbrytande beteende mellan olika språk. Om du använder ett språk, , xför att indexering av flera språk {x, y, och z}, kan en del av beteendet orsaka oväntade resultat. Ett bindestreck (-) eller ett kommatecken (,) kan till exempel vara ett ordbrytningselement som kastas bort på ett språk men inte på ett annat. Också sällan oväntat härstamningsbeteende kan inträffa eftersom ett visst ord kan härstama annorlunda på olika språk. På engelska är ordgränser till exempel vanligtvis blanksteg eller någon form av skiljetecken. På andra språk, till exempel tyska, kan ord eller tecken kombineras. Därför bör det språk på kolumnnivå som du väljer representera det språk som du förväntar dig att lagra i rader i den kolumnen.

Västerländska språk

Om du är osäker på vilka språk som ska lagras i en kolumn för den västerländska språkfamiljen eller om du förväntar dig att fler än ett ska lagras, är en allmän lösning att använda ordbrytaren för det mest komplexa språket som kan lagras i kolumnen.

Du kan till exempel förvänta dig att lagra engelskt, spanskt och tyskt innehåll i en enda kolumn. Dessa tre västerländska språk har liknande ordbrytande mönster, där de tyska mönstren är de mest komplexa. Därför skulle ett bra val vara att använda den tyska ordbrytaren, som borde kunna bearbeta engelsk och spansk text korrekt. Däremot kanske den engelska ordbrytaren inte bearbetar tysk text perfekt på grund av tyskans sammansatta ord.

Att använda ordbrytaren för det mest komplexa språket i en språkfamilj garanterar inte perfekt indexering av alla språk i familjen. Hörnfall kan finnas där den mest komplexa ordbrytaren inte kan hantera text som skrivits på ett annat språk korrekt.

Språk som inte är västerländska

För icke-västerländska språk (till exempel kinesiska, japanska, hindi och så vidare) fungerar den tidigare lösningen inte nödvändigtvis, av språkliga skäl. För icke-västerländska språk bör du överväga någon av följande lösningar:

  • För språk från olika familjer

    Om en kolumn kan innehålla dramatiskt olika språk, till exempel spanska och japanska, bör du överväga att lagra innehållet i olika språk i separata kolumner. Med den här separationen kan du använda den språkspecifika ordbrytaren för varje kolumn. Om du väljer den här lösningen och inte känner till frågespråket vid frågetillfället kan du behöva utfärda frågan mot båda kolumnerna för att säkerställa att frågan hittar rätt rad eller dokument.

  • För binärt innehåll (till exempel Microsoft Word-dokument)

    När det indexerade innehållet är av binär typ kan filtret Full-Text Search som bearbetar textinnehållet innan det skickas till ordbrytaren respektera specifika språktaggar som finns i den binära filen. I det här fallet genererar filtret vid indexeringstillfället rätt LCID för ett dokument eller ett avsnitt i ett dokument. Full-Text Engine anropar sedan ordbrytaren för språket med det LCID. Men när du har indexerat innehåll på flera språk rekommenderar vi att du kontrollerar att innehållet har indexerats korrekt.

  • För oformaterad text

    När innehållet är oformaterad text kan du konvertera det till xml-datatypen och lägga till språktaggar som anger det språk som motsvarar varje specifikt dokument- eller dokumentavsnitt. För att detta ska fungera måste du dock känna till språket före fulltextindexering.

Härstamning

Ett annat övervägande när du väljer ditt språk på kolumnnivå är att härleda. Härstamning i fulltextfrågor är processen att söka efter alla stemmed (böjliga) former av ett ord på ett visst språk. När du använder en allmän ordbrytare för att bearbeta flera språk fungerar härstamningsprocessen endast för det språk som anges för kolumnen, inte för andra språk i kolumnen. Till exempel fungerar tyska stemmers inte för engelska eller spanska (och så vidare). Detta kan påverka din återkallelse beroende på vilket språk du väljer vid frågetillfället.

Ett annat övervägande i språkvalet är relaterat till hur data representeras. För data som inte lagras i en kolumn med varbinary(max) utförs ingen särskild filtrering. I stället skickas texten i allmänhet genom ordbrytningskomponenten as-is.

Dessutom är ordbrytare främst utformade för att bearbeta skriven text. Om du har någon typ av markering (till exempel HTML) i texten kanske du inte får bra språkprecision under indexering och sökning. I så fall har du två alternativ – den föredragna metoden är bara att lagra textdata i en kolumn med varbinary(max) och ange dess dokumenttyp så att den kan filtreras. Om detta inte är ett alternativ kan du överväga att använda den neutrala ordbrytaren och, om möjligt, lägga till markeringsdata (till exempel "br" i HTML) i dina brusordlistor.

Anmärkning

Språkbaserad härstamning spelar inte in när du anger det neutrala språket.

Ange ett språk på kolumnnivå som inte är standard i en fulltextfråga

I SQL Server tolkar Full-Text Search som standard frågetermerna med det språk som anges för varje kolumn som ingår i fulltextsatsen. Om du vill åsidosätta det här beteendet anger du ett nondefault-språk vid frågetillfället. För språk som stöds vars resurser är installerade LANGUAGE <language_term> kan satsen i en CONTAINS-, CONTAINSTABLE-, FREETEXT- eller FREETEXTTABLE-fråga användas för att ange det språk som används för ordbrytning, härstamning, synonymordsbearbetning och stopword-bearbetning av frågetermerna.