# Búsqueda de texto completo

NOTA

Esta guía solo es aplicable a la versión de la base de datos 1.5.0 o superior.

Las capacidades tradicionales de búsqueda textual en bases de datos con operadores como LIKE e ILIKE han sido fundamentales durante años. Sin embargo, no logran satisfacer las necesidades de los sistemas modernos de recuperación de información debido a varias limitaciones:

  • Falta de soporte lingüístico: Los métodos tradicionales tienen dificultades con los matices del lenguaje, sin reconocer las derivaciones de palabras (por ejemplo, "satisfies" vs. "satisfy"), lo que puede llevar a resultados de búsqueda incompletos o inexactos. Aunque es posible buscar manualmente variaciones utilizando OR, este enfoque es engorroso y propenso a errores.
  • Ausencia de clasificación de resultados: Sin la capacidad de clasificar los resultados de búsqueda, buscar entre miles de coincidencias se vuelve ineficiente.
  • Problemas de rendimiento: La falta de soporte de índices significa que cada documento debe procesarse para cada búsqueda, lo que lleva a un rendimiento lento.

Para superar estos desafíos, MyScale introduce un nuevo tipo de índice llamado FTS Index (Full-Text Search Index), impulsado por la biblioteca Tantivy (opens new window), una biblioteca de motor de búsqueda de texto completo de código abierto y alto rendimiento. El FTS Index admite el algoritmo de indexación BM25, lo que permite obtener resultados de búsqueda eficientes y relevantes. Esta integración mejora la funcionalidad de búsqueda de texto completo de MyScale y mejora el rendimiento general.

# Resumen del tutorial

Este tutorial le guiará a través de la realización de tres tipos de experimentos de búsqueda con índices FTS:

Ilustración del índice FTS en MyScale

Antes de comenzar, asegúrese de tener configurado un clúster de MyScale. Para obtener instrucciones de configuración, consulte nuestra Guía de inicio rápido (opens new window).

# Descripción general del conjunto de datos

Utilizaremos el conjunto de datos Wikipedia abstract (opens new window), que contiene más de 5,6 millones de registros, disponibles en formato Parquet. Este conjunto de datos se importará directamente en MyScale desde S3, eliminando la necesidad de descargas locales.

La siguiente tabla describe brevemente el contenido de este conjunto de datos.

id body title url
... ... ... ...
77 Jake Rodkin is an American .... and Puzzle Agent. Jake Rodkin https://en.wikipedia.org/wiki/Jake_Rodkin (opens new window)
78 Friedlandpreis der Heimkehrer is ... of Germany. Friedlandpreis der Heimkehrer https://en.wikipedia.org/wiki/Friedlandpreis_der_Heimkehrer (opens new window)
... ... ... ...

# Creación y población de la tabla

Cree la tabla en_wiki_abstract en MyScale utilizando el siguiente comando SQL:

CREATE TABLE default.en_wiki_abstract(
    `id` UInt64,
    `body` String,
    `title` String,
    `url` String,
)
ENGINE = MergeTree
ORDER BY id;

Luego, importe el conjunto de datos desde S3. Espere pacientemente a que se complete la importación de datos.

INSERT INTO default.en_wiki_abstract SELECT * FROM s3('https://myscale-datasets.s3.ap-southeast-1.amazonaws.com/wiki_abstract_5m.parquet','Parquet');

Verifique que la tabla contenga 5,648,453 filas de datos.

SELECT count(*) FROM default.en_wiki_abstract;

Resultado:

count()
5648453

Para mejorar el rendimiento de búsqueda, podemos optimizar la tabla consolidándola en una sola parte de datos. Este paso es opcional.

OPTIMIZE TABLE default.en_wiki_abstract FINAL;

Ejecute la siguiente instrucción SQL para verificar si los datos de esta tabla se han comprimido en una sola parte.

SELECT COUNT(*) FROM system.parts
WHERE table = 'en_wiki_abstract' AND active = 1;

