Я добавляю документы в индекс поиска Azure через консольное приложение .NET Core. Когда я добавляю новые документы, он перезаписывает старый документ, и, наконец, индекс содержит только один документ.
Я использую метод IndexDocumentsBatch для загрузки списка документов в индекс. Когда я загружаю 5 документов, в индексе есть только последний документ из списка из 5 документов.
var inputDocuments = DemoObjects();
var sampleDocuments = await GetSampleDocumentsAsync(openAIClient, inputDocuments);
await searchClient.IndexDocumentsAsync(IndexDocumentsBatch.Upload(sampleDocuments));
Да, это сработало, спасибо за помощь.
В Когнитивном поиске Azure каждому документу необходим уникальный ключ, идентифицирующий его в индексе. Если несколько документов имеют один и тот же ключ, каждый последующий документ перезапишет предыдущий. Проверьте этот документ для справки.
Вы добавляете документы в индекс поиска Azure, перезаписывая друг друга, поскольку они имеют одно и то же значение ключа.
Установите пакет nuget Azure.Search.Documents
.
Проверьте приведенный ниже код, чтобы предотвратить перезапись.
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Azure;
using Azure.Search.Documents;
using Azure.Search.Documents.Indexes;
using Azure.Search.Documents.Indexes.Models;
namespace ConsoleApp6
{
internal class Program
{
private static readonly string serviceName = "testserviceb01";
private static readonly string apiKey = "API-Key";
private static readonly Uri endpoint = new Uri($"https://{serviceName}.search.windows.net");
private static readonly string indexName = "sample-index";
static async Task Main(string[] args)
{
var searchIndexClient = new SearchIndexClient(endpoint, new AzureKeyCredential(apiKey));
var searchClient = new SearchClient(endpoint, indexName, new AzureKeyCredential(apiKey));
await CreateIndexIfNotExistsAsync(searchIndexClient, indexName);
await UploadDocumentsAsync(searchClient);
}
public static async Task CreateIndexIfNotExistsAsync(SearchIndexClient indexClient, string indexName)
{
try
{
var existingIndex = await indexClient.GetIndexAsync(indexName);
Console.WriteLine($"Index '{indexName}' already exists.");
}
catch (RequestFailedException ex) when (ex.Status == 404)
{
var fields = new FieldBuilder().Build(typeof(SampleDocument));
var index = new SearchIndex(indexName, fields);
await indexClient.CreateOrUpdateIndexAsync(index);
Console.WriteLine($"Index '{indexName}' created.");
}
}
public static List<SampleDocument> DemoObjects()
{
return new List<SampleDocument>
{
new SampleDocument { Id = Guid.NewGuid().ToString(), Name = "Document 1" },
new SampleDocument { Id = Guid.NewGuid().ToString(), Name = "Document 2" },
new SampleDocument { Id = Guid.NewGuid().ToString(), Name = "Document 3" },
new SampleDocument { Id = Guid.NewGuid().ToString(), Name = "Document 4" },
new SampleDocument { Id = Guid.NewGuid().ToString(), Name = "Document 5" }
};
}
public static async Task UploadDocumentsAsync(SearchClient searchClient)
{
var inputDocuments = DemoObjects();
var batch = IndexDocumentsBatch.Upload(inputDocuments);
try
{
IndexDocumentsResult result = await searchClient.IndexDocumentsAsync(batch);
Console.WriteLine("Documents indexed successfully.");
}
catch (RequestFailedException ex)
{
Console.WriteLine($"Indexing failed: {ex.Message}");
}
}
}
public class SampleDocument
{
[SimpleField(IsKey = true, IsFilterable = true)]
public string Id { get; set; }
public string Name { get; set; }
}
}
Индексировано успешно:
Привет @user26459797, мой ответ ниже помог тебе?