Aracılığıyla paylaş


Hızlı Başlangıç: REST kullanarak vektör araması

Azure AI Search'te vektör oluşturmak, yüklemek ve sorgulamak için Arama REST API'lerini kullanmayı öğrenin.

Azure AI Search'te vektör deposu vektör ve nonvector alanlarını tanımlayan bir dizin şemasına, ekleme alanını oluşturan algoritmalar için vektör arama yapılandırmasına ve sorgu zamanında değerlendirilen vektör alanı tanımlarındaki ayarlara sahiptir. Dizin Oluştur REST API'si vektör deposunu oluşturur.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Not

Bu hızlı başlangıç vektörleştirme adımını atlar ve örnek belgelere eklemeler sağlar. Kendi içeriğinizin üzerine yerleşik veri öbekleme ve vektörleştirme eklemek istiyorsanız, uçtan uca izlenecek yol için Verileri içeri aktarma ve vektörleştirme sihirbazını deneyin.

Önkoşullar

Kaynak bilgilerini alma

Arama uç noktasına yönelik isteklerin kimliği doğrulanmış ve yetkilendirilmiş olmalıdır. Bu görev için API anahtarlarını veya rollerini kullanabilirsiniz. Microsoft Entra Id aracılığıyla anahtarsız bağlantı kullanmanızı öneririz.

Tercih ettiğiniz kimlik doğrulama yöntemine karşılık gelen sekmeyi seçin. Bu hızlı başlangıçtaki tüm istekler için aynı yöntemi kullanın.

  1. Azure portalında oturum açın ve arama hizmetinizi bulun.

  2. Genel Bakış giriş sayfasında URL'yi bulun. Örnek uç nokta https://mydemo.search.windows.net şeklinde görünebilir.

    Genel bakış sayfasındaki URL özelliğinin ekran görüntüsü.

  3. Microsoft Entra belirtecinizi almak için anahtarsız hızlı başlangıçtaki adımları izleyin.

    Önceki hızlı başlangıcın 3. adımında komutunu çalıştırdığınızda az account get-access-token belirteci alırsınız.

    az account get-access-token --scope https://search.azure.com/.default --query accessToken --output tsv
    

Kod dosyasını oluşturma veya indirme

Bu hızlı başlangıçtaki tüm istekleri çalıştırmak için bir .rest veya .http dosya kullanırsınız. Bu hızlı başlangıcın kodunu içeren REST dosyasını indirebilir veya Visual Studio Code'da yeni bir dosya oluşturup kodu bu dosyaya kopyalayabilirsiniz.

  1. Visual Studio Code'da veya .http dosya uzantısıyla yeni bir .rest dosya oluşturun. Örneğin, az-search-vector-quickstart.rest. Azure-Samples/azure-search-rest-samples/blob/main/Quickstart-vectors/az-search-vector-quickstart.rest dosyasının ham içeriğini kopyalayıp bu yeni dosyaya yapıştırın.

  2. Dosyanın üst kısmında yer tutucu değerini @baseUrl arama hizmeti URL'nizle değiştirin. Arama hizmeti URL'nizi bulma yönergeleri için Kaynak bilgilerini alma bölümüne bakın.

    @baseUrl = PUT-YOUR-SEARCH-SERVICE-URL-HERE
    
  3. Dosyanın üst kısmında, kimlik doğrulaması için yer tutucu değerini değiştirin. Microsoft Entra belirtecinizi veya API anahtarınızı alma yönergeleri için Kaynak bilgilerini alma bölümüne bakın.

    Microsoft Entra Id aracılığıyla önerilen anahtarsız kimlik doğrulaması için değerini değişkeniyle @token değiştirmeniz @apiKey gerekir.

    @token = PUT-YOUR-MICROSOFT-ENTRA-TOKEN-HERE
    

    API anahtarı kullanmayı tercih ediyorsanız değerini Azure portalından kopyaladığınız anahtarla değiştirin @apiKey .

    @apiKey = PUT-YOUR-ADMIN-KEY-HERE
    
  4. Microsoft Entra Id aracılığıyla önerilen anahtarsız kimlik doğrulaması için, istek üst bilgilerinde ile Authorization: Bearer {{token}} değiştirmeniz api-key: {{apiKey}} gerekir. Dosyada bulduğunuz tüm örneklerini api-key: {{apiKey}} değiştirin.

Vektör dizini oluşturma

Dizin Oluştur REST API'sini kullanarak bir vektör dizini oluşturur ve arama hizmetinizde fiziksel veri yapılarını ayarlarsınız.

