2013-06-19 9 views
5

Abbiamo un sito che supporta lingue diverse. Abbiamo milioni di dati, quindi nella ricerca vorremmo implementare la ricerca full-text di SQL Server .Come implementare la ricerca full-text in contenuto multilingue in SQL Server

La struttura della tabella che abbiamo attualmente come di seguito.

CREATE TABLE Product 
(
    ID INT IDENTITY(1,1), 
    Code VARCHAR(50), 
    ........ 
    ........ 
) 

CREATE TABLE ProductLanguage 
(
    ID INT, 
    LanguageID INT, 
    Name NVARCHAR(200), 
    ........ 
    ........ 
) 

Vorremmo implementare la ricerca full-text nella colonna "Nome" per questo abbiamo creato indice full-text sulla colonna Nome. Ma durante la creazione dell'indice full-text possiamo selezionare solo una lingua per colonna. Se selezioniamo "Inglese" o "Neutro" non restituisce i dati previsti in altre lingue come giapponese, cinese, francese ecc.

Quindi qual è il modo migliore per implementare la ricerca full-text in SQL Server per contenuti multilingue.

Abbiamo bisogno di creare una tabella diversa. Se sì, allora quale sarà la struttura della tabella (Dobbiamo tenere presente che le lingue non sono fisse, una lingua diversa può essere aggiunta in seguito) e quale sarà la query di ricerca?

Stiamo utilizzando SQL Server 2008 R2.

+0

Anche se questo potrebbe non essere il momento per un cambiamento, per il futuro si dovrebbe considerare l'utilizzo di un vero e proprio motore di ricerca come Lucene, elasticsearch, Xapian. Secondo la mia esperienza, le ricerche a testo integrale su database portano a requisiti sempre più precisi da parte dei clienti per i quali non vengono creati database. – 0xCAFEBABE

+0

vedere http://stackoverflow.com/questions/3492405/how-do-i-do-a-full-text-search-in-sql-server-2008-where-the-data-contains-multip –

risposta

2

Alcuni tipi di contenuto (documento) supportano le impostazioni della lingua - ad es. Documenti di Microsoft Office, PDF, [X] HTML o XML.

Se si modifica il tipo di colonna Nome in XML, è possibile determinare la lingua di ciascun valore (vale a dire per riga). Per esempio:

Invece di memorizzare valori come stringhe

name 1 
name 2 
name 3 

... li è possibile memorizzare i documenti XML con le dichiarazioni di lingua appropriati:

<content xml:lang="en-US">name 1</content> 
<content xml:lang="fr-FR">name 2</content> 
<content xml:lang="en-UK">name 3</content> 

Durante testo integrale della popolazione indice Verranno utilizzati word breaker/stemmer corretti, in base alle impostazioni della lingua di ciascun valore (documento XML): inglese USA per nome 1, francese o nome 2 e inglese britannico per nome 3.

Ovviamente, ciò richiederebbe un cambiamento significativo nel modo in cui i dati vengono gestiti e consumati.

ML

+0

Matija Lah - Sovrascrive le impostazioni della lingua esistenti (che ho scelto durante la creazione dell'indice Ful-Text su una colonna)? –

0

Sarei preoccupato per il rendimento di usare XML invece di NVARCHAR (n) - anche se non ho nessuna prova duro per questo. Un'alternativa potrebbe essere l'utilizzo di SQL dinamico (generare al volo il codice specifico della lingua), combinato con viste indicizzate specifiche della lingua nella tabella Prodotto. L'inconveniente di ciò è la mancanza del caching del piano di esecuzione, vale a dire di nuovo: le prestazioni.

0

Stessa idea della risposta di Matija Lah, ma questa è la soluzione suggerita delineata nel whitepaper MS.

  • Quando il contenuto indicizzato è di tipo binario (ad esempio un documento di Microsoft Word), l'iFilter responsabile per l'elaborazione del contenuto del testo prima di inviarlo al word breaker potrebbe onorare specifici lingua tag nella file binario.Quando questo è il caso, al momento dell'indicizzazione l'iFilter richiama il word breaker corretto per un documento specifico o la sezione di un documento specificato in una particolare lingua. Tutto ciò di cui hai bisogno è da eseguire in questo caso per verificare dopo l'indicizzazione che il contenuto in più lingue è stato indicizzato correttamente. Filtri per Word, HTML e XML documenti onorano lingua attributi di specifica nel contenuto del documento:
    1. Word - impostazioni della lingua
    2. HTML - <meta name=“MS.locale”…>
    3. XML - xml:lang attributo
  • Quando il contenuto è testo normale, è possibile convertire nel tipo di dati XML e aggiungere tag di lingua specifici a indicare la lingua corrispondente a quel documento specifico o sezione del documento. Si noti che per far funzionare tutto questo, prima di indicizzare l'utente, è necessario conoscere la lingua che verrà utilizzata.

https://technet.microsoft.com/en-us/library/cc721269%28v=sql.100%29.aspx

Problemi correlati