Azure AI Search Мультииндексный/условный семантический поиск

Я работаю с Azure OpenAI над созданием чат-бота для извлечения данных из огромных текстовых данных предприятия. В моей редакционной компании я столкнулся с проблемой, связанной с поиском Azure AI. Изначально все данные находились в одном индексе, но теперь мне нужно разделить их на три разных индекса из-за требований условного поиска. Вот подробности:

  • Индекс 1: Индекс биологии (частный, Франция)
  • Индекс 2: Индекс техники и технологий (EN)
  • Индекс 3: Индекс искусства и архитектуры (США, Великобритания)

Эти индексы содержат различные источники данных и публикации, и их темы совпадают. Например, при запросах на темы, связанные с анатомией, такие как зрение, сердечно-сосудистые заболевания или терапия гормоном роста, я хочу, чтобы эти запросы и связанные с ними биологические темы извлекали данные исключительно из индекса биологии (индекс 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"
  }
]

не могли бы поделиться индексом, индексатором и выводом индекса с помощью { "search": "*" } в текстовом формате в приведенном выше вопросе

Sampath 11.06.2024 07:16

Привет, Сампат, где я могу найти эту информацию?

R_Student 11.06.2024 15:08

Для индексов перейдите в раздел «Индексы», выберите «Индексы» и нажмите «Редактировать JSON». Для вывода индексов перейдите в раздел «Индексы», нажмите «Обозреватель поиска», а затем нажмите «Поиск». Для индексаторов перейдите в раздел «Индексаторы», выберите индексаторы и нажмите «Определение индексатора».

Sampath 11.06.2024 16:53

Конечно, я только что добавил это в свой пост, есть ли способ добиться этого с помощью поля editorial_house? Я просто заметил, что в определении индекса есть какой-то приоритет.

R_Student 11.06.2024 19:03

Не могли бы вы также поделиться остальными подробностями?

Sampath 12.06.2024 02:11

пожалуйста, поделитесь также выводом индексов

Sampath 12.06.2024 03:09

какой формат исходных данных? это json? добавьте пример данных.

JayashankarGS 12.06.2024 12:14

Да! Я только что добавил пример данных, большое спасибо за ваш интерес

R_Student 12.06.2024 14:51

Вы сказали, что у вас есть три индекса. Это комбинация всех трех данных, верно?

JayashankarGS 13.06.2024 05:17

Да, это правильно

R_Student 13.06.2024 13:18

Обратная связь: ваши вопросы слишком болтливы для Stack Overflow. В идеале мы хотим, чтобы вопросы (и ответы) были написаны как документация, без тонкостей, вежливости и разговорного материала. Пожалуйста, по возможности, делайте свои посты краткими и по существу.

halfer 22.06.2024 22:48
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
11
191
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, как вы сказали, запрос с несколькими индексами невозможен. А для вашей проблемы ниже приведен возможный подход, которому вы можете следовать.

Вы сказали, что создаете 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 для дальнейших запросов.

Другие вопросы по теме