Bu örnekteki dizin şeması otel içeriğine göre düzenlenmiştir. Örnek veriler vektör ve seçici olmayan adlardan ve kurgusal otel açıklamalarından oluşur. Bu şema, vektör dizin oluşturma ve sorgular için yapılandırmaları ve anlamsal derecelendirmeyi içerir.

  1. Visual Studio Code'da daha önce oluşturduğunuz dosyayı açınaz-search-vector-quickstart.rest.

  2. Dosyada ### Create a new index kod bloğunu bulun. Bu blok, arama hizmetinizde dizin oluşturma hotels-vector-quickstart isteğini içerir.

    ### Create a new index
    POST  {{baseUrl}}/indexes?api-version=2023-11-01  HTTP/1.1
    Content-Type: application/json
    Authorization: Bearer {{token}}
    
    {
        "name": "hotels-vector-quickstart",
        "fields": [
            {
                "name": "HotelId", 
                "type": "Edm.String",
                "searchable": false, 
                "filterable": true, 
                "retrievable": true, 
                "sortable": false, 
                "facetable": false,
                "key": true
            },
            {
                "name": "HotelName", 
                "type": "Edm.String",
                "searchable": true, 
                "filterable": false, 
                "retrievable": true, 
                "sortable": true, 
                "facetable": false
            },
            {
                "name": "HotelNameVector",
                "type": "Collection(Edm.Single)",
                "searchable": true,
                "retrievable": true,
                "dimensions": 1536,
                "vectorSearchProfile": "my-vector-profile"
            },
            {
                "name": "Description", 
                "type": "Edm.String",
                "searchable": true, 
                "filterable": false, 
                "retrievable": true, 
                "sortable": false, 
                "facetable": false
            },
            {
                "name": "DescriptionVector",
                "type": "Collection(Edm.Single)",
                "searchable": true,
                "retrievable": true,
                "dimensions": 1536,
                "vectorSearchProfile": "my-vector-profile"
            },
                    {
                "name": "Description_fr", 
                "type": "Edm.String",
                "searchable": true, 
                "filterable": false, 
                "retrievable": true, 
                "sortable": false, 
                "facetable": false,
                "analyzer": "en.microsoft"
            },
            {
                "name": "Description_frvector",
                "type": "Collection(Edm.Single)",
                "searchable": true,
                "retrievable": true,
                "dimensions": 1536,
                "vectorSearchProfile": "my-vector-profile"
            },
            {
                "name": "Category", 
                "type": "Edm.String",
                "searchable": true, 
                "filterable": true, 
                "retrievable": true, 
                "sortable": true, 
                "facetable": true
            },
            {
                "name": "Tags",
                "type": "Collection(Edm.String)",
                "searchable": true,
                "filterable": true,
                "retrievable": true,
                "sortable": false,
                "facetable": true
            },
                    {
                "name": "ParkingIncluded",
                "type": "Edm.Boolean",
                "searchable": false,
                "filterable": true,
                "retrievable": true,
                "sortable": true,
                "facetable": true
            },
            {
                "name": "LastRenovationDate",
                "type": "Edm.DateTimeOffset",
                "searchable": false,
                "filterable": true,
                "retrievable": true,
                "sortable": true,
                "facetable": true
            },
            {
                "name": "Rating",
                "type": "Edm.Double",
                "searchable": false,
                "filterable": true,
                "retrievable": true,
                "sortable": true,
                "facetable": true
            },
            {
                "name": "Address", 
                "type": "Edm.ComplexType",
                "fields": [
                    {
                        "name": "StreetAddress", "type": "Edm.String",
                        "searchable": true, "filterable": false, "retrievable": true, "sortable": false, "facetable": false
                    },
                    {
                        "name": "City", "type": "Edm.String",
                        "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true
                    },
                    {
                        "name": "StateProvince", "type": "Edm.String",
                        "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true
                    },
                    {
                        "name": "PostalCode", "type": "Edm.String",
                        "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true
                    },
                    {
                        "name": "Country", "type": "Edm.String",
                        "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true
                    }
                ]
            },
            {
                "name": "Location",
                "type": "Edm.GeographyPoint",
                "searchable": false, 
                "filterable": true, 
                "retrievable": true, 
                "sortable": true, 
                "facetable": false
            }
        ],
        "vectorSearch": {
            "algorithms": [
                {
                    "name": "my-hnsw-vector-config-1",
                    "kind": "hnsw",
                    "hnswParameters": 
                    {
                        "m": 4,
                        "efConstruction": 400,
                        "efSearch": 500,
                        "metric": "cosine"
                    }
                },
                {
                    "name": "my-hnsw-vector-config-2",
                    "kind": "hnsw",
                    "hnswParameters": 
                    {
                        "m": 4,
                        "metric": "euclidean"
                    }
                },
                {
                    "name": "my-eknn-vector-config",
                    "kind": "exhaustiveKnn",
                    "exhaustiveKnnParameters": 
                    {
                        "metric": "cosine"
                    }
                }
            ],
            "profiles": [      
                {
                    "name": "my-vector-profile",
                    "algorithm": "my-hnsw-vector-config-1"
                }
          ]
        },
        "semantic": {
            "configurations": [
                {
                    "name": "my-semantic-config",
                    "prioritizedFields": {
                        "titleField": {
                            "fieldName": "HotelName"
                        },
                        "prioritizedContentFields": [
                            { "fieldName": "Description" }
                        ],
                        "prioritizedKeywordsFields": [
                            { "fieldName": "Category" }
                        ]
                    }
                }
            ]
        }
    }
    
  3. İstek gönder’i seçin. Bir yanıtınız HTTP/1.1 201 Created olmalıdır.

