Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Wanneer je een full-text index maakt, specificeer dan een kolomtaal voor de geïndexeerde kolom. Volledige tekstzoekopdrachten in de kolom gebruiken de woordbreker en stemmers van de gespecificeerde taal. Overweeg hoe de Full-Text Engine je tekst tokeniseert en vervolgens indexeert wanneer je de kolomtaal kiest.
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 voor meer informatie CREATE FULLTEXT INDEX en ALTER FULLTEXT INDEX.
Taalondersteuning in Full-Text Zoeken
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
De SQL Server Database Engine bevat woordbrekers en stemmers voor veel talen, die standaard zijn ingeschakeld. De Microsoft Natural Language Group (NLG) implementeert en ondersteunt deze taalkundige onderdelen. Voor een lijst van ondersteunde talen, zie sys.fulltext_languages.
Externe componenten zoals woordbrekers en filters moeten worden gesigneerd om de beveiliging te verbeteren. Om het ondertekenen te verifiëren, voer je de volgende instructie uit:
EXECUTE sp_fulltext_service 'verify_signature';
Hoe Full-Text Zoeken de naam van de taal op kolomniveau gebruikt
Wanneer je een full-text index maakt, geef dan een geldige taalnaam aan voor elke kolom. Als een taalnaam geldig is maar de catalogusweergave van sys.fulltext_languages deze niet teruggeeft, vervalt Full-Text zoekopdracht terug op de dichtstbijzijnde beschikbare taalnaam van dezelfde taalfamilie, indien aanwezig. Anders valt zoeken in volledige tekst terug op de neutrale woordonderbreker. Om dit fall-back-gedrag te vermijden, specificeer je een geldige en beschikbare taalnaam.
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.
Woordafbreking
Een woordonderbreker tokeniseert de tekst die wordt geïndexeerd op woordgrenzen, die taalspecifiek zijn. Daarom verschilt het afbreekgedrag van woorden tussen verschillende talen. Als u één taal gebruikt, x, om meerdere talen {x, y en z} te indexeren, kan een deel van dit gedrag onverwachte resultaten veroorzaken. Bijvoorbeeld, een streepje (-) of een komma (,) kan een woordbreek-element zijn dat in de ene taal wordt weggegooid, maar niet in een andere. Zelden kan onverwacht stemmingsgedrag optreden omdat een bepaald woord in verschillende talen anders kan stammen. In de Engelse taal zijn woordgrenzen bijvoorbeeld meestal witruimte of een vorm van interpunctie. In andere talen, zoals Duits, kunnen woorden of karakters 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
Voor de westerse talenfamilie geldt dat, als u niet zeker weet welke talen in een kolom worden opgeslagen, of als u verwacht dat er meerdere talen in worden opgeslagen, een algemene tijdelijke oplossing is om de woordscheider te gebruiken voor de meest complexe taal die mogelijk in de kolom wordt 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 het in dit geval een goede keuze om de Duitse woordbreker te gebruiken, die Engelse en Spaanse teksten correct kan 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 uitzonderingsgevallen zijn waarin zelfs de meest complexe woordafbreker tekst die in een andere taal is geschreven niet correct kan verwerken.
Niet-westerse talen
Voor niet-westerse talen (zoals Chinees, Japans, Hindi, enzovoort) werkt de vorige oplossing niet per se, om taalkundige redenen. Voor niet-westerse talen kunt u een van de volgende 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. Deze scheiding stelt je in staat om de taalspecifieke woordbreker voor elke kolom te 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 binair type is, kan het Full-Text Search-filter dat de tekstuele inhoud verwerkt voordat het naar de woordbreker wordt gestuurd, specifieke taaltags binnen het binaire bestand honoreren. 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 woordscheider aan voor de taal die bij die LCID hoort. Controleer na het indexeren van meertalige inhoud echter 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 full-textquery's is het proces waarbij wordt gezocht naar alle vervoegde 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 gedrag kan je herinnering beïnvloeden, afhankelijk van welke taal je kiest tijdens het querymoment.
Effect van kolomtype op Full-Text Zoeken
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 ongewijzigd door het component voor woordsplitsing doorgegeven.
Woordonderbrekers zijn ook voornamelijk ontworpen om geschreven tekst te verwerken. Als je tekst opmaak bevat (zoals HTML), kan de taalkundige nauwkeurigheid tijdens indexering en zoeken verminderd zijn. In dat geval heb je twee opties: de voorkeursmethode is om de tekstgegevens op te slaan in een variabele (max) kolom, en het documenttype aan te geven zodat het gefilterd kan worden. Als die aanpak geen optie is, overweeg dan de neutrale woordbreker te gebruiken en, indien mogelijk, opmaakgegevens (zoals 'br' in HTML) toe te voegen aan je ruiswoordenlijsten.
Opmerking
Taalgebaseerde stemming is niet van toepassing wanneer je de neutrale taal specificeert.
Specificeer een niet-standaard kolomtaal in een full-text query
Standaard parseert Full-Text Search in de Database Engine de zoektermen door de taal te gebruiken die voor elke kolom in de volledige tekst is opgegeven. Als u dit gedrag wilt overschrijven, geeft u een niet-standaardtaal op tijdens het uitvoeren van query's. Voor ondersteunde talen waarvan de bronnen zijn geïnstalleerd, kan de LANGUAGE <language_term>-clausule van een CONTAINS-, CONTAINSTABLE-, FREETEXT- of FREETEXTTABLE-query worden gebruikt om de taal op te geven die wordt gebruikt bij woordsplitsing, stemming, thesaurus- en stopwoordverwerking van de querytermen.