MyScale (opens new window) ist eine vollständig verwaltete SQL-Vektordatenbank, die fortschrittliche Vektorsuchfunktionen bietet. In Version 1.5.0 von MyScale haben wir eine verbesserte Volltextsuchfunktion eingeführt, die von Tantivy (opens new window) unterstützt wird.
Die Implementierung des BM25-Algorithmus (opens new window) zur Berechnung der Relevanzbewertungen von Suchergebnissen verbessert die Volltextsuche in MyScale erheblich. Der BM25-Algorithmus ist ein wesentliches Merkmal der Textsuche, da er eine Möglichkeit bietet, Suchergebnisse basierend auf ihrer Relevanz zur ursprünglichen Abfrage zu sortieren. Er berücksichtigt Faktoren wie die Termhäufigkeit, die inverse Dokumenthäufigkeit und die Dokumentlänge. Der Algorithmus weist jedem Dokument eine Bewertung zu, sodass die relevantesten Ergebnisse zuerst angezeigt werden können.
Allerdings stehen MyScale und ClickHouse bei der Volltextsuche (opens new window) derzeit vor zwei Hauptproblemen:
- Geringe Leistung: Die Suche und Bewertung großer Tabellen ist langsam, insbesondere wenn die Tabellen auf Millionen von Zeilen anwachsen.
- Fehlende Funktionalität: ClickHouse unterstützt keine Fuzzy-Suche, Relevanzanpassung und BM25-Relevanzbewertung, die in modernen Suchmaschinen üblich sind.
Die Relevanzanpassung ist ein weiteres wichtiges Merkmal der Textsuche. Sie ermöglicht es Ihnen, den Suchalgorithmus fein abzustimmen, um bestimmte Aspekte der Suche zu priorisieren, z. B. eine höhere Gewichtung von Übereinstimmungen im Titel im Vergleich zum Textkörper eines Dokuments. Dadurch wird die Genauigkeit und Nützlichkeit der Suchergebnisse erheblich verbessert.
Die Fuzzy-Suche ist ebenfalls wertvoll, insbesondere zur Behandlung von Tippfehlern oder Rechtschreibfehlern in Suchanfragen. Mit ihr kann die Suchmaschine Dokumente finden, die der Suchanfrage ähnlich sind, auch wenn sie nicht exakt übereinstimmen. Dies verbessert die Benutzererfahrung erheblich und stellt sicher, dass relevante Ergebnisse aufgrund kleiner Rechtschreibfehler nicht übersehen werden.
Der Volltextsuchindex von MyScale zielt darauf ab, diese Lücke zwischen MyScale und spezialisierten Engines wie Elasticsearch zu schließen und zusätzliche Dienste überflüssig zu machen.
Zu den wichtigsten Funktionen des Volltextsuchindex von MyScale gehören:
- Vollständig in MyScale nativ, ohne externe Abhängigkeiten;
- Auf Tantivy aufgebaut, einer schnellen und ressourceneffizienten Alternative zu Apache Lucene;
- Abfragezeiten über 5 Millionen Zeilen sind 300-mal schneller als der integrierte umgekehrte Index von ClickHouse;
- Unterstützt Fuzzy- und Platzhalter-Suchen sowie umfangreiche Tokenizer;
- Verwendet BM25 zur Relevanzbewertung ähnlich wie Elasticsearch; und
- Echtzeitsuche ohne manuelles Neindexieren.
Ein Beispiel:Boost Your AI App Efficiency nowSign up for free to benefit from 150+ QPS with 5,000,000 vectorsFree TrialExplore our product
Zunächst erstellen wir eine Tabelle, um Wikipedia-Daten zu speichern und die Volltextsuchfunktion zu testen.
CREATE TABLE default.en_wiki_abstract(
`id` UInt64,
`body` String,
`title` String,
`url` String,
)
ENGINE = MergeTree
ORDER BY id;
Bei der Erstellung eines Volltextsuchindexes (FTS) auf der Spalte body
ist es wichtig zu beachten, dass der Tokenizer in den Argumenten des Index konfiguriert werden kann. In diesem Szenario haben wir einen Tokenizer mit englischem Stemming und Stoppwörtern ausgewählt.
ALTER TABLE default.en_wiki_abstract
ADD INDEX body_idx (body)
TYPE fts('{"body":{"tokenizer":{"type":"stem", "stop_word_filters":["english"]}}}');
Anschließend laden wir die Daten über S3 hoch:
INSERT INTO default.en_wiki_abstract
SELECT * FROM s3('https://myscale-datasets.s3.ap-southeast-1.amazonaws.com/wiki_abstract_5m.parquet','Parquet');
Jetzt können wir die Spalte body
mithilfe der Funktion TextSearch()
durchsuchen, die eine Bewertung in BM25 zurückgibt.
SELECT
id,
title,
body,
TextSearch(body, 'non-profit institute in Washington') AS score
FROM default.en_wiki_abstract
ORDER BY score DESC
LIMIT 5;
Ausgabe:
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 |
Darüber hinaus kann die Volltextsuchfunktion in MyScale mit Vektorsuchen kombiniert werden, um Hybrid-Suchen in RAG-Pipelines durchzuführen. Benutzer führen normalerweise separate Abfragen mit Vektor- und Volltextsuchen durch und organisieren dann die Ergebnisse beider Suchen, indem sie Fusionalgorithmen über Python-Bibliotheken wie ranx (opens new window) anwenden.
Für detaillierte Anleitungen zu diesen Themen besuchen Sie bitte:
Schließlich wird der Volltextsuchindex mit Tantivy bald in unserem Open-Source-Projekt MyScaleDB (opens new window) verfügbar sein. Bleiben Sie dran!