Dela via


Fulltextsökning i Azure Cosmos DB för NoSQL

Azure Cosmos DB for NoSQL erbjuder nu en kraftfull funktion för fulltextsökning. Detta är utformat för att förbättra de interna sökfunktionerna i dina appar utan att behöva en extern söktjänst för grundläggande fulltextsökning.

Fulltextindexering och sökning innehåller avancerade textbearbetningstekniker som att härstama, stoppa ordborttagning och tokenisering, vilket möjliggör effektiva och effektiva textsökningar via ett specialiserat textindex. Fulltextsökning innehåller även fulltextbedömning med en funktion som utvärderar dokumentens relevans för en viss sökfråga. BM25, eller Bästa matchning 25, tar hänsyn till faktorer som termfrekvens, omvänd dokumentfrekvens och dokumentlängd för att poängsätta och rangordna dokument. Detta hjälper till att säkerställa att de mest relevanta dokumenten visas överst i sökresultaten, vilket förbättrar noggrannheten och användbarheten för textsökningar.

Fulltextsökning är perfekt för olika scenarier, bland annat:

  • E-handel: Hitta snabbt produkter baserat på beskrivningar, recensioner och andra textattribut.
  • Innehållshantering: Sök effektivt igenom artiklar, bloggar och dokument.
  • Kundsupport: Hämta relevanta supportärenden, vanliga frågor och svar och kunskapsbas artiklar.
  • Användarinnehåll: Analysera och söka igenom användargenererat innehåll, till exempel inlägg och kommentarer.
  • RAG för chattrobotar: Förbättra chatbot-svar genom att hämta relevant information från stora text corpora, vilket förbättrar noggrannheten och relevansen av svar.
  • AI-appar med flera agenter: Gör det möjligt för flera AI-agenter att samarbeta för att söka efter och analysera stora mängder textdata, vilket ger omfattande och nyanserade insikter.
  1. Konfigurera en container med en fulltextpolicy och fulltextindex.
  2. Infoga dina data med textegenskaper.
  3. Kör frågor mot data med hjälp av funktioner för fulltextsökningssystem.

Om du vill använda funktioner för fulltextsökning bör du först definiera två principer:

  • En fulltextprincip på containernivå som definierar vilka sökvägar som innehåller text för de nya frågesystemfunktionerna i fulltext.
  • Ett fulltextindex har lagts till i indexeringsprincipen som möjliggör effektiv sökning.

Även om det är möjligt att köra fulltextsökningsfrågor utan dessa policies, använder de inte fulltextindexet och kan använda fler begärandeenheter (RU:er) och ha längre körningstider. Vi rekommenderar starkt att du definierar fulltextcontainer och indexprinciper.

Fulltextprincip

För varje textegenskap som du vill konfigurera för fulltextsökning måste du deklarera både path av egenskapen med text och language av texten. En enkel fulltextspolicy kan vara:

{
   "defaultLanguage": "en-US",
   "fullTextPaths": [
       {
           "path": "/text",
           "language": "en-US"
       }
   ]
}

Det är enkelt att definiera flera textsökvägar genom att lägga till ett annat element i matrisen fullTextPaths :

{
   "defaultLanguage": "en-US",
   "fullTextPaths": [
       {
           "path": "/text1",
           "language": "en-US"
       },
       {
           "path": "/text2",
           "language": "en-US"
       }
   ]
}

Viktigt!

Jokertecken (*, []) stöds för närvarande inte i fulltextprincipen eller fulltextindexet.

Stöd för flera språk (förhandsversion)

Stöd för flera språk gör att du kan indexera och söka text på andra språk än engelska. Den tillämpar språkspecifik tokenisering, härdning och stoppordsborttagning för mer exakta sökresultat.

Kommentar

Stöd för flera språk är i tidig förhandsversion. Prestanda och sökkvalitet kan skilja sig från fulltextsökning på engelska. Till exempel är stopword-borttagning endast tillgängligt för engelska (en-us) just nu. Funktionen kan komma att ändras genom utvecklingen av förhandsversionen. Om du vill prova det måste du registrera dig i funktionen Förhandsgranskningsfunktioner för fulltextsökning via avsnittet Funktioner i din Azure Cosmos DB-resurs i Azure-portalen.