Yanıt gövdesi dizin şemasının JSON gösterimini içermelidir.

{
    "@odata.context": "https://my-demo-search.search.windows.net/$metadata#indexes/$entity",
    "@odata.etag": "\"0x8DD2E70E6C36D8E\"",
    "name": "hotels-vector-quickstart",
    "defaultScoringProfile": null,
    "fields": [
    {
        "name": "HotelId",
        "type": "Edm.String",
        "searchable": false,
        "filterable": true,
        "retrievable": true,
        "sortable": false,
        "facetable": false,
        "key": true,
        "indexAnalyzer": null,
        "searchAnalyzer": null,
        "analyzer": null,
        "dimensions": null,
        "vectorSearchProfile": null,
        "synonymMaps": []
    },
    [MORE FIELD DEFINITIONS OMITTED FOR BREVITY]
    ],
    "scoringProfiles": [],
    "corsOptions": null,
    "suggesters": [],
    "analyzers": [],
    "tokenizers": [],
    "tokenFilters": [],
    "charFilters": [],
    "encryptionKey": null,
    "similarity": {
    "@odata.type": "#Microsoft.Azure.Search.BM25Similarity",
    "k1": null,
    "b": null
    },
    "vectorSearch": {
    "algorithms": [
        {
        "name": "my-hnsw-vector-config-1",
        "kind": "hnsw",
        "hnswParameters": {
            "metric": "cosine",
            "m": 4,
            "efConstruction": 400,
            "efSearch": 500
        },
        "exhaustiveKnnParameters": null
        },
        {
        "name": "my-hnsw-vector-config-2",
        "kind": "hnsw",
        "hnswParameters": {
            "metric": "euclidean",
            "m": 4,
            "efConstruction": 400,
            "efSearch": 500
        },
        "exhaustiveKnnParameters": null
        },
        {
        "name": "my-eknn-vector-config",
        "kind": "exhaustiveKnn",
        "hnswParameters": null,
        "exhaustiveKnnParameters": {
            "metric": "cosine"
        }
        }
    ],
    "profiles": [
        {
        "name": "my-vector-profile",
        "algorithm": "my-hnsw-vector-config-1"
        }
    ]
    },
    "semantic": {
    "defaultConfiguration": null,
    "configurations": [
        {
        "name": "my-semantic-config",
        "prioritizedFields": {
            "titleField": {
            "fieldName": "HotelName"
            },
            "prioritizedContentFields": [
            {
                "fieldName": "Description"
            }
            ],
            "prioritizedKeywordsFields": [
            {
                "fieldName": "Category"
            }
            ]
        }
        }
    ]
    }
}

Dizin Oluşturma REST API'sine ilişkin önemli ayrıntılar:

  • Koleksiyon, fields metin ve vektör araması için gerekli bir anahtar alanı ile metin ve vektör alanları (ve gibi Description DescriptionVector) içerir. Vektör ve nonvector alanlarının aynı dizinde birlikte bulunması karma sorguları etkinleştirir. Örneğin, filtreleri, metin aramasını anlam derecelendirmesiyle ve vektörleri tek bir sorgu işleminde birleştirebilirsiniz.

  • Vektör alanları ve vectorSearchProfile özellikleriyle dimensions olmalıdırtype: Collection(Edm.Single).

  • vectorSearch bölümü, yaklaşık en yakın komşu algoritma yapılandırmalarından ve profillerinden oluşan bir dizidir. Desteklenen algoritmalar hiyerarşik gezinilebilir küçük dünya ve en kapsamlı k-en yakın komşu içerir. Daha fazla bilgi için bkz . Vektör aramasında ilgi puanlaması.

  • (isteğe bağlı) semantic yapılandırma, arama sonuçlarının yeniden yapılandırılmasını sağlar. Sonuçları, yapılandırmada belirtilen dize alanları için türünde semantic sorgular halinde yeniden düzenleyebilirsiniz. Daha fazla bilgi edinmek için bkz . Anlam derecelendirmesine genel bakış.

Belgeleri karşıya yükle

Dizini oluşturma ve yükleme ayrı adımlardır. Dizin şemasını önceki adımda oluşturdunuz. Şimdi belgeleri dizine yüklemeniz gerekir.