Si los datos se comprimen en 1, esta instrucción SQL devolverá el siguiente conjunto de resultados:

count()
1

# Comprensión de los parámetros del índice FTS

MyScale supporta vari tokenizzatori, ciascuno adatto a scenari diversi. Quando si crea un indice FTS, è possibile personalizzarlo con una configurazione JSON per il tokenizzatore.

TIP

Si prega di fornire una stringa JSON valida nel parametro dell'indice FTS.

-- Esempio 1: Creare un indice su una singola colonna di testo utilizzando il tokenizzatore predefinito senza specificare parametri aggiuntivi.
ALTER TABLE [table_name] ADD INDEX [index_name] [column_name]
TYPE fts;
-- Esempio 2: Creare un indice su una singola colonna di testo con il tokenizzatore predefinito definito esplicitamente.
ALTER TABLE [table_name] ADD INDEX [index_name] [column_name]
TYPE fts('{"<column_name>":{"tokenizer":{"type":"default"}}}');
-- Esempio 3: Creare un indice su una singola colonna di testo utilizzando il tokenizzatore ICU.
ALTER TABLE [table_name] ADD INDEX [index_name] [column_name]
TYPE fts('{"<column_name>":{"tokenizer":{"type":"icu"}}}');
-- Esempio 4: Creare un indice utilizzando il tokenizzatore stem e applicando le parole di stop per il filtraggio.
ALTER TABLE [table_name] ADD INDEX [index_name] [column_name]
TYPE fts('{"<column_name>":{"tokenizer":{"type":"stem", "stop_word_filters":["english"]}}}');
-- Esempio 5: Creare un indice su più colonne di testo; ciascuna colonna utilizzerà il tokenizzatore predefinito.
ALTER TABLE [table_name] ADD INDEX [index_name] ([column_name_0], [column_name_1], ...)
TYPE fts;
-- Esempio 6: Specificare tipi diversi di tokenizzatori per ciascuna colonna di testo nell'indice.
ALTER TABLE [table_name] ADD INDEX [index_name] ([column_name_0], [column_name_1], ...)
TYPE fts('{"<column_name_0>":{"tokenizer":{"type":"icu"}}, "<column_name_1>":{"tokenizer":{"type":"whitespace"}}}');

La siguiente tabla enumera los tipos de tokenizadores admitidos por el índice FTS.

Tipo de tokenizador Descripción
default Tokenizador predeterminado, divide el texto en caracteres no alfabéticos, sin distinción entre mayúsculas y minúsculas
raw Tokenizador sin procesar, no realiza tokenización en el texto, trata todo el texto como un solo token
simple Tokenizador simple, divide el texto en caracteres no alfabéticos
stem Tokenizador de derivación, compatible con varios idiomas, convierte las palabras a su forma base, puede ignorar los tiempos verbales de las palabras
whitespace Tokenizador de espacios en blanco, divide el texto en caracteres de espacio en blanco (espacios, tabulaciones, saltos de línea, etc.)
ngram Tokenizador de N-gramas, divide el texto en función de la longitud de N-grama especificada
chinese Tokenizador chino, realiza la tokenización en texto chino, utiliza internamente la biblioteca de tokenización jieba
icu Il tokenizer ICU eccelle nella gestione del testo multilingue. Se hai difficoltà a tokenizzare testi in più lingue, il tokenizer ICU è la tua soluzione definitiva.

# Parámetros comunes del tokenizador

Los tokenizadores default y raw solo admiten el parámetro store_doc, mientras que los demás tokenizadores admiten los siguientes parámetros comunes además de los mencionados anteriormente.

Nombre del parámetro Tipo Valor predeterminado Descripción
store_doc booleano false Si se debe almacenar el documento original, actualmente no se recomienda habilitarlo
length_limit número 40 Longitud máxima de los tokens tokenizados
case_sensitive booleano false Si la tokenización distingue entre mayúsculas y minúsculas

La mayoría de los tokenizadores admiten parámetros adicionales además de los comunes mencionados anteriormente.

