#azure #azure-cognitive-search
#azure #azure-когнитивный поиск
Вопрос:
Ниже приведены некоторые данные, которые я помещаю в поисковый индекс Azure:
Я мог бы использовать эту жесткую структуру, но она должна поддерживать разные типы данных. Я мог бы продолжать добавлять поля — например, Field4, Field5, … но мне было интересно, могу ли я иметь что-то вроде поля JSON? Таким образом, индекс может быть смоделирован следующим образом:
[
{
"entityId":"dba656d3-f044-4cc0-9930-b5e77e664a8f",
"entityName":"character",
"data":{
"name":"Luke Skywalker",
"role":"Jedi"
}
},
{
"entityId":"b37bf987-0978-4fc4-9a51-b02b4a5eed53",
"entityName":"character",
"data":{
"name":"C-3PO",
"role":"Droid"
}
},
{
"entityId":"b161b9dc-552b-4744-b2d7-4584a9673669",
"entityName":"film",
"data":{
"name":"A new hope"
}
},
{
"entityId":"e59acdaf-5bcd-4536-a8e9-4f3502cc7d85",
"entityName":"film",
"data":{
"name":"The Empire Strikes Back"
}
},
{
"entityId":"00501b4a-5279-41e9-899d-a914ddcc562e",
"entityName":"vehicle",
"data":{
"name":"Sand Crawler",
"model":"Digger Crawler",
"manufacturer":"Corellia Mining Corporation"
}
},
{
"entityId":"fe815cb6-b03c-401e-a871-396f2cd3eaba",
"entityName":"vehicle",
"data":{
"name":"TIE/LN starfighter",
"model":"win Ion Engine/Ln Starfighter",
"manufacturer":"Sienar Fleet Systems"
}
}
]
Я знаю, что могу поместить JSON в строковое поле, но это негативно скажется на сопоставлении результатов поиска, а также на фильтрации.
Возможно ли это в Azure search или есть другой способ выполнить такого рода требования?
Ответ №1:
См. Статью Как моделировать сложные типы данных. Я полагаю, что данные примера отеля хорошо соответствуют вашему варианту использования. Если ваши разные объекты имеют разные наборы свойств, вы можете создать «сложный тип», аналогичный приведенному ниже примеру адреса или удобства.
Вы можете добавлять новые подполя в сложное поле в любое время без необходимости перестроения индекса. Например, допускается добавление «почтового индекса» в адрес или «Удобства» в номера, точно так же, как добавление поля верхнего уровня в индекс.
{
"HotelId": "1",
"HotelName": "Secret Point Motel",
"Description": "Ideally located on the main commercial artery of the city in the heart of New York.",
"Tags": ["Free wifi", "on-site parking", "indoor pool", "continental breakfast"]
"Address": {
"StreetAddress": "677 5th Ave",
"City": "New York",
"StateProvince": "NY"
},
"Rooms": [
{
"Description": "Budget Room, 1 Queen Bed (Cityside)",
"RoomNumber": 1105,
"BaseRate": 96.99,
},
{
"Description": "Deluxe Room, 2 Double Beds (City View)",
"Type": "Deluxe Room",
"BaseRate": 150.99,
}
. . .
]
}