Azure AI Search'te dizin, arama hizmetinde çalıştırılacak tüm aranabilir verileri ve sorguları içerir. REST çağrıları için veriler JSON belgeleri olarak sağlanır. Bu görev için Belgeler- Dizin REST API'sini kullanın. URI, koleksiyonu ve işlemi içerecek docs şekilde genişletilir index .

  1. Visual Studio Code'da daha önce oluşturduğunuz dosyayı açınaz-search-vector-quickstart.rest.

  2. Dosyada ### Upload documents kod bloğunu bulun. Bu blok, arama hizmetinizdeki dizine hotels-vector-quickstart belge yükleme isteğini içerir.

    ### Upload documents
    POST {{baseUrl}}/indexes/hotels-quickstart-vectors/docs/index?api-version=2023-11-01  HTTP/1.1
    Content-Type: application/json
    Authorization: Bearer {{token}}
    
    {
        "value": [
            {
                "@search.action": "mergeOrUpload",
                "HotelId": "1",
                "HotelName": "Stay-Kay City Hotel",
                "HotelNameVector": [VECTOR ARRAY OMITTED],
                "Description": 
                    "The hotel is ideally located on the main commercial artery of the city 
                    in the heart of New York.",
                "DescriptionVector": [VECTOR ARRAY OMITTED],
                "Category": "Boutique",
                "Tags": [
                    "pool",
                    "air conditioning",
                    "concierge"
                ],
            },
            {
                "@search.action": "mergeOrUpload",
                "HotelId": "2",
                "HotelName": "Old Century Hotel",
                "HotelNameVector": [VECTOR ARRAY OMITTED],
                "Description": 
                    "The hotel is situated in a  nineteenth century plaza, which has been 
                    expanded and renovated to the highest architectural standards to create a modern, 
                    functional and first-class hotel in which art and unique historical elements 
                    coexist with the most modern comforts.",
                "DescriptionVector": [VECTOR ARRAY OMITTED],
                "Category": "Boutique",
                "Tags": [
                    "pool",
                    "air conditioning",
                    "free wifi",
                    "concierge"
                ]
            },
            {
                "@search.action": "mergeOrUpload",
                "HotelId": "3",
                "HotelName": "Gastronomic Landscape Hotel",
                "HotelNameVector": [VECTOR ARRAY OMITTED],
                "Description": 
                    "The Hotel stands out for its gastronomic excellence under the management of 
                    William Dough, who advises on and oversees all of the Hotel’s restaurant services.",
                "DescriptionVector": [VECTOR ARRAY OMITTED],
                "Category": "Resort and Spa",
                "Tags": [
                    "air conditioning",
                    "bar",
                    "continental breakfast"
                ]
            }
            {
                "@search.action": "mergeOrUpload",
                "HotelId": "4",
                "HotelName": "Sublime Palace Hotel",
                "HotelNameVector": [VECTOR ARRAY OMITTED],
                "Description": 
                    "Sublime Palace Hotel is located in the heart of the historic center of 
                    Sublime in an extremely vibrant and lively area within short walking distance to 
                    the sites and landmarks of the city and is surrounded by the extraordinary beauty 
                    of churches, buildings, shops and monuments. 
                    Sublime Palace is part of a lovingly restored 1800 palace.",
                "DescriptionVector": [VECTOR ARRAY OMITTED],
                "Category": "Boutique",
                "Tags": [
                    "concierge",
                    "view",
                    "24-hour front desk service"
                ]
            },
            {
                "@search.action": "mergeOrUpload",
                "HotelId": "13",
                "HotelName": "Luxury Lion Resort",
                "HotelNameVector": [VECTOR ARRAY OMITTED],
                "Description": 
                    "Unmatched Luxury.  Visit our downtown hotel to indulge in luxury 
                    accommodations. Moments from the stadium, we feature the best in comfort",
                "DescriptionVector": [VECTOR ARRAY OMITTED],
                "Category": "Resort and Spa",
                "Tags": [
                    "view",
                    "free wifi",
                    "pool"
                ]
            },
            {
                "@search.action": "mergeOrUpload",
                "HotelId": "48",
                "HotelName": "Nordick's Valley Motel",
                "HotelNameVector": [VECTOR ARRAY OMITTED],
                "Description": 
                    "Only 90 miles (about 2 hours) from the nation's capital and nearby 
                    most everything the historic valley has to offer.  Hiking? Wine Tasting? Exploring 
                    the caverns?  It's all nearby and we have specially priced packages to help make 
                    our B&B your home base for fun while visiting the valley.",
                "DescriptionVector": [VECTOR ARRAY OMITTED],
                "Category": "Boutique",
                "Tags": [
                    "continental breakfast",
                    "air conditioning",
                    "free wifi"
                ],
            },
            {
                "@search.action": "mergeOrUpload",
                "HotelId": "49",
                "HotelName": "Swirling Currents Hotel",
                "HotelNameVector": [VECTOR ARRAY OMITTED],
                "Description": 
                    "Spacious rooms, glamorous suites and residences, rooftop pool, walking 
                    access to shopping, dining, entertainment and the city center.",
                "DescriptionVector": [VECTOR ARRAY OMITTED],
                "Category": "Luxury",
                "Tags": [
                    "air conditioning",
                    "laundry service",
                    "24-hour front desk service"
                ]
            }
        ]
    }
    

    Önemli

    Bu örnekteki kod çalıştırılamaz. Kısa olması için birkaç karakter veya çizgi kaldırılır. İsteği çalıştırmak için dosyanızdaki az-search-vector-quickstart.rest kodu kullanın.

  3. İstek gönder’i seçin. Bir yanıtınız HTTP/1.1 200 OK olmalıdır. Yanıt gövdesi, arama belgelerinin JSON gösterimini içermelidir.

