Indeksowanie obiektów blob i plików w celu utworzenia wielu dokumentów wyszukiwania
Dotyczy: indeksatory obiektów blob, indeksatory plików
Domyślnie indeksator traktuje zawartość obiektu blob lub pliku jako pojedynczy dokument wyszukiwania. Jeśli chcesz bardziej szczegółową reprezentację w indeksie wyszukiwania, możesz ustawić wartości parsingMode , aby utworzyć wiele dokumentów wyszukiwania z jednego obiektu blob lub pliku. Wartości parsingMode , które powodują wiele dokumentów wyszukiwania, obejmują delimitedText
(w przypadku plików CSV) i jsonArray
jsonLines
(dla formatu JSON).
W przypadku korzystania z dowolnego z tych trybów analizowania nowe dokumenty wyszukiwania, które pojawiają się, muszą mieć unikatowe klucze dokumentów i pojawia się problem podczas określania, skąd pochodzi ta wartość. Obiekt blob nadrzędny ma co najmniej jedną unikatową wartość w postaci metadata_storage_path property
elementu , ale jeśli współtworzy tę wartość do więcej niż jednego dokumentu wyszukiwania, klucz nie jest już unikatowy w indeksie.
Aby rozwiązać ten problem, indeksator obiektów blob generuje unikatowy AzureSearch_DocumentKey
identyfikator każdego podrzędnego dokumentu wyszukiwania utworzonego na podstawie pojedynczego obiektu nadrzędnego obiektu blob. W tym artykule wyjaśniono, jak działa ta funkcja.
Klucz dokumentu jeden do wielu
Każdy dokument w indeksie jest jednoznacznie identyfikowany przez klucz dokumentu. Jeśli nie określono trybu analizowania i jeśli w definicji indeksatora nie ma jawnego mapowania pól dla klucza dokumentu wyszukiwania, indeksator obiektów blob automatycznie mapuje metadata_storage_path property
element jako klucz dokumentu. To domyślne mapowanie gwarantuje, że każdy obiekt blob jest wyświetlany jako odrębny dokument wyszukiwania i zapisuje krok konieczności samodzielnego utworzenia tego mapowania pól (zwykle tylko pola o identycznych nazwach i typach są automatycznie mapowane).
W scenariuszu dokumentu wyszukiwania jeden do wielu niejawny klucz dokumentu oparty na metadata_storage_path property
nie jest możliwy. Aby obejść ten problem, usługa Azure AI Search może wygenerować klucz dokumentu dla każdej jednostki wyodrębnionej z obiektu blob. Wygenerowany klucz ma nazwę AzureSearch_DocumentKey
i jest dodawany do każdego dokumentu wyszukiwania. Indeksator śledzi "wiele dokumentów" utworzonych na podstawie każdego obiektu blob i może kierować aktualizacje do indeksu wyszukiwania, gdy dane źródłowe zmieniają się wraz z upływem czasu.
Domyślnie, gdy nie określono jawnych mapowań pól dla pola indeksu klucza, AzureSearch_DocumentKey
element jest do niego mapowany przy użyciu base64Encode
funkcji mapowania pól.
Przykład
Przyjmij definicję indeksu z następującymi polami:
id
temperature
pressure
timestamp
Kontener obiektów blob ma obiekty blob z następującą strukturą:
Blob1.json
{ "temperature": 100, "pressure": 100, "timestamp": "2024-02-13T00:00:00Z" }
{ "temperature" : 33, "pressure" : 30, "timestamp": "2024-02-14T00:00:00Z" }
Blob2.json
{ "temperature": 1, "pressure": 1, "timestamp": "2023-01-12T00:00:00Z" }
{ "temperature" : 120, "pressure" : 3, "timestamp": "2022-05-11T00:00:00Z" }
Podczas tworzenia indeksatora i ustawiania parametru parsingMode na jsonLines
— bez określania jawnych mapowań pól dla pola klucza, następujące mapowanie jest stosowane niejawnie.
{
"sourceFieldName" : "AzureSearch_DocumentKey",
"targetFieldName": "id",
"mappingFunction": { "name" : "base64Encode" }
}
Ta konfiguracja powoduje uściślanie kluczy dokumentów, podobnie jak na poniższej ilustracji (identyfikator zakodowany w formacie base64 skrócił się do zwięzłości).
ID | temperature | ciśnienie | timestamp |
---|---|---|---|
aHR0 ... YjEuanNvbjsx | 100 | 100 | 2024-02-13T00:00:00Z |
aHR0 ... YjEuanNvbjsy | 33 | 30 | 2024-02-14T00:00:00Z |
aHR0 ... YjIuanNvbjsx | 1 | 1 | 2023-01-12T00:00:00Z |
aHR0 ... YjIuanNvbjsy | 120 | 3 | 2022-05-11T00:00:00Z |
Niestandardowe mapowanie pól dla pola klucza indeksu
Zakładając, że ta sama definicja indeksu co w poprzednim przykładzie, załóżmy, że kontener obiektów blob ma obiekty blob z następującą strukturą:
Blob1.json
recordid, temperature, pressure, timestamp
1, 100, 100,"2024-02-13T00:00:00Z"
2, 33, 30,"2024-02-14T00:00:00Z"
Blob2.json
recordid, temperature, pressure, timestamp
1, 1, 1,"20123-01-12T00:00:00Z"
2, 120, 3,"2022-05-11T00:00:00Z"
Podczas tworzenia indeksatora z delimitedText
parsingMode może wydawać się naturalne, aby skonfigurować funkcję mapowania pól w polu klucza w następujący sposób:
{
"sourceFieldName" : "recordid",
"targetFieldName": "id"
}
Jednak to mapowanie nie spowoduje wyświetlania czterech dokumentów w indeksie, ponieważ recordid
pole nie jest unikatowe w obiektach blob. W związku z tym zalecamy użycie niejawnego mapowania pól zastosowanego z AzureSearch_DocumentKey
właściwości do pola indeksu klucza dla trybów analizowania "jeden do wielu".
Jeśli chcesz skonfigurować jawne mapowanie pól, upewnij się, że pole źródłowe jest odrębne dla każdej jednostki we wszystkich obiektach blob.
Uwaga
Podejście stosowane przez AzureSearch_DocumentKey
zapewnienie unikatowości dla wyodrębnionej jednostki podlega zmianie i dlatego nie należy polegać na jej wartości dla potrzeb aplikacji.
Określanie pola klucza indeksu w danych
Zakładając, że ta sama definicja indeksu co w poprzednim przykładzie i parsingMode jest ustawiona na jsonLines
wartość bez określania jawnych mapowań pól, tak aby mapowania wyglądały jak w pierwszym przykładzie, załóżmy, że kontener obiektów blob ma obiekty blob z następującą strukturą:
Blob1.json
id, temperature, pressure, timestamp
1, 100, 100,"2024-02-13T00:00:00Z"
2, 33, 30,"2024-02-14T00:00:00Z"
Blob2.json
id, temperature, pressure, timestamp
1, 1, 1,"2023-01-12T00:00:00Z"
2, 120, 3,"2022-05-11T00:00:00Z"
Zwróć uwagę, że każdy dokument zawiera id
pole zdefiniowane jako key
pole w indeksie. W takim przypadku, mimo że zostanie wygenerowany unikatowy AzureSearch_DocumentKey
dokument, nie będzie on używany jako "klucz" dla dokumentu. Zamiast tego wartość id
pola zostanie zamapowana na key
pole
Podobnie jak w poprzednim przykładzie, to mapowanie nie spowoduje wyświetlania czterech dokumentów w indeksie, ponieważ id
pole nie jest unikatowe w obiektach blob. W takim przypadku dowolny wpis JSON, który określa id
, spowoduje scalenie istniejącego dokumentu zamiast przekazania nowego dokumentu, a stan indeksu będzie odzwierciedlać najnowszy wpis odczytu z określonym id
elementem .
Następne kroki
Jeśli nie znasz jeszcze podstawowej struktury i przepływu pracy indeksowania obiektów blob, najpierw zapoznaj się z tematem Indeksowanie usługi Azure Blob Storage za pomocą usługi Azure AI Search . Aby uzyskać więcej informacji na temat trybów analizowania dla różnych typów zawartości obiektów blob, zapoznaj się z następującymi artykułami.