# Tokenizadores simple, stem, whitespace, icu

Nombre del parámetro Tipo Valor predeterminado Descripción
stop_word_filters string[] [] Filtros de palabras de detención, especifica qué idiomas descartar palabras de detención durante la tokenización, todos los idiomas válidos incluyen ["danish", "dutch", "english", "finnish", "french", "german", "hungarian", "italian", "norwegian", "portuguese", "russian", "spanish", "swedish"]

# Tokenizador stem, icu

Nombre del parámetro Tipo Valor predeterminado Descripción
stem_languages string[] [] Idiomas utilizados para la derivación, para el inglés, puede ignorar los tiempos verbales durante la tokenización, los idiomas admitidos para el tokenizador de derivación son ["arabic", "danish", "dutch", "english", "finnish", "french", "german", "greek", "hungarian", "italian", "norwegian", "portuguese", "romanian", "russian", "spanish", "swedish", "tamil", "turkish"]

# Tokenizador ngram

Nombre del parámetro Tipo Valor predeterminado Descripción
min_gram número 2 Número mínimo de gramas
max_gram número 3 Número máximo de gramas
prefix_only booleano false Si solo se deben extraer n-gramas del prefijo de las palabras

# Tokenizador chinese

Para el tokenizador chino, se utiliza cang-jie (opens new window) como implementación subyacente.

Nombre del parámetro Tipo Valor predeterminado Descripción
jieba string "default" "default" significa usar el diccionario jieba, "empty" significa no usar el diccionario jieba incorporado para la tokenización. Los valores válidos son "default" o "empty"
mode string "search" Modo de tokenización chino, los valores válidos son "all", "default", "search" o "unicode", las diferencias entre cada modo se pueden consultar en cang-jie/options.rs (opens new window)
hmm booleano false Si habilitar HMM

# icu Tokenizzatore

Nome del parametro Tipo Valore predefinito Descrizione
mode stringa "word" I valori validi sono "word", "sentence", "line", "grapheme", "word". La modalità "word" funziona meglio nei contesti multilingue.

Per ulteriori informazioni sulle funzionalità del tokenizzatore ICU, fare riferimento a icu_segmenter (opens new window)

Lo anterior proporciona una descripción detallada de los parámetros para los tokenizadores de índice FTS de MyScale. Al crear un índice FTS, puede seleccionar el tipo de tokenizador que mejor se adapte a sus necesidades y configurar sus parámetros para mejorar el rendimiento y los resultados de búsqueda.

# Creación de un índice FTS

Personalizza il tuo indice FTS (Full-Text Search) con il tokenizzatore appropriato per ottimizzare le prestazioni di ricerca. Ad esempio, l'utilizzo del tokenizzatore stem con parole di stop in inglese può migliorare la precisione della ricerca concentrandosi sulle forme radice delle parole.

Gli indici a colonna singola e multi-colonna svolgono un ruolo cruciale nelle capacità di ricerca di testo. Gli indici a colonna singola facilitano ricerche efficienti all'interno di un campo specifico, mentre gli indici multi-colonna consentono ricerche complete su più campi, migliorando le prestazioni di ricerca complessive. Per eseguire ricerche di testo su un indice a colonna singola, è possibile utilizzare la funzione TextSearch. Per gli indici multi-colonna, la funzione full_text_search consente ricerche efficaci su tutte le colonne indicizzate.

# Creazione di un indice di testo a colonna singola

Per creare un indice di testo a colonna singola, utilizzare la seguente istruzione SQL:

ALTER TABLE default.en_wiki_abstract
ADD INDEX body_idx body
TYPE fts('{"body":{"tokenizer":{"type":"stem", "stop_word_filters":["english"]}}}');

In questo esempio, creiamo un indice FTS sulla colonna body. Si noti che gli indici FTS (simili agli indici skip in ClickHouse) vengono applicati solo ai dati appena inseriti. Pertanto, l'aggiunta dell'indice non influirà sui dati esistenti. Per indicizzare i record già esistenti, eseguire la seguente istruzione:

ALTER TABLE default.en_wiki_abstract MATERIALIZE INDEX body_idx;

# Creazione di un indice di testo multi-colonna

È inoltre possibile creare un indice su più colonne di testo per migliorare le capacità di ricerca su vari campi. Ad esempio:

ALTER TABLE default.en_wiki_abstract
ADD INDEX multi_col_idx (body, title)
TYPE fts('{"body":{"tokenizer":{"type":"stem", "stop_word_filters":["english"]}}, "title":{"tokenizer":{"type":"default"}}}');

In questo caso, definiamo un indice FTS sia sulle colonne body che title, utilizzando diversi tokenizzatori per ciascuna colonna. Naturalmente, sarà necessario eseguire anche l'istruzione MATERIALIZE, proprio come nella creazione di un indice a colonna singola:

ALTER TABLE default.en_wiki_abstract MATERIALIZE INDEX multi_col_idx;

# Búsqueda con clasificación de documentos BM25

Nota

La primera ejecución de TextSearch() puede ser más lenta porque necesita cargar el índice FTS.

El siguiente ejemplo muestra cómo utilizar la función TextSearch(). El ejemplo devuelve los 10 documentos más relevantes para "instituto sin fines de lucro en Washington". La métrica para medir la relevancia es la puntuación BM25 devuelta por la función TextSearch(); cuanto mayor sea la puntuación, más relevante será.

SELECT
    id,
    title,
    body,
    TextSearch(body, 'instituto sin fines de lucro en Washington') AS score
FROM default.en_wiki_abstract
ORDER BY score DESC
LIMIT 5;

A partir de los resultados, podemos ver que el texto en cada fila de la columna body está relacionado con la frase de búsqueda "instituto sin fines de lucro en Washington".

id title body score
3400768 Drug Strategies Drug Strategies is a non-profit research institute located in Washington D.C. 24.457561
872513 Earth Policy Institute Earth Policy Institute was an independent non-profit environmental organization based in Washington, D.C. 22.730673
895248 Arab American Institute Founded in 1985, the Arab American Institute is a non-profit membership organization based in Washington D.C. 21.955559
1950599 Environmental Law Institute The Environmental Law Institute (ELI) is a non-profit, non-partisan organization, headquartered in Washington, D.C. 21.231567
2351478 Public Knowledge Public Knowledge is a non-profit Washington, D.C. 20.742344

A partire dalla versione v1.8 del database o successiva, la funzione TextSearch() può cercare su una colonna di testo utilizzando un indice FTS multi-colonna. L'uso è lo stesso di quanto sopra per un indice FTS a colonna singola.

# Aprovechando las consultas de lenguaje natural

MyScale utiliza la biblioteca Tantivy para la indexación de búsqueda de texto completo (FTS), lo que permite admitir consultas de lenguaje natural complejas. Para obtener más información, consulte la documentación de Tantivy (opens new window).

Aquí hay un ejemplo de una consulta de combinación de múltiples condiciones utilizando AND y OR. Queremos buscar temas antropológicos relacionados con Nueva York, África o París. La consulta SQL sería:

SELECT
    id,
    title,
    body,
    TextSearch(body, 'Antropológico AND ("Nueva York" OR Africano OR París)") AS score
FROM default.en_wiki_abstract
ORDER BY score DESC
LIMIT 5;

Los resultados de búsqueda muestran que cada línea de texto contiene la palabra "Antropológico" (sin distinción entre mayúsculas y minúsculas), satisfaciendo la condición del lado izquierdo de la declaración AND. Al mismo tiempo, cada resultado contiene al menos uno de los términos "Nueva York", "Africano" o "París", cumpliendo la condición de coincidencia del lado derecho de la declaración AND.

id title body score
2826913 African Anthropologist African Anthropologist is the journal of the Pan African Anthropological Association (PAAA). 20.131313
3905943 Tunnel People Tunnel People is an anthropological-journalistic account describing an underground homeless community in New York City. It is written by war photographer and anthropologist Teun Voeten and was published by PM Press in 2010. 13.759308
3790627 Les Accords de Bella Les Accords de Bella is a 2007 anthropological documentary film directed by David Constantin. It was selected by the African Film Festival of Cordoba - FCAT. 12.769518
4488199 Naparay Naparay, in African anthropological study, is a non-linear conception of human life held by some West African peoples such as the Yoruba. Similar to reincarnation, naparay holds that lives are cyclic and attributes of previous lives may carry over to a new life. 11.682068
1725559 Gradhiva Gradhiva is an anthropological and museological journal, founded in 1986 by the poet and social scientist Michel Leiris and by the anthropologist Jean Jamin. It is since 2005 published by the Musée du Quai Branly in Paris. 11.135916

# Explicación de los parámetros de TextSearch

NOTA

Los parámetros solo están disponibles en la versión de la base de datos v1.6.3 o superior.

A continuación se muestra una descripción detallada de los parámetros de TextSearch():

Parámetro Valor predeterminado Valores posibles Descripción
enable_nlq true true, false Este parámetro decide si habilitar el análisis de consultas de lenguaje natural. Cuando se establece en true, FTS interpretará la entrada del usuario como una consulta de lenguaje natural. Cuando se establece en false, FTS utilizará una consulta de términos estándar para analizar la entrada del usuario.
operator OR OR, AND Este parámetro especifica el operador lógico a utilizar para combinar cada término de consulta (tokenizado por el tokenizador). Seleccionar OR devolverá resultados que coincidan con cualquiera de las condiciones, mientras que seleccionar AND devolverá resultados que coincidan con todos los términos.

NOTE

TextSearch para tablas distribuidas está disponible solo en la versión de la base de datos v1.7.0 o superior. Para TextSearch en tablas distribuidas, es suficiente construir el índice FTS correspondiente en las tablas locales.

A continuación se ofrece una descripción detallada de la configuración de la consulta TextSearch():

Settings Default Value Candidate Values Description
dfs_query_then_fetch false true, false Para tablas distribuidas, esta configuración decide si primero se realiza una consulta distribuida para recopilar estadísticas de todos los fragmentos, seguida de una búsqueda de texto completo (FTS) precisa basada en las estadísticas recopiladas.

# Ejemplo de uso

SELECT
    id,
    title,
    body,
    TextSearch('enable_nlq=true', 'operator=OR')(body, 'mammoth AND Europe') AS score
FROM default.wiki_abstract_text
ORDER BY score DESC
LIMIT 5

Basándose en los resultados, cada fila contiene tanto "mammoth" como "Europe", lo cual se alinea con la lógica de habilitar la consulta de lenguaje natural.

Tenga en cuenta que solo hay 2 resultados de búsqueda. Aunque nuestra consulta SQL establece el límite en 5, solo 2 entradas en la tabla cumplen con los criterios.

id title body score
3171491 Leymus racemosus Leymus racemosus is a species of perennial wild rye known by the common name mammoth wild rye. It is native to southeastern and eastern Europe, Middle Asia, Caucasus, Siberia, China, Mongolia, New Zealand, and parts of North America. 10.067189
2719784 Venus of Hohle Fels The Venus of Hohle Fels (also known as the Venus of Schelklingen; in German variously ) is an Upper Paleolithic Venus figurine made of mammoth ivory that was unearthed in 2008 in Hohle Fels, a cave near Schelklingen, Germany. It is dated to between 35,000 and 40,000 years ago, belonging to the early Aurignacian, at the very beginning of the Upper Paleolithic, which is associated with the earliest presence of Cro-Magnon in Europe. 6.9371195
SELECT
    id,
    title,
    body,
    TextSearch('enable_nlq=false', 'operator=OR')(body, 'Atlantic AND Europe') AS score
FROM default.wiki_abstract_text
ORDER BY score DESC
LIMIT 5

Después de deshabilitar la consulta de lenguaje natural, los resultados ya no garantizan la aparición simultánea de "Atlantic" y "Europe". Dado que el valor predeterminado del operador es OR, se incluirá cualquier fila que contenga "Atlantic", "AND" o "Europe" en los resultados de búsqueda.

id title body score
3046233 And And or AND may refer to: 13.748591
5050203 A N D (Tricot album) And}} 13.047318
357499 Andromeda I And 1}} 12.335348
678064 Omicron Andromedae And 1}} 12.335348
3716928 Platycheirus ramsaerensis Platycheirus ramsaerensis is a species of hoverfly. It is found along the parts of northern Europe that face the Atlantic. 11.937536