Belgeler - Dizin REST API isteği hakkında önemli ayrıntılar:

  • Yükteki belgeler, dizin şemasında tanımlanan alanlardan oluşur.

  • Vektör alanları kayan nokta değerleri içerir. Dimensions özniteliğinin her biri en az 2, en fazla 3.072 kayan nokta değeri vardır. Bu hızlı başlangıç, Azure OpenAI text-embedding-ada-002 modeli tarafından oluşturulan eklemelerin boyutu olduğundan dimensions özniteliğini 1.536 olarak ayarlar.

Sorgu çalıştırma

Belgeler artık yüklendiklerine göre Belgeler - Arama Gönderisi (REST) kullanarak bunlara yönelik vektör sorguları gönderebilirsiniz.

Sonraki bölümlerde dizinde sorgular hotels-vector-quickstart çalıştıracağız. Sorgular şunları içerir:

Örnek vektör sorguları iki dizeyi temel alır:

  • Arama dizesi: historic hotel walk to restaurants and shopping
  • Vektör sorgu dizesi (matematiksel bir gösterime vektörleştirilmiş): classic lodging near running trails, eateries, retail

Vektör sorgu dizesi, arama dizesine benzer, ancak arama dizininde mevcut olmayan terimleri içerir. için classic lodging near running trails, eateries, retailanahtar sözcük araması yaparsanız sonuçlar sıfır olur. Eşleşen terimler olmasa bile ilgili sonuçları nasıl alabileceğinizi göstermek için bu örneği kullanırız.

  1. Visual Studio Code'da daha önce oluşturduğunuz dosyayı açınaz-search-vector-quickstart.rest.

  2. Dosyada ### Run a single vector query kod bloğunu bulun. Bu blok, arama dizinini sorgulama isteğini içerir.

    ### Run a single vector query
    POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-01  HTTP/1.1
        Content-Type: application/json
        Authorization: Bearer {{token}}
    
        {
            "count": true,
            "select": "HotelId, HotelName, Description, Category",
            "vectorQueries": [
                {
                    "vector"": [0.01944167, 0.0040178085
                        . . .  TRIMMED FOR BREVITY
                        010858015, -0.017496133],
                    "k": 7,
                    "fields": "DescriptionVector",
                    "kind": "vector",
                    "exhaustive": true
                }
            ]
        }
    

    Bu vektör sorgusu kısaldı. , vectorQueries.vector sorgu girişinin vektörleştirilmiş metnini içerir, fields hangi vektör alanlarının arandığını belirler ve k döndürülecek en yakın komşu sayısını belirtir.

    Vektör sorgu dizesi, classic lodging near running trails, eateries, retailbu sorgu için 1.536 eklemeye vektörleştirilmiş olan dizesidir.

    Önemli

    Bu örnekteki kod çalıştırılamaz. Kısa olması için birkaç karakter veya çizgi kaldırılır. İsteği çalıştırmak için dosyanızdaki az-search-vector-quickstart.rest kodu kullanın.

  3. İstek gönder’i seçin. Bir yanıtınız HTTP/1.1 200 OK olmalıdır. Yanıt gövdesi, arama sonuçlarının JSON gösterimini içermelidir.

vektör eşdeğeri classic lodging near running trails, eateries, retail için yanıt yedi sonuç içerir. Her sonuç bir arama puanı ve içinde selectlistelenen alanları sağlar. Benzerlik aramasında yanıtta her zaman değer benzerlik puanına göre sıralanmış sonuçlar bulunur k .

{
  "@odata.context": "https://my-demo-search.search.windows.net/indexes('hotels-vector-quickstart')/$metadata#docs(*)",
  "@odata.count": 7,
  "value": [
    {
      "@search.score": 0.85773647,
      "HotelId": "48",
      "HotelName": "Nordick's Motel",
      "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer.  Hiking? Wine Tasting? Exploring the caverns?  It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley.",
      "Category": "Boutique"
    },
    {
      "@search.score": 0.8399132,
      "HotelId": "49",
      "HotelName": "Old Carrabelle Hotel",
      "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
      "Category": "Luxury"
    },
    {
      "@search.score": 0.83839583,
      "HotelId": "13",
      "HotelName": "Historic Lion Resort",
      "Description": "Unmatched Luxury.  Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort",
      "Category": "Resort and Spa"
    },
    {
      "@search.score": 0.82543474,
      "HotelId": "4",
      "HotelName": "Sublime Cliff Hotel",
      "Description": "Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 1800 palace.",
      "Category": "Boutique"
    },
    {
      "@search.score": 0.82380104,
      "HotelId": "1",
      "HotelName": "Secret Point Hotel",
      "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York.",
      "Category": "Boutique"
    },
    {
      "@search.score": 0.8151413,
      "HotelId": "2",
      "HotelName": "Twin Dome Hotel",
      "Description": "The hotel is situated in a  nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts.",
      "Category": "Boutique"
    },
    {
      "@search.score": 0.8133767,
      "HotelId": "3",
      "HotelName": "Triple Landscape Hotel",
      "Description": "The Hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel\u2019s restaurant services.",
      "Category": "Resort and Spa"
    }
  ]
}

