Scegliere l'analizzatore giusto per il proprio caso d'uso
Questa guida si concentra sulle decisioni pratiche per la scelta dell'analizzatore. Per i dettagli tecnici sui componenti dell'analizzatore e su come aggiungere i parametri dell'analizzatore, consultare la sezione Panoramica dell'analizzatore.
Capire gli analizzatori in 2 minuti
In Milvus, un analizzatore elabora il testo memorizzato in questo campo per renderlo ricercabile con funzioni quali la ricerca full text (BM25), la corrispondenza di frasi o la corrispondenza di testo. Si tratta di un elaboratore di testo che trasforma i contenuti grezzi in token ricercabili.
Un analizzatore funziona in una semplice pipeline a due fasi:
Flusso di lavoro dell'analizzatore
Tokenizzazione (necessaria): Questa fase iniziale applica un tokenizer per scomporre una stringa continua di testo in unità discrete e significative, chiamate token. Il metodo di tokenizzazione può variare significativamente a seconda della lingua e del tipo di contenuto.
Filtraggio dei token (opzionale): Dopo la tokenizzazione, vengono applicati dei filtri per modificare, rimuovere o perfezionare i token. Queste operazioni possono includere la conversione di tutti i token in minuscolo, la rimozione di parole comuni senza significato (come le stopword) o la riduzione delle parole alla loro radice (stemming).
Esempio:
Input: "Hello World!"
1. Tokenization → ["Hello", "World", "!"]
2. Lowercase & Punctuation Filtering → ["hello", "world"]
Perché la scelta dell'analizzatore è importante
La scelta dell'analizzatore sbagliato può rendere i documenti rilevanti non ricercabili o restituire risultati irrilevanti.
La tabella seguente riassume i problemi più comuni causati da una scelta impropria dell'analizzatore e fornisce soluzioni praticabili per diagnosticare i problemi di ricerca.
Problema |
Sintomo |
Esempio (input e output) |
Causa (analizzatore errato) |
Soluzione (buon analizzatore) |
|---|---|---|---|---|
Eccessiva tokenizzazione |
Le query di testo per termini tecnici, identificatori o URL non riescono a trovare i documenti pertinenti. |
|
|
Utilizzare un |
Sottokenizzazione |
La ricerca di un componente di una frase di più parole non restituisce i documenti contenenti la frase completa. |
|
Analizzatore con un |
Utilizzare un |
Disadattamento della lingua |
I risultati della ricerca per una lingua specifica sono insensati o inesistenti. |
Testo cinese: |
|
Utilizzare un analizzatore specifico per la lingua, come ad esempio |
Prima domanda: È necessario scegliere un analizzatore?
Per molti casi d'uso, non è necessario fare nulla di speciale. Vediamo se siete tra questi.
Comportamento predefinito: analizzatore standard
Se non si specifica un analizzatore quando si usano funzioni di recupero del testo come la ricerca full text, Milvus usa automaticamente l'analizzatore standard ...l'analizzatore.
L'analizzatore standard:
Divide il testo in base agli spazi e alla punteggiatura
Converte tutti i token in minuscolo
Rimuove una serie di stop word inglesi comuni e la maggior parte della punteggiatura.
Esempio di trasformazione:
Input: "The Milvus vector database is built for scale!"
Output: ['the', 'milvus', 'vector', 'database', 'is', 'built', 'scale']
Criteri decisionali: Un rapido controllo
Utilizzare questa tabella per determinare rapidamente se l'analizzatore predefinito di standard soddisfa le proprie esigenze. Se così non fosse, dovrete scegliere un'altra strada.
Il vostro contenuto |
L'analizzatore standard va bene? |
Perché |
Cosa vi serve |
|---|---|---|---|
Messaggi del blog in inglese |
Sì |
Il comportamento predefinito è sufficiente. |
Utilizzare il comportamento predefinito (non è necessaria alcuna configurazione). |
Documenti in cinese |
❌ No |
Le parole cinesi non hanno spazi e vengono trattate come un unico token. |
Utilizzare un analizzatore |
Documentazione tecnica |
❌ No |
La punteggiatura viene eliminata da termini come |
Creare un analizzatore personalizzato con un |
Lingue separate dallo spazio, come il testo francese/spagnolo |
⚠️ Forse |
I caratteri accentati ( |
Per ottenere risultati migliori, si consiglia di utilizzare un analizzatore personalizzato con l'opzione |
Lingue multilingue o sconosciute |
❌ No |
L'analizzatore |
Utilizzare un analizzatore personalizzato con il In alternativa, si può pensare di configurare analizzatori multilingue o un identificatore di lingua per una gestione più precisa dei contenuti multilingue. |
Se l'analizzatore predefinito di standard non è in grado di soddisfare le proprie esigenze, è necessario implementarne uno diverso. Si hanno due strade:
Percorso A: Utilizzare gli analizzatori integrati
Gli analizzatori integrati sono soluzioni preconfigurate per i linguaggi più comuni. Sono il modo più semplice per iniziare quando l'analizzatore standard predefinito non è perfetto.
Analizzatori integrati disponibili
Analizzatore |
Supporto per la lingua |
Componenti |
Note |
|---|---|---|---|
La maggior parte delle lingue separate da spazi (inglese, francese, tedesco, spagnolo, ecc.) |
|
Analizzatore generico per l'elaborazione iniziale del testo. Per gli scenari monolingui, gli analizzatori specifici per la lingua (come |
|
Dedicato all'inglese, che applica lo stemming e la rimozione delle stop word per una migliore corrispondenza semantica con l'inglese. |
|
Consigliato per contenuti solo in inglese rispetto a |
|
Cinese |
|
Attualmente utilizza il dizionario cinese semplificato per impostazione predefinita. |
Esempio di implementazione
Per usare un analizzatore integrato, è sufficiente specificarne il tipo in analyzer_params quando si definisce lo schema dei campi.
# Using built-in English analyzer
analyzer_params = {
"type": "english"
}
# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
field_name='text',
datatype=DataType.VARCHAR,
max_length=200,
enable_analyzer=True,
analyzer_params=analyzer_params,
)
Per un uso dettagliato, fare riferimento a Ricerca a testo intero, Corrispondenza di testo o Corrispondenza di frase.
Percorso B: Creare un analizzatore personalizzato
Quando le opzioni integrate non soddisfano le vostre esigenze, potete creare un analizzatore personalizzato combinando un tokenizer con una serie di filtri. In questo modo si ha il pieno controllo della pipeline di elaborazione del testo.
Passo 1: Selezionare il tokenizer in base alla lingua
Scegliere il tokenizer in base alla lingua principale del contenuto:
Lingue occidentali
Per le lingue con spazi separati, sono disponibili queste opzioni:
Tokenizzatore |
Come funziona |
Ideale per |
Esempi |
|---|---|---|---|
Suddivide il testo in base agli spazi e ai segni di punteggiatura |
Testo generico, punteggiatura mista |
|
|
Suddivide solo in base ai caratteri di spazio |
Contenuto pre-elaborato, testo formattato dall'utente |
|
Lingue dell'Asia orientale
Le lingue basate su dizionari richiedono tokenizer specializzati per una corretta segmentazione delle parole:
Cinese
Tokenizzatore |
Come funziona |
Ideale per |
Esempi |
|---|---|---|---|
Segmentazione basata sul dizionario cinese con algoritmo intelligente |
Consigliato per i contenuti in cinese - combina il dizionario con algoritmi intelligenti, progettati specificamente per il cinese |
|
|
Analisi morfologica basata su dizionario puro con dizionario cinese(cc-cedict) |
Rispetto a |
|
Giapponese e coreano
Lingua |
Tokenizzatore |
Opzioni del dizionario |
Migliore per |
Esempi |
|---|---|---|---|---|
Giapponese |
ipadico (uso generale), ipadico-neologato (termini moderni), unidico (accademico) |
Analisi morfologica con gestione dei nomi propri |
|
|
Coreano |
Analisi morfologica del coreano |
|
Lingue multilingue o sconosciute
Per contenuti in cui le lingue sono imprevedibili o miste all'interno dei documenti:
Tokenizzatore |
Come funziona |
Ideale per |
Esempi |
|---|---|---|---|
Tokenizzazione consapevole di Unicode (International Components for Unicode) |
Scritture miste, lingue sconosciute o quando la semplice tokenizzazione è sufficiente |
|
Quando usare icu:
Lingue miste in cui l'identificazione della lingua non è praticabile.
Non si vuole l'overhead degli analizzatori multilingue o dell'identificatore di lingua.
Il contenuto ha una lingua principale con parole straniere occasionali che contribuiscono poco al significato complessivo (ad esempio, testo inglese con sporadici nomi di marche o termini tecnici in giapponese o francese).
Approcci alternativi: Per una gestione più precisa dei contenuti multilingue, è possibile utilizzare gli analizzatori multilingue o l'identificatore di lingua. Per ulteriori informazioni, consultare Analizzatori multilingue o Identificatore di lingua.
Fase 2: Aggiungere filtri per la precisione
Dopo aver selezionato il tokenizer, applicare i filtri in base ai requisiti di ricerca specifici e alle caratteristiche dei contenuti.
Filtri comunemente utilizzati
Questi filtri sono essenziali per la maggior parte delle configurazioni di lingue separate dallo spazio (inglese, francese, tedesco, spagnolo, ecc.) e migliorano significativamente la qualità della ricerca:
Filtro |
Come funziona |
Quando usarlo |
Esempi |
|---|---|---|---|
Converte tutti i token in minuscolo |
Universale - si applica a tutte le lingue con distinzione di maiuscole e minuscole |
|
|
Riduce le parole alla loro forma radicale |
Lingue con inflessioni delle parole (inglese, francese, tedesco, ecc.) |
Per l'inglese:
|
|
Rimuove le parole comuni prive di significato |
Per la maggior parte delle lingue - particolarmente efficace per le lingue con separazione spaziale |
|
Per le lingue dell'Asia orientale (cinese, giapponese, coreano, ecc.), concentrarsi invece su filtri specifici per la lingua. Queste lingue utilizzano in genere approcci diversi per l'elaborazione del testo e potrebbero non beneficiare in modo significativo della funzione di stemming.
Filtri di normalizzazione del testo
Questi filtri normalizzano le variazioni del testo per migliorare la coerenza della corrispondenza:
Filtro |
Come funziona |
Quando usarlo |
Esempi |
|---|---|---|---|
Convertire i caratteri accentati in equivalenti ASCII |
Contenuti internazionali, contenuti generati dagli utenti |
|
Filtraggio dei token
Controlla quali token vengono conservati in base al contenuto o alla lunghezza dei caratteri:
Filtro |
Come funziona |
Quando usarlo |
Esempi |
|---|---|---|---|
Rimuovere i token di punteggiatura indipendenti |
Pulisce l'output dei tokenizer |
|
|
Mantenere solo lettere e numeri |
Contenuto tecnico, elaborazione pulita del testo |
|
|
Rimuovere i token al di fuori dell'intervallo di lunghezza specificato |
Filtrare il rumore (token eccessivamente lunghi) |
|
|
Filtraggio personalizzato basato su modelli |
Requisiti dei token specifici del dominio |
|
Filtri specifici per la lingua
Questi filtri gestiscono caratteristiche linguistiche specifiche:
Filtro |
Lingua |
Come funziona |
Esempi |
|---|---|---|---|
Tedesco |
Suddivide le parole composte in componenti ricercabili |
|
|
Cinese |
Mantiene i caratteri cinesi + alfanumerici |
|
|
Cinese |
Conserva solo i caratteri cinesi |
|
Passo 3: Combinare e implementare
Per creare l'analizzatore personalizzato, si definiscono il tokenizer e un elenco di filtri nel dizionario analyzer_params. I filtri vengono applicati nell'ordine in cui sono elencati.
# Example: A custom analyzer for technical content
analyzer_params = {
"tokenizer": "whitespace",
"filter": ["lowercase", "alphanumonly"]
}
# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
field_name='text',
datatype=DataType.VARCHAR,
max_length=200,
enable_analyzer=True,
analyzer_params=analyzer_params,
)
Finale: Testare con run_analyzer
Convalidare sempre la configurazione prima di applicarla a una raccolta:
# Sample text to analyze
sample_text = "The Milvus vector database is built for scale!"
# Run analyzer with the defined configuration
result = client.run_analyzer(sample_text, analyzer_params)
print("Analyzer output:", result)
Problemi comuni da controllare:
Sovratitolazione: I termini tecnici vengono suddivisi in modo errato
Sotto-tipizzazione: Frasi non separate correttamente
Gettoni mancanti: I termini importanti vengono filtrati
Per un utilizzo dettagliato, consultare run_analyzer.
Configurazioni consigliate per caso d'uso
Questa sezione fornisce le configurazioni di tokenizer e filtri consigliate per i casi d'uso più comuni quando si lavora con gli analizzatori in Milvus. Scegliere la combinazione che meglio si adatta al tipo di contenuto e ai requisiti di ricerca.
Prima di applicare un analizzatore alla propria raccolta, si consiglia di usare run_analyzer per testare e convalidare le prestazioni dell'analisi del testo.
Lingue con segni di accento (francese, spagnolo, tedesco, ecc.)
Utilizzare un tokenizer standard con conversione in minuscolo, stemming specifico per la lingua e rimozione delle stopword. Questa configurazione funziona anche per altre lingue europee modificando i parametri language e stop_words.
# French example
analyzer_params = {
"tokenizer": "standard",
"filter": [
"lowercase",
"asciifolding", # Handle accent marks
{
"type": "stemmer",
"language": "french"
},
{
"type": "stop",
"stop_words": ["_french_"]
}
]
}
# For other languages, modify the language parameter:
# "language": "spanish" for Spanish
# "language": "german" for German
# "stop_words": ["_spanish_"] or ["_german_"] accordingly
Contenuto inglese
Per l'elaborazione del testo inglese con un filtro completo. È possibile utilizzare anche l'analizzatore english analizzatore integrato:
analyzer_params = {
"tokenizer": "standard",
"filter": [
"lowercase",
{
"type": "stemmer",
"language": "english"
},
{
"type": "stop",
"stop_words": ["_english_"]
}
]
}
# Equivalent built-in shortcut:
analyzer_params = {
"type": "english"
}
Contenuto cinese
Utilizzare il tokenizer jieba e applicare un filtro per i caratteri per mantenere solo i caratteri cinesi, le lettere latine e le cifre.
analyzer_params = {
"tokenizer": "jieba",
"filter": ["cnalphanumonly"]
}
# Equivalent built-in shortcut:
analyzer_params = {
"type": "chinese"
}
Per il cinese semplificato, cnalphanumonly rimuove tutti i token tranne i caratteri cinesi, il testo alfanumerico e le cifre. In questo modo si evita che la punteggiatura influisca sulla qualità della ricerca.
Contenuto giapponese
Utilizzare il tokenizer lindera con il dizionario giapponese e i filtri per pulire la punteggiatura e controllare la lunghezza dei token:
analyzer_params = {
"tokenizer": {
"type": "lindera",
"dict": "ipadic" # Options: ipadic, ipadic-neologd, unidic
},
"filter": [
"removepunct", # Remove standalone punctuation
{
"type": "length",
"min": 1,
"max": 20
}
]
}
Contenuti coreani
Simile al giapponese, utilizzando il tokenizer lindera con il dizionario coreano:
analyzer_params = {
"tokenizer": {
"type": "lindera",
"dict": "ko-dic"
},
"filter": [
"removepunct",
{
"type": "length",
"min": 1,
"max": 20
}
]
}
Contenuti misti o multilingue
Quando si lavora con contenuti che abbracciano più lingue o che utilizzano script in modo imprevedibile, si può iniziare con l'analizzatore icu. Questo analizzatore, consapevole di Unicode, gestisce efficacemente scritture e simboli misti.
Configurazione multilingue di base (senza stemming):
analyzer_params = {
"tokenizer": "icu",
"filter": ["lowercase", "asciifolding"]
}
Elaborazione multilingue avanzata:
Per un migliore controllo del comportamento dei token in diverse lingue:
Utilizzare una configurazione dell 'analizzatore multilingue. Per maggiori dettagli, consultare Analizzatori multilingue.
Implementare un identificatore di lingua nel contenuto. Per maggiori dettagli, consultare Identificatore di lingua.
Integrazione con le funzioni di recupero del testo
Dopo aver selezionato l'analizzatore, è possibile integrarlo con le funzioni di recupero del testo fornite da Milvus.
Ricerca di testo completo
Gli analizzatori hanno un impatto diretto sulla ricerca full text basata su BM25 attraverso la generazione di vettori sparsi. Utilizzare lo stesso analizzatore sia per l'indicizzazione che per l'interrogazione, per garantire una tokenizzazione coerente. Gli analizzatori specifici per la lingua forniscono generalmente un punteggio BM25 migliore rispetto a quelli generici. Per i dettagli sull'implementazione, consultare la sezione Ricerca di testo completo.
Corrispondenza di testo
Le operazioni di corrispondenza del testo eseguono una corrispondenza esatta dei token tra le query e il contenuto indicizzato in base ai risultati dell'analizzatore. Per i dettagli sull'implementazione, fare riferimento a Corrispondenza di testo.
Corrispondenza di frase
La corrispondenza di frase richiede una tokenizzazione coerente tra le espressioni di più parole per mantenere i confini e il significato della frase. Per i dettagli sull'implementazione, fare riferimento a Corrispondenza di frase.