Delen via


Een taal kiezen bij het maken van een volledige-tekstindex

Van toepassing op:SQL ServerAzure SQL Database

Wanneer u een index voor volledige tekst maakt, moet u een taal op kolomniveau opgeven voor de geïndexeerde kolom. De woordonderbreker en stemmers van de opgegeven taal worden gebruikt door query's in volledige tekst in de kolom. Er zijn een aantal dingen die u moet overwegen bij het kiezen van de kolomtaal bij het maken van een volledige-tekstindex. Deze overwegingen hebben betrekking op de wijze waarop uw tekst wordt getokeniseerd en vervolgens geïndexeerd door de Full-Text Engine.

Opmerking

Als u een taal op kolomniveau wilt opgeven voor een kolom met een volledige-tekstindex, gebruikt u de LANGUAGE <language_term> component bij het opgeven van de kolom. Zie CREATE FULLTEXT INDEX en ALTER FULLTEXT INDEX voor meer informatie.

In deze sectie vindt u een inleiding tot woordonderbrekers en stemmers en wordt beschreven hoe Full-Text Search gebruikmaakt van de taalcode-id (LCID) van de taal op kolomniveau.

Inleiding tot woordonderbrekers en stemmers

SQL Server bevat een volledige reeks woordonderbrekers en stemmers. De Microsoft Natural Language Group (NLG) implementeert en ondersteunt deze taalkundige onderdelen.

De woordonderbrekers bieden de volgende voordelen:

  • Robuustheid

    Testen laat zien dat de woordonderbrekers robuust zijn in queryomgevingen met hoge druk.

  • Security

    De woordonderbrekers zijn standaard ingeschakeld in SQL Server. We raden u ten zeerste aan externe onderdelen, zoals woordonderbrekers en filters, te ondertekenen om de algehele beveiliging en robuustheid van SQL Server te verbeteren. U kunt volledige tekst configureren om te controleren of deze onderdelen als volgt zijn ondertekend:

    EXECUTE sp_fulltext_service 'verify_signature';
    
  • Kwaliteit

    Interne tests laten zien dat de woordonderbrekers een betere semantische kwaliteit bieden dan vorige woordonderbrekers. Hierdoor neemt de nauwkeurigheid van de relevante overeenkomsten toe.

  • Dekking voor een uitgebreide lijst met talen, woordonderbrekers zijn standaard opgenomen in SQL Server en standaard ingeschakeld.

Zie sys.fulltext_languages voor een lijst met talen waarvoor SQL Server een woordonderbreker en stemmers bevat.

Hoe Full-Text Zoeken de naam van de taal op kolomniveau gebruikt

Wanneer u een index voor volledige tekst maakt, moet u een geldige taalnaam opgeven voor elke kolom. Als een taalnaam geldig is maar niet wordt geretourneerd door de sys.fulltext_languages catalogusweergave, valt Full-Text Zoeken terug op de dichtstbijzijnde beschikbare taalnaam van dezelfde taalfamilie, indien van toepassing. Anders valt Full-Text Zoeken terug op de neutraal woordonderbreker. Dit terugvalgedrag kan van invloed zijn op de nauwkeurigheid van de relevante overeenkomsten. Daarom raden we u ten zeerste aan een geldige en beschikbare taalnaam voor elke kolom op te geven bij het maken van een index voor volledige tekst.

Opmerking

De LCID wordt gebruikt voor alle gegevenstypen die in aanmerking komen voor indexering in volledige tekst (zoals char of nchar). Als u de sorteervolgorde van een kolom teken, varchar of teksttype hebt ingesteld op een taalinstelling die verschilt van de taal die door de LCID is geïdentificeerd, wordt de LCID toch gebruikt tijdens het indexeren en opvragen van deze kolommen in volledige tekst.

Woorden die fouten veroorzaken

Een woordonderbreker tokeniseert de tekst die wordt geïndexeerd op woordgrenzen, die taalspecifiek zijn. Daarom verschilt het gedrag van woorden die fouten veroorzaken in verschillende talen. Als u één taal gebruikt, xkunt u meerdere talen {x, yen z}indexeren, kan een deel van het gedrag onverwachte resultaten veroorzaken. Een streepje (-) of een komma (,) kan bijvoorbeeld een woordeindeelement zijn dat in de ene taal wordt weggegooid, maar niet in een andere. Er kan ook zelden onverwacht gedrag optreden omdat een bepaald woord anders in een andere taal kan worden gebruikt. In de Engelse taal zijn woordgrenzen bijvoorbeeld meestal witruimte of een vorm van interpunctie. In andere talen, zoals Duits, kunnen woorden of tekens worden gecombineerd. Daarom moet de taal op kolomniveau die u kiest de taal vertegenwoordigen die u verwacht op te slaan in rijen van die kolom.

Westerse talen

Als u niet zeker weet welke talen in een kolom worden opgeslagen, of als u verwacht dat er meer dan één talen worden opgeslagen, is een algemene tijdelijke oplossing om de woordafbreking te gebruiken voor de meest complexe taal die in de kolom kan worden opgeslagen.