Filtre ile tek vektör araması

Filtreler ekleyebilirsiniz, ancak filtreler dizininizdeki görsel olmayan içeriğe uygulanır. Bu örnekte filtre, ücretsiz Wi-Fi sağlamayan Tags otelleri filtrelemek için alana uygulanır.

  1. Visual Studio Code'da daha önce oluşturduğunuz dosyayı açınaz-search-vector-quickstart.rest.

  2. Dosyada ### Run a vector query with a filter kod bloğunu bulun. Bu blok, arama dizinini sorgulama isteğini içerir.

    ### Run a vector query with a filter
    POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-01  HTTP/1.1
        Content-Type: application/json
        Authorization: Bearer {{token}}
    
        {
            "count": true,
            "select": "HotelId, HotelName, Category, Tags, Description",
            "filter": "Tags/any(tag: tag eq 'free wifi')",
            "vectorFilterMode": "postFilter",
            "vectorQueries": [
            {
                "vector": [ VECTOR OMITTED ],
                "k": 7,
                "fields": "DescriptionVector",
                "kind": "vector",
                "exhaustive": true
            },
        ]
    }
    

    Önemli

    Bu örnekteki kod çalıştırılamaz. Kısa olması için birkaç karakter veya çizgi kaldırılır. İsteği çalıştırmak için dosyanızdaki az-search-vector-quickstart.rest kodu kullanın.

  3. İstek gönder’i seçin. Bir yanıtınız HTTP/1.1 200 OK olmalıdır. Yanıt gövdesi, arama sonuçlarının JSON gösterimini içermelidir.

Sorgu önceki tek vektör arama örneğiyle aynıydı, ancak bir işlem sonrası dışlama filtresi içeriyor ve yalnızca ücretsiz Wi-Fi erişimi olan üç oteli döndürüyor.

{
  "@odata.context": "https://my-demo-search.search.windows.net/indexes('hotels-vector-quickstart')/$metadata#docs(*)",
  "@odata.count": 3,
  "value": [
    {
      "@search.score": 0.85773647,
      "HotelId": "48",
      "HotelName": "Nordick's Motel",
      "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer.  Hiking? Wine Tasting? Exploring the caverns?  It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley.",
      "Category": "Boutique",
      "Tags": [
        "continental breakfast",
        "air conditioning",
        "free wifi"
      ]
    },
    {
      "@search.score": 0.83839583,
      "HotelId": "13",
      "HotelName": "Historic Lion Resort",
      "Description": "Unmatched Luxury.  Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort",
      "Category": "Resort and Spa",
      "Tags": [
        "view",
        "free wifi",
        "pool"
      ]
    },
    {
      "@search.score": 0.8151413,
      "HotelId": "2",
      "HotelName": "Twin Dome Hotel",
      "Description": "The hotel is situated in a  nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts.",
      "Category": "Boutique",
      "Tags": [
        "pool",
        "free wifi",
        "air conditioning",
        "concierge"
      ]
    }
  ]
}

Karma arama, tek bir arama isteğindeki anahtar sözcük sorgularından ve vektör sorgularından oluşur. Bu örnek vektör sorgusunu ve tam metin aramasını eşzamanlı olarak çalıştırır:

  • Arama dizesi: historic hotel walk to restaurants and shopping
  • Vektör sorgu dizesi (matematiksel bir gösterime vektörleştirilmiş): classic lodging near running trails, eateries, retail
  1. Visual Studio Code'da daha önce oluşturduğunuz dosyayı açınaz-search-vector-quickstart.rest.

  2. Dosyada ### Run a hybrid query kod bloğunu bulun. Bu blok, arama dizinini sorgulama isteğini içerir.

    ### Run a hybrid query
    POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-01  HTTP/1.1
        Content-Type: application/json
        Authorization: Bearer {{token}}
    
    {
        "count": true,
        "search": "historic hotel walk to restaurants and shopping",
        "select": "HotelName, Description",
        "top": 7,
        "vectorQueries": [
            {
                "vector": [ VECTOR OMITTED],
                "k": 7,
                "fields": "DescriptionVector",
                "kind": "vector",
                "exhaustive": true
            }
        ]
    }
    

    Önemli

    Bu örnekteki kod çalıştırılamaz. Kısa olması için birkaç karakter veya çizgi kaldırılır. İsteği çalıştırmak için dosyanızdaki az-search-vector-quickstart.rest kodu kullanın.

  3. İstek gönder’i seçin. Bir yanıtınız HTTP/1.1 200 OK olmalıdır. Yanıt gövdesi, arama sonuçlarının JSON gösterimini içermelidir.

Bu bir karma sorgu olduğundan sonuçlar Reciprocal Rank Fusion (RRF) tarafından derecelenir. RRF, birden çok arama sonucunun arama puanlarını değerlendirir, tersini alır ve ardından birleştirilmiş sonuçları birleştirip sıralar. Sonuç top sayısı döndürülür.