Språk som stöds för närvarande är:

  • en-US (Engelska)
  • de-DE (tyska)
  • es-ES (Spanska)
  • fr-FR (Franska)

Fulltextindex

Alla fulltextsökningsåtgärder bör använda ett fulltextindex. Ett fulltextindex kan enkelt definieras i valfri Azure Cosmos DB för NoSQL-indexprincip i följande exempel.

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/\"_etag\"/?"
        },
    ],
    "fullTextIndexes": [
        {
            "path": "/text"
        }
    ]
}

Precis som med fulltextprinciperna kan fulltextindex definieras på flera sökvägar.

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/\"_etag\"/?"
        },
    ],
    "fullTextIndexes": [
        {
            "path": "/text"
        },
        {
            "path": "/text2"
        }
    ]
}

Sökfrågor i fulltext

Sök- och bedömningsåtgärder i fulltext utförs med hjälp av följande systemfunktioner i frågespråket Azure Cosmos DB for NoSQL:

  • FullTextContains: Returnerar true om en viss sträng finns i den angivna egenskapen för ett dokument. Detta är användbart i en WHERE sats när du vill se till att specifika nyckelord ingår i de dokument som returneras av din fråga.
  • FullTextContainsAll: Returnerar true om alla angivna strängar finns i den angivna egenskapen för ett dokument. Detta är användbart i en WHERE sats när du vill se till att flera nyckelord ingår i de dokument som returneras av din fråga.
  • FullTextContainsAny: Returnerar true om någon av de angivna strängarna finns i den angivna egenskapen för ett dokument. Detta är användbart i en WHERE sats när du vill se till att minst ett av nyckelorden ingår i dokumenten som returneras av din fråga.
  • FullTextScore: Returnerar en poäng. Detta kan bara användas i en ORDER BY RANK sats, där de returnerade dokumenten sorteras efter rangordningen för den fullständiga textpoängen, med de mest relevanta dokumenten (högsta poäng) högst upp och minst relevanta dokument (lägsta poäng) längst ned.

Här är några exempel på varje funktion som används.

FulltextInnehåller

I det här exemplet vill vi få de första 10 resultaten där frasen röd cykel finns i egenskapen c.text.

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, "red bicycle")

FullTextInnehållerAlla

I det här exemplet vill vi få de första 10 resultaten där nyckelorden röd och cykel finns i egenskapen c.text, men inte nödvändigtvis tillsammans.

SELECT TOP 10 *
FROM c
WHERE FullTextContainsAll(c.text, "red", "bicycle")

FulltextInnehållerNågon

I det här exemplet vill vi få de första 10 resultaten där nyckelorden röd och antingen cykel eller skateboard finns i egenskapen c.text.

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, "red") AND FullTextContainsAny(c.text, "bicycle", "skateboard")

FullTextScore

I det här exemplet vill vi få de första 10 resultaten där berg och cykel ingår och sorteras efter relevansordning. Det vill: dokument som har dessa termer oftare bör visas högre upp i listan.

SELECT TOP 10 *
FROM c
ORDER BY RANK FullTextScore(c.text, "bicycle", "mountain")

Viktigt!

FullTextScore kan endast användas i ORDER BY RANK-satsen och inte projiceras i SELECT-uttrycket eller i en WHERE-sats.

Fuzzy-sökning (förhandsversion)

Fuzzy-sökning kan förbättra motståndskraften mot stavfel och textvariationer. Du kan ange ett tillåtet avstånd (antal redigeringar) mellan söktermen och dokumenttexten, så att nära matchningar kan betraktas som en träff. Det maximala avståndet som kan anges är 2 (två redigeringar).

Kommentar

Fuzzy-sökningen är i tidig förhandsversion. Prestanda, kvalitet och funktioner kan komma att ändras genom utvecklingen av förhandsversionen. Om du vill prova det måste du registrera dig i funktionen Förhandsgranskningsfunktioner för fulltextsökning via avsnittet Funktioner i din Azure Cosmos DB-resurs i Azure-portalen.

Följande exempelfråga hämtar dokument där texten innehåller ord som liknar rött (inom en redigering) och bicykel (inom två redigeringar):

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, {"term": "red", "distance":1}) AND FullTextContains(c.text, {"term": "bycycle", "distance":2})