U kunt bijvoorbeeld verwachten dat u Engelse, Spaanse en Duitse inhoud in één kolom opslaat. Deze drie Westerse talen hebben vergelijkbare woordbrekende patronen, waarbij de Duitse patronen het meest complex zijn. Daarom is een goede keuze in dit geval het gebruik van de Duitse woordonderbreker, die Engelse en Spaanse tekst correct moet kunnen verwerken. Daarentegen kan de Engelse woordonderbreker duitse tekst niet perfect verwerken vanwege de samengestelde woorden van het Duits.

Het gebruik van de woordonderbreker van de meest complexe taal in een taalfamilie garandeert geen perfecte indexering van elke taal in het gezin. Er kunnen hoekcases bestaan waarin de meest complexe woordafbreking niet goed kan omgaan met tekst die in een andere taal is geschreven.

Niet-westerse talen

Voor niet-westerse talen (zoals Chinees, Japans, Hindi, enzovoort) werkt de vorige tijdelijke oplossing niet noodzakelijkerwijs om taalkundige redenen. Voor niet-westerse talen kunt u een van de volgende tijdelijke oplossingen overwegen:

  • Voor talen uit verschillende families

    Als een kolom bijvoorbeeld aanzienlijk verschillende talen kan bevatten, bijvoorbeeld Spaans en Japans, kunt u overwegen om de inhoud van verschillende talen in afzonderlijke kolommen op te slaan. Met deze scheiding kunt u de taalspecifieke woordafbreking voor elke kolom gebruiken. Als u deze oplossing kiest en u de querytaal op het moment van de query niet kent, moet u de query mogelijk op beide kolommen uitvoeren om ervoor te zorgen dat de query de juiste rij of het juiste document vindt.

  • Voor binaire inhoud (zoals Microsoft Word-documenten)

    Wanneer de geïndexeerde inhoud van het binaire type is, kan het Full-Text Zoekfilter waarmee de tekstuele inhoud wordt verwerkt voordat deze naar de woordonderbreker wordt verzonden, specifieke taaltags in het binaire bestand respecteren. In dit geval verzendt het filter tijdens het indexeren de juiste LCID voor een document of sectie van een document. De Full-Text Engine roept vervolgens de woordonderbreker aan voor de taal met die LCID. Na het indexeren van inhoud in meerdere talen raden we u echter aan te controleren of de inhoud correct is geïndexeerd.

  • Voor tekst zonder opmaak

    Wanneer uw inhoud tekst zonder opmaak is, kunt u deze converteren naar het xml-gegevenstype en taaltags toevoegen die aangeven welke taal overeenkomt met elk specifiek document of documentgedeelte. Dit werkt echter alleen als u de taal moet kennen voordat u indexering in volledige tekst uitvoert.

Stemming

Een andere overweging bij het kiezen van uw taal op kolomniveau is stemming. Stemming in query's in volledige tekst is het zoeken naar alle stemvormen (inflectionele) vormen van een woord in een bepaalde taal. Wanneer u een algemene woordonderbreker gebruikt om verschillende talen te verwerken, werkt het stemmingsproces alleen voor de taal die is opgegeven voor de kolom, niet voor andere talen in de kolom. Duitse stemmers werken bijvoorbeeld niet voor Engels of Spaans (enzovoort). Dit kan van invloed zijn op de relevante overeenkomsten, afhankelijk van de taal die u tijdens de query kiest.

Een andere overweging in de taalkeuze is gerelateerd aan de weergave van de gegevens. Voor gegevens die niet zijn opgeslagen in een varbinary(max) -kolom, worden er geen speciale filters uitgevoerd. In plaats daarvan wordt de tekst over het algemeen doorgegeven via het woord brekende component as-is.

Woordonderbrekers zijn ook voornamelijk ontworpen om geschreven tekst te verwerken. Dus als u een type markering (zoals HTML) op uw tekst hebt, krijgt u mogelijk geen grote taalkundige nauwkeurigheid tijdens het indexeren en zoeken. In dat geval hebt u twee opties: de voorkeursmethode is simpelweg om de tekstgegevens op te slaan in een kolom varbinary(max) en om het documenttype aan te geven, zodat deze kan worden gefilterd. Als dit geen optie is, kunt u overwegen de neutrale woordonderbreker te gebruiken en, indien mogelijk, markeringsgegevens (zoals 'br' in HTML) toe te voegen aan uw ruiswoordlijsten.

Opmerking

Taalgebaseerde stemming komt niet in het spel wanneer u de neutrale taal opgeeft.

Een niet-standaardtaal op kolomniveau opgeven in een volledige-tekstquery

In SQL Server parseert Full-Text Search standaard de querytermen met behulp van de taal die is opgegeven voor elke kolom die is opgenomen in de component voor volledige tekst. Als u dit gedrag wilt overschrijven, geeft u een niet-standaardtaal op tijdens het uitvoeren van query's. Voor ondersteunde talen waarvan de resources zijn geïnstalleerd, kan de LANGUAGE <language_term> component van een CONTAINS-, CONTAINSTABLE-, FREETEXT- of FREETEXTTABLE-query worden gebruikt om de taal op te geven die wordt gebruikt voor woordonderbreking, stemming, synoniemenlijst en stopwoordverwerking van de querytermen.