Yanıtı gözden geçirin:

{
    "@odata.count": 7,
    "value": [
        {
            "@search.score": 0.03279569745063782,
            "HotelName": "Luxury Lion Resort",
            "Description": "Unmatched Luxury.  Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort"
        },
        {
            "@search.score": 0.03226646035909653,
            "HotelName": "Sublime Palace Hotel",
            "Description": "Sublime Palace Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Palace is part of a lovingly restored 1800 palace."
        },
        {
            "@search.score": 0.03226646035909653,
            "HotelName": "Swirling Currents Hotel",
            "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center."
        },
        {
            "@search.score": 0.03205128386616707,
            "HotelName": "Nordick's Valley Motel",
            "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer.  Hiking? Wine Tasting? Exploring the caverns?  It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley."
        },
        {
            "@search.score": 0.03128054738044739,
            "HotelName": "Gastronomic Landscape Hotel",
            "Description": "The Hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel’s restaurant services."
        },
        {
            "@search.score": 0.03100961446762085,
            "HotelName": "Old Century Hotel",
            "Description": "The hotel is situated in a  nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts."
        },
        {
            "@search.score": 0.03077651560306549,
            "HotelName": "Stay-Kay City Hotel",
            "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York."
        }
    ]
}

RRF sonuçları birleştirdiğinden girişlerin gözden geçirilmesine yardımcı olur. Aşağıdaki sonuçlar yalnızca tam metin sorgusundan alınıyor. En iyi iki sonuç Sublime Palace Hotel ve History Lion Resort oldu. Sublime Palace Hotel daha güçlü bir BM25 ilgi puanına sahiptir.

{
    "@search.score": 2.2626662,
    "HotelName": "Sublime Palace Hotel",
    "Description": "Sublime Palace Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Palace is part of a lovingly restored 1800 palace."
},
{
    "@search.score": 0.86421645,
    "HotelName": "Luxury Lion Resort",
    "Description": "Unmatched Luxury.  Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort"
},

Eşleşmeleri bulmak için HNSW kullanan yalnızca vektör sorgusunda Sublime Palace Hotel dördüncü konuma düşüyor. Tam metin aramasında ikinci, vektör aramasında üçüncü sırada yer alan Historic Lion aynı dalgalanma aralığını yaşamadığından homojenleştirilmiş sonuç kümesinde üst eşleşme olarak görünür.

"value": [
    {
        "@search.score": 0.857736,
        "HotelId": "48",
        "HotelName": "Nordick's Valley Motel",
        "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer.  Hiking? Wine Tasting? Exploring the caverns?  It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley.",
        "Category": "Boutique"
    },
    {
        "@search.score": 0.8399129,
        "HotelId": "49",
        "HotelName": "Swirling Currents Hotel",
        "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
        "Category": "Luxury"
    },
    {
        "@search.score": 0.8383954,
        "HotelId": "13",
        "HotelName": "Luxury Lion Resort",
        "Description": "Unmatched Luxury.  Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort",
        "Category": "Resort and Spa"
    },
    {
        "@search.score": 0.8254346,
        "HotelId": "4",
        "HotelName": "Sublime Palace Hotel",
        "Description": "Sublime Palace Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Palace is part of a lovingly restored 1800 palace.",
        "Category": "Boutique"
    },
    {
        "@search.score": 0.82380056,
        "HotelId": "1",
        "HotelName": "Stay-Kay City Hotel",
        "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York.",
        "Category": "Boutique"
    },
    {
        "@search.score": 0.81514084,
        "HotelId": "2",
        "HotelName": "Old Century Hotel",
        "Description": "The hotel is situated in a  nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts.",
        "Category": "Boutique"
    },
    {
        "@search.score": 0.8133763,
        "HotelId": "3",
        "HotelName": "Gastronomic Landscape Hotel",
        "Description": "The Hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel’s restaurant services.",
        "Category": "Resort and Spa"
    }
]

Filtre ile anlamsal karma arama