Note

La funzione tabella full_text_search() è disponibile solo nella versione DB v1.7.0 o superiore.

La funzione tabella full_text_search() viene utilizzata per eseguire ricerche di testo su un indice FTS con più colonne di testo in MyScale. La sintassi di base per la funzione tabella full_text_search() è la seguente:

full_text_search(table_name, index_name, query [,with_score] [,enable_nlq] [,operator])
  • table_name si riferisce alla tabella contenente l'indice FTS.
  • index_name si riferisce all'indice FTS contenente più colonne di testo da cercare.
  • query si riferisce alla stringa di ricerca che rispetta il linguaggio di query Tantivy.
  • with_score indica se restituire la colonna del punteggio bm25 (valore predefinito 0).
  • enable_nlq indica se abilitare l'analisi delle query in linguaggio naturale (valore predefinito 1).
  • operator indica l'operatore logico da utilizzare per combinare ciascun termine di query (tokenizzato dal tokenizer) (valore predefinito 'OR').

L'esempio seguente mostra come utilizzare la funzione full_text_search(). L'esempio restituisce i primi 5 documenti più pertinenti in cui la colonna body contiene "non-profit institute in Washington" o la colonna title contiene "Institute". La metrica per misurare la pertinenza è il punteggio BM25 restituito dalla funzione full_text_search() - maggiore è il punteggio, maggiore è la pertinenza.

SELECT
    id,
    title,
    body,
    bm25_score
FROM full_text_search('default.en_wiki_abstract', 'multi_col_idx', 'body:non-profit institute in Washington or title:Institute', 1)
ORDER BY bm25_score DESC
LIMIT 5;

Dai risultati, possiamo vedere che il testo in ciascuna riga della colonna body è correlato alla frase di ricerca "non-profit institute in Washington" o il testo della colonna title è correlato alla frase di ricerca "Institute".

id title body bm25_score
849009 Washington Institute Washington Institute may mean 38.110603
872513 Earth Policy Institute Earth Policy Institute was an independent non-profit environmental organization based in Washington, D.C. 35.545998
895248 Arab American Institute Founded in 1985, the Arab American Institute is a non-profit membership organization based in Washington D.C. 34.77088
1730029 Washington Cancer Institute The Washington Cancer Institute (WCI) is Washington, D.C. 34.445385
1950599 Environmental Law Institute The Environmental Law Institute (ELI) is a non-profit, non-partisan organization, headquartered in Washington, D.C. 34.046894

# Accelerazione delle Funzioni di Stringa Incorporate

Gli indici FTS possono anche essere utilizzati per accelerare le funzioni di stringa incorporate di ClickHouse, tra cui equals, notEquals, like, notLike, hasToken, hasTokenOrNull, in, notIn, startsWith, endsWith, has, mapContains e multiSearchAny.

Per controllare se l'indice FTS è abilitato durante l'esecuzione di queste funzioni di stringa, viene fornita un'impostazione di query denominata enable_fts_index_for_string_functions. Il valore predefinito è 0, il che significa che l'indice FTS non viene utilizzato durante l'esecuzione di queste funzioni incorporate di ClickHouse. Gli utenti possono impostarlo manualmente su 1 per abilitare FTS. Per ulteriori informazioni su come utilizzare le impostazioni delle query, fare riferimento a ClickHouse Query-level Settings (opens new window).

