NoSQL için Azure Cosmos DB'de tam metin arama

NoSQL için Azure Cosmos DB artık güçlü bir tam metin arama özelliği sunuyor. Bu, temel tam metin araması için dış arama hizmetine gerek kalmadan uygulamalarınızın yerel arama özelliklerini geliştirmek için tasarlanmıştır.

Tam metin dizin oluşturma ve arama, sözcük kaldırmayı durdurma ve belirteç oluşturma gibi gelişmiş metin işleme tekniklerini içerir ve özel bir metin dizini aracılığıyla verimli ve etkili metin aramalarına olanak tanır. Tam metin araması, belgelerin belirli bir arama sorgusuyla olan ilgi düzeyini değerlendiren bir işlevle tam metin puanlaması da içerir. BM25 veya En İyi Eşleşen 25, belgeleri puanlayıp sıralamak için terim sıklığı, ters belge sıklığı ve belge uzunluğu gibi faktörleri dikkate alır. Bu, en uygun belgelerin arama sonuçlarının en üstünde görünmesini sağlayarak metin aramalarının doğruluğunu ve kullanışlılığını artırmaya yardımcı olur.

Tam metin araması aşağıdakiler gibi çeşitli senaryolar için idealdir:

  • E-ticaret: Açıklamaları, incelemeleri ve diğer metin özniteliklerini temel alan ürünleri hızla bulun.
  • İçerik yönetimi: Makaleleri, blogları ve belgeleri verimli bir şekilde arayın.
  • Müşteri desteği: İlgili destek biletlerini, SSS'leri ve bilgi bankası makalelerini alın.
  • Kullanıcı içeriği: Gönderiler ve açıklamalar gibi kullanıcı tarafından oluşturulan içeriği analiz edin ve arayın.
  • Sohbet botları için RAG: Büyük metin kuruluşlarından ilgili bilgileri alarak sohbet botu yanıtlarını geliştirin, yanıtların doğruluğunu ve ilgi düzeyini artırın.
  • Çok aracılı yapay zeka uygulamaları: Kapsamlı ve ayrıntılı içgörüler sağlayarak çok miktarda metin verisinde işbirliği yaparak arama yapmak ve analiz etmek için birden çok yapay zeka aracısını etkinleştirin.
  1. Kapsayıcıyı tam metin ilkesi ve tam metin dizini ile yapılandırın.
  2. Metin özellikleriyle verilerinizi ekleyin.
  3. Tam metin arama sistemi işlevlerini kullanarak verilere karşı sorgular çalıştırın.

Tam metin arama özelliklerini kullanmak için önce iki ilke tanımlamanız gerekir:

  • Yeni tam metin sorgu sistemi işlevleri için hangi yolların metin içerdiğini tanımlayan kapsayıcı düzeyinde bir tam metin ilkesi.
  • Verimli arama sağlayan dizin oluşturma ilkesine tam metin dizini eklendi.

Bu ilkeler olmadan tam metin arama sorguları çalıştırmak mümkün olsa da, tam metin dizinini kullanmaz ve daha yüksek istek birimlerini (RU) kullanabilir ve yürütme süreleri daha uzun olur. Tam metin kapsayıcısı ve dizin ilkeleri tanımlamanız kesinlikle önerilir.

Tam Metin Politikası

Tam metin araması için yapılandırmak istediğiniz her bir metin özelliği için, hem özelliğin kendisini hem de metnin path ve language değerlerini bildirmeniz gerekir. Basit bir tam metin ilkesi şöyle olabilir:

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

Diziye başka bir öğe fullTextPaths ekleyerek birden çok metin yolunu tanımlama işlemi kolayca yapılır:

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

Important

Joker karakterler (*, []) şu anda tam metin ilkesinde veya tam metin dizininde desteklenmiyor.

Çok dilli destek (önizleme)

Çok dilli destek, İngilizce dışındaki dillerde metinleri dizine eklemenizi ve aramanızı sağlar. Daha doğru arama sonuçları için dile özgü belirteçleme, kök bulma ve durak sözcüklerini kaldırma işlemlerini uygular.

Important

Çoklu dil desteği erken önizleme aşamasındadır ve tüm Azure Bölgelerinde kullanılamayabilir.

Note

Aramanın performansı ve kalitesi İngilizcedeki tam metin aramasından farklı olabilir. Örneğin, stopword kaldırma şu anda yalnızca İngilizce (en-us) için kullanılabilir. İşlevsellik, önizlemenin gelişimiyle değiştirilebilir. Bunu denemek için Azure portalındaki Azure Cosmos DB kaynağınızın Özellikler bölümü aracılığıyla Tam metin araması için yeni özellikler özelliğine kaydolmanız gerekir.