Koleksiyondaki son sorgu aşağıdadır. Semantik derecelendirmeye sahip bu karma sorgu, yalnızca Washington D.C'nin 500 kilometre yarıçapındaki otelleri gösterecek şekilde filtrelenmiştir. Varsayılana eşdeğer olan null olarak ayarlayabilirsiniz vectorFilterMode (preFilter daha yeni dizinler ve postFilter eski dizinler için).

  1. Visual Studio Code'da daha önce oluşturduğunuz dosyayı açınaz-search-vector-quickstart.rest.

  2. Dosyada ### Run a hybrid query with semantic reranking kod bloğunu bulun. Bu blok, arama dizinini sorgulama isteğini içerir.

    ### Run a hybrid query with semantic reranking
    POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-01  HTTP/1.1
        Content-Type: application/json
        Authorization: Bearer {{token}}
    
    {
        "count": true,
        "search": "historic hotel walk to restaurants and shopping",
        "select": "HotelId, HotelName, Category, Description,Address/City, Address/StateProvince",
        "filter": "geo.distance(Location, geography'POINT(-77.03241 38.90166)') le 500",
        "vectorFilterMode": null,
        "facets": [ "Address/StateProvince"],
        "top": 7,
        "queryType": "semantic",
        "answers": "extractive|count-3",
        "captions": "extractive|highlight-true",
        "semanticConfiguration": "my-semantic-config",
        "vectorQueries": [
            {
                "vector": [ VECTOR OMITTED ],
                "k": 7,
                "fields": "DescriptionVector",
                "kind": "vector",
                "exhaustive": true
            }
        ]
    }
    

    Önemli

    Bu örnekteki kod çalıştırılamaz. Kısa olması için birkaç karakter veya çizgi kaldırılır. İsteği çalıştırmak için dosyanızdaki az-search-vector-quickstart.rest kodu kullanın.

  3. İstek gönder’i seçin. Bir yanıtınız HTTP/1.1 200 OK olmalıdır. Yanıt gövdesi, arama sonuçlarının JSON gösterimini içermelidir.

Yanıtı gözden geçirin. Yanıt, konuma göre filtrelenen ve StateProvince arama dizesi sorgusuna (historic hotel walk to restaurants and shopping ) en yakın sonuçları yükseltmek için modellenen ve görsel olarak yeniden kaydedilen üç oteldir.

The Swirling Currents Hotel artık en üst noktaya taşınıyor. Semantik sıralama olmadan Nordick's Valley Motel bir numaradır. Anlamsal derecelendirme ile, makine kavrama modelleri bunu "otel, yemek (restoranlar) ve alışverişe yürüme mesafesinde" için geçerli olduğunu historic algılar.

{
  "@odata.context": "https://my-demo-search.search.windows.net/indexes('hotels-vector-quickstart')/$metadata#docs(*)",
  "@odata.count": 2,
  "@search.facets": {
    "Address/StateProvince": [
      {
        "count": 1,
        "value": "VA"
      }
    ]
  },
  "@search.answers": [],
  "value": [
    {
      "@search.score": 0.03306011110544205,
      "@search.rerankerScore": 2.8773112297058105,
      "HotelId": "49",
      "HotelName": "Old Carrabelle Hotel",
      "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
      "Category": "Luxury",
      "Address": {
        "City": "Arlington",
        "StateProvince": "VA"
      }
    },
    {
      "@search.score": 0.03306011110544205,
      "@search.rerankerScore": 2.1703834533691406,
      "HotelId": "48",
      "HotelName": "Nordick's Motel",
      "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer.  Hiking? Wine Tasting? Exploring the caverns?  It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley.",
      "Category": "Boutique",
      "Address": {
        "City": "Washington D.C.",
        "StateProvince": null
      }
    }
  ]
}

Belgeler hakkında önemli ayrıntılar - REST API'sini Ara :

  • Vektör araması özelliği aracılığıyla vectors.value belirtilir. Anahtar sözcük araması özelliği aracılığıyla search belirtilir.

  • Karma aramada, vektör arama ile anahtar sözcükler üzerinde tam metin arama tümleştirebilirsiniz. Filtreler, yazım denetimi ve semantik derecelendirme vektörlere değil yalnızca metin içeriğine uygulanır. Bu son sorguda, sistem yeterince güçlü bir tane üretmediğinden anlamsal answer bir şey yoktur.

  • Gerçek sonuçlar semantik açıklamalı alt yazılar ve vurgular da dahil olmak üzere daha fazla ayrıntı içerir. Sonuçlar okunabilirlik için değiştirildi. Yanıtın tam yapısını almak için isteği REST istemcisinde çalıştırın.

Temizleme

Kendi aboneliğinizde çalışırken, projenin sonunda oluşturduğunuz kaynaklara hala ihtiyacınız olup olmadığını belirlemek iyi bir fikirdir. Çalışır durumda bırakılan kaynaklar maliyetlerin artmasına neden olabilir. Kaynakları teker teker silebilir veya tüm kaynak grubunu silerek kaynak kümesinin tamamını kaldırabilirsiniz.

En soldaki bölmedeki Tüm kaynaklar veya Kaynak grupları bağlantısını kullanarak Azure portalında kaynakları bulabilir ve yönetebilirsiniz.

Arama hizmetini korumak, ancak dizini ve belgeleri silmek istiyorsanız REST istemcisinde komutunu kullanabilirsiniz DELETE . Bu komut (dosyanızın az-search-vector-quickstart.rest sonunda) dizini siler hotels-vector-quickstart :

### Delete an index
DELETE  {{baseUrl}}/indexes/hotels-vector-quickstart?api-version=2023-11-01 HTTP/1.1
    Content-Type: application/json
    Authorization: Bearer {{token}}

Sonraki adımlar

Sonraki adım olarak, API anahtarları olmadan REST API çağrılarını çağırmayı öğrenmenizi öneririz.

Python, C# veya JavaScript için tanıtım kodunu da gözden geçirmek isteyebilirsiniz.