# Perché il Valore Predefinito di enable_fts_index_for_string_functions è Impostato su 0?

Considerazioni di Efficienza:

Quando la stringa cercata appare relativamente raramente nell'intera tabella, l'utilizzo di FTS può ottenere un'accelerazione significativa. Tuttavia, se la stringa cercata appare molto frequentemente nella tabella, come parole comuni come What, his, ecc., l'utilizzo degli indici FTS in questo scenario può effettivamente rallentare la velocità delle query delle funzioni regolari perché la maggior parte dei granuli dovrà essere letta.

Accuratezza dei Risultati di Ricerca:

Gli indici FTS tokenizzano il testo nella tabella e il comportamento della tokenizzazione varia a seconda del tipo di tokenizer. Ad esempio, il tokenizer raw tratta il testo originale come un singolo token, mentre il tokenizer whitespace suddivide il testo originale in più token in base agli spazi. Di seguito sono riportati i risultati della tokenizzazione di questi due tokenizer per "WhiteHouse is very beautiful.":

  • tokenizer(raw): token<"WhiteHouse is very beautiful.">
  • tokenizer(whitespace): token<"WhiteHouse">, token<"is">, token<"very">, token<"beautiful">

Il comportamento del tokenizer può influenzare l'accuratezza delle funzioni di corrispondenza delle stringhe. Quando si utilizza il tokenizer raw, eseguendo una query like %WhiteHouse%beautiful%, FTS converte la query like in una RegexQuery in Tantivy e cerca tutti i token, ed è chiaro che possiamo corrispondere correttamente a token<"WhiteHouse is very beautiful.">.

Tuttavia, quando si utilizza il tokenizer whitespace, FTS converte la query like %WhiteHouse%beautiful% in una corrispondenza regex e trova che non può corrispondere a nessuno dei token esistenti, quindi il segmento di testo non può essere contrassegnato come un hit, risultando in risultati di ricerca imprecisi.

Pertanto, per le funzioni di stringa che vengono convertite in RegexQuery tra cui like, notLike, startsWith e endsWith, quando enable_fts_index_for_string_functions è impostato su 1, solo il tokenizer raw può fornire risultati corretti.

# Esempi di Utilizzo

Esempio 1: Eseguire una Semplice Ricerca per Parole Chiave

Cercare la parola singola 'Tsinghua'.

SELECT count(*)
FROM default.en_wiki_abstract
WHERE hasToken(body, 'Tsinghua') 
SETTINGS enable_fts_index_for_string_functions=1;

Output:

count()
81

Esempio 2: Eseguire una Ricerca per Più Parole Chiave

Trovare articoli che contengono "Eiffel Tower" ma non "Paris".

SELECT count(*)
FROM default.en_wiki_abstract
WHERE (NOT hasToken(body, 'Paris')) AND multiSearchAny(body, ['Eiffel', 'Tower']) 
SETTINGS enable_fts_index_for_string_functions=1;

Output:

count()
2828

Esempio 3: Eseguire una Query di Combinazione Condizionale Complessa

Combinare diversi nomi, luoghi, discipline e altri termini.

SELECT count(*)
FROM default.en_wiki_abstract
WHERE (NOT multiSearchAny(body, ['Montessori', 'postulated', 'Rooney'])) AND (hasToken(body, 'Patsy') OR hasToken(body, 'Anthropological')) 
SETTINGS enable_fts_index_for_string_functions=1;

Output:

count()
204

# Conclusión

Esta guía le ha mostrado cómo aprovechar MyScale para capacidades avanzadas de búsqueda de texto, desde la configuración de índices FTS hasta la ejecución de consultas de lenguaje natural. Al aplicar estas técnicas, puede administrar y buscar eficientemente datos de texto no estructurados, mostrando las sólidas capacidades de procesamiento de texto de MyScale.

Last Updated: Tue Oct 08 2024 07:35:58 GMT+0000