Я работаю с Azure OpenAI над созданием чат-бота для извлечения данных из огромных текстовых данных предприятия. В моей редакционной компании я столкнулся с проблемой, связанной с поиском Azure AI. Изначально все данные находились в одном индексе, но теперь мне нужно разделить их на три разных индекса из-за требований условного поиска. Вот подробности:
Эти индексы содержат различные источники данных и публикации, и их темы совпадают. Например, при запросах на темы, связанные с анатомией, такие как зрение, сердечно-сосудистые заболевания или терапия гормоном роста, я хочу, чтобы эти запросы и связанные с ними биологические темы извлекали данные исключительно из индекса биологии (индекс 2).
Мой код Python эффективно извлекает точные данные (с помощью одного-единственного индекса), но я ищу решение в Azure AI Search, чтобы расставлять приоритеты для определенных индексов на основе контекста запроса.
Например:
Запросы, связанные с биологией, должны получать данные исключительно из индексов 1 и 2.
Запросы, связанные с технологиями, наукой о данных и искусственным интеллектом, должны получать данные исключительно из индекса 2.
Я не встречал службы или репозитория GitHub, которые напрямую отвечали бы этому конкретному требованию. Я знаю, что Azure не поддерживает многоиндексный поиск.
Как я могу найти решение или обходной путь?
Это код, который я использую для RAG
index_name = 'indx-editorials-bio-fr-old'
# Query to execute
query = 'Please retrieve publications from editorial certified houses covering cardiovascular diseases'
# Function to execute the query with semantic ranking
def execute_query_with_semantic_ranking():
try:
# Create a SearchClient for the index
credential = AzureKeyCredential(admin_key)
client = SearchClient(endpoint=endpoint, index_name=index_name, credential=credential)
# Execute the query with semantic ranking
results = client.search(search_text=query, semantic_fields=["content", "title"])
# Print the results
print(f"Results from index '{index_name}' with semantic ranking:")
for result in results:
print(result)
print()
except Exception as e:
print(f"Error querying index '{index_name}' with semantic ranking: {e}")
# Execute the query with semantic ranking
execute_query_with_semantic_ranking()
Определение индекса:
{
"@odata.context": "search.windows.net",
"@odata.etag": "\"123547858WRF\"",
"name": "all_articles_index",
"defaultScoringProfile": null,
"fields": [
{
"name": "content",
"type": "Edm.String",
"searchable": true,
"filterable": true,
"retrievable": true,
"stored": true,
"sortable": true,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"normalizer": null,
"dimensions": null,
"vectorSearchProfile": null,
"vectorEncoding": null,
"synonymMaps": []
},
{
"name": "title",
"type": "Edm.String",
"searchable": true,
"filterable": true,
"retrievable": true,
"stored": true,
"sortable": true,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"normalizer": null,
"dimensions": null,
"vectorSearchProfile": null,
"vectorEncoding": null,
"synonymMaps": []
},
{
"name": "doi",
"type": "Edm.String",
"searchable": false,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"normalizer": null,
"dimensions": null,
"vectorSearchProfile": null,
"vectorEncoding": null,
"synonymMaps": []
},
{
"name": "editorial_house",
"type": "Edm.String",
"searchable": false,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"normalizer": null,
"dimensions": null,
"vectorSearchProfile": null,
"vectorEncoding": null,
"synonymMaps": []
},
{
"name": "metadata_storage_path",
"type": "Edm.String",
"searchable": false,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": true,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"normalizer": null,
"dimensions": null,
"vectorSearchProfile": null,
"vectorEncoding": null,
"synonymMaps": []
}
],
"scoringProfiles": [],
"corsOptions": null,
"suggesters": [],
"analyzers": [],
"normalizers": [],
"tokenizers": [],
"tokenFilters": [],
"charFilters": [],
"encryptionKey": null,
"similarity": {
"@odata.type": "BM25Similarity",
"k1": null,
"b": null
},
"semantic": {
"defaultConfiguration": null,
"configurations": [
{
"name": "article-semantic",
"prioritizedFields": {
"titleField": {
"fieldName": "title"
},
"prioritizedContentFields": [
{
"fieldName": "content"
}
],
"prioritizedKeywordsFields": []
}
}
]
},
"vectorSearch": null
}
Образец данных
[
{
"content": "This article explores the potential of AI to revolutionize genomics, highlighting recent breakthroughs and future prospects.",
"title": "The Impact of AI on Genomics: Recent Breakthroughs and Future Prospects",
"doi": "10.1234/ai-bio-2024-001",
"editorial_house": "BioTech Publishers",
"metadata_storage_path": "/articles/2024/ai-bio-2024-001"
},
{
"content": "In this study, we discuss the integration of machine learning in drug discovery processes, focusing on its benefits and challenges.",
"title": "Machine Learning in Drug Discovery: Benefits and Challenges",
"doi": "10.1234/ai-bio-2024-002",
"editorial_house": "BioTech Publishers",
"metadata_storage_path": "/articles/2024/ai-bio-2024-002"
},
{
"content": "This paper examines the role of AI in ecological monitoring, presenting case studies on wildlife conservation efforts.",
"title": "AI in Ecological Monitoring: Wildlife Conservation Case Studies",
"doi": "10.1234/ai-bio-2024-003",
"editorial_house": "BioTech Publishers",
"metadata_storage_path": "/articles/2024/ai-bio-2024-003"
},
{
"content": "The article reviews advances in bioinformatics driven by AI, with a focus on data analysis techniques and their applications.",
"title": "Advances in Bioinformatics: AI-Driven Data Analysis Techniques",
"doi": "10.1234/ai-bio-2024-004",
"editorial_house": "BioTech Publishers",
"metadata_storage_path": "/articles/2024/ai-bio-2024-004"
},
{
"content": "This study highlights the use of AI in personalized medicine, detailing the technology's impact on treatment plans and patient outcomes.",
"title": "Personalized Medicine: AI's Role in Tailoring Treatment Plans",
"doi": "10.1234/ai-bio-2024-005",
"editorial_house": "BioTech Publishers",
"metadata_storage_path": "/articles/2024/ai-bio-2024-005"
}
]
Привет, Сампат, где я могу найти эту информацию?
Для индексов перейдите в раздел «Индексы», выберите «Индексы» и нажмите «Редактировать JSON». Для вывода индексов перейдите в раздел «Индексы», нажмите «Обозреватель поиска», а затем нажмите «Поиск». Для индексаторов перейдите в раздел «Индексаторы», выберите индексаторы и нажмите «Определение индексатора».
Конечно, я только что добавил это в свой пост, есть ли способ добиться этого с помощью поля editorial_house? Я просто заметил, что в определении индекса есть какой-то приоритет.
Не могли бы вы также поделиться остальными подробностями?
пожалуйста, поделитесь также выводом индексов
какой формат исходных данных? это json? добавьте пример данных.
Да! Я только что добавил пример данных, большое спасибо за ваш интерес
Вы сказали, что у вас есть три индекса. Это комбинация всех трех данных, верно?
Да, это правильно
Обратная связь: ваши вопросы слишком болтливы для Stack Overflow. В идеале мы хотим, чтобы вопросы (и ответы) были написаны как документация, без тонкостей, вежливости и разговорного материала. Пожалуйста, по возможности, делайте свои посты краткими и по существу.


Да, как вы сказали, запрос с несколькими индексами невозможен. А для вашей проблемы ниже приведен возможный подход, которому вы можете следовать.
Вы сказали, что создаете 3 новых индекса, кроме того, вам также необходимо иметь 4-й индекс со всем вашим контентом, темой и именем индекса в качестве полей.
Образец данных
{
"index_name":"Biology Index",
"content":"All of your content having the topic about biology"
},
{
"index_name":"Engineering and Technology Index",
"content":"All of your content having the topic about Engineering and Technology"
},
{
"index_name":"Art and Architecture Index",
"content":"All of your content having the topic about Art and Architecture Index"
}
Итак, создайте четвертый индекс с приведенными выше примерами данных. Если у вас есть более одного документа по каждой теме, объедините их и добавьте в поле контента.
Затем выполните запрос с входными данными по этому 4-му индексу и получите имя индекса из результатов, которое имеет наибольшее значение search.score в результатах, и используйте его в своем коде Python для дальнейших запросов.
не могли бы поделиться индексом, индексатором и выводом индекса с помощью
{ "search": "*" }в текстовом формате в приведенном выше вопросе