Şu anda desteklenen diller şunlardır:

  • en-US (İngilizce)
  • de-DE (Almanca)
  • es-ES (İspanyolca)
  • fr-FR (Fransızca)
  • it-IT (İtalyanca)
  • pt-PT (Portekizce)
  • pt-BR (Brezilya Portekizcesi)

Tam metin dizini

Tüm tam metin arama işlemleri , tam metin dizininden yararlanmalıdır. Tam metin dizini, aşağıdaki örneğe göre herhangi bir NoSQL için Azure Cosmos DB dizin ilkesinde kolayca tanımlanabilir.

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

Tam metin ilkelerinde olduğu gibi, tam metin dizinleri birden çok yolda tanımlanabilir.

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

Tam metin arama sorguları

Tam metin arama ve puanlama işlemleri, NoSQL için Azure Cosmos DB sorgu dilinde aşağıdaki sistem işlevleri kullanılarak gerçekleştirilir:

  • FullTextContains: Belirli bir dize belgenin belirtilen özelliğinde yer alırsa döndürür true . Bu, sorgunuz tarafından döndürülen belgelere belirli anahtar sözcüklerin eklendiğinden emin olmak istediğinizde bir WHERE yan tümcede yararlıdır.
  • FullTextContainsAll: Verilen dizelerin tümütruedöndürür. Bu, sorgunuz tarafından döndürülen belgelere birden çok anahtar sözcüğün eklendiğinden emin olmak istediğinizde bir WHERE yan tümcede yararlıdır.
  • FullTextContainsAny: Verilen dizelerden herhangi biritruedöndürür. Bu, anahtar sözcüklerden en az birinin sorgu sonucunda dönen belgelerde yer aldığından emin olmak istediğinizde bir WHERE yan tümcede yararlıdır.
  • FullTextScore: Bir puan döndürür. Bu yalnızca, döndürülen belgelerin tam metin puanının sırasına göre sıralandığı, en ilgili (en yüksek puanlama) belgelerin en üstte ve en az ilgili (en düşük puanlama) belgelerin en altta olduğu bir ORDER BY RANK yan tümcede kullanılabilir.

Kullanımdaki her işleve birkaç örnek aşağıda verilmiştir.

TamMetinİçerir

Bu örnekte, özelliğindec.textkırmızı bisiklet ifadesinin bulunduğu ilk 10 sonucu elde etmek istiyoruz.

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

Tam Metin Tümünü İçerir

Bu örnekte, özelliğinde kırmızı ve bisiklet anahtar sözcüklerinin bulunduğu ancak birlikte olması gerekmeyen c.textilk 10 sonuç elde etmek istiyoruz.

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

TamMetinHerhangiBiriniİçerir

Bu örnekte, özelliğindekırmızı ve bisiklet veya c.text anahtar sözcüklerinin bulunduğu ilk 10 sonucu elde etmek istiyoruz.

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

FullTextScore

Bu örnekte, dağ ve bisikletin dahil edildiği ve ilgi sırasına göre sıralandığı ilk 10 sonucu elde etmek istiyoruz. Başka bir ifadeyle, bu terimleri daha sık içeren belgelerin listede daha yüksek görünmesi gerekir.

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

Important

FullTextScore yalnızca ORDER BY RANK yan tümcesinde kullanılabilir ve SELECT deyimi veya WHERE yan tümcesinde projelendirilmemelidir.

Bulanık arama, yazım hataları ve metin varyasyonlarına karşı dayanıklılığı iyileştirebilir. Arama terimiyle belge metni arasında izin verilebilen bir uzaklık (düzenleme sayısı) belirterek yakın eşleşmelerin isabet olarak kabul edilmesine olanak sağlayabilirsiniz. Belirtilebilen maksimum uzaklık 2'dir (iki düzenleme).

Note

Bulanık arama erken önizleme aşamasındadır. Performans, kalite ve işlevsellik, önizlemenin gelişimiyle değişebilir. Bunu denemek için Azure portalındaki Azure Cosmos DB kaynağınızın Özellikler bölümü aracılığıyla Tam metin Arama için yeni özellikler özelliğine kaydolmanız gerekir.

Aşağıdaki örnek sorgu, metnin kırmızı (bir düzenleme içinde) ve bycycle (iki düzenleme içinde) gibi sözcükler içerdiği belgeleri alır:

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