Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Отображение ›Типы данных полей

Тип поля семантического текста

Эта функциональность находится в стадии бета-тестирования и может быть изменена. Дизайн и код менее зрелые, чем официальные функции GA, и предоставляются как есть без каких-либо гарантий. Бета-функции не подпадают под SLA поддержки официальных функций GA.

Тип поля semantic_text автоматически генерирует эмбеддинги для текстового содержимого с использованием конечной точки вывода. Длинные абзацы автоматически разбиваются на более мелкие части, чтобы можно было обрабатывать большие объёмы текста.

Тип поля semantic_text указывает идентификатор конечной точки вывода, который будет использоваться для генерации эмбеддингов. Вы можете создать конечную точку вывода, используя API создания API вывода. Этот тип поля и тип semantic запроса упрощают выполнение семантического поиска по вашим данным.

Если вы не укажете конечную точку вывода, поле inference_id по умолчанию будет использовать .elser-2-elasticsearch, предварительно настроенную конечную точку для службы Elasticsearch.

Используя semantic_text, вам не нужно указывать, как генерировать эмбеддинги для ваших данных или как их индексировать. Конечная точка вывода автоматически определяет генерацию эмбеддингов, индексацию и используемый запрос.

Если вы используете предварительно настроенную .elser-2-elasticsearch конечную точку, вы можете настроить semantic_text с помощью следующего API-запроса:

resp = client.indices.create(
    index="my-index-000001",
    mappings={
        "properties": {
            "inference_field": {
                "type": "semantic_text"
            }
        }
    },
)
print(resp)
const response = await client.indices.create({
  index: "my-index-000001",
  mappings: {
    properties: {
      inference_field: {
        type: "semantic_text",
      },
    },
  },
});
console.log(response);
PUT my-index-000001
{
  "mappings": {
    "properties": {
      "inference_field": {
        "type": "semantic_text"
      }
    }
  }
}

Чтобы использовать пользовательскую конечную точку вывода вместо значения по умолчанию .elser-2-elasticsearch, необходимо создать API вывода и указать его inference_id при настройке типа поля semantic_text.

resp = client.indices.create(
    index="my-index-000002",
    mappings={
        "properties": {
            "inference_field": {
                "type": "semantic_text",
                "inference_id": "my-openai-endpoint"
            }
        }
    },
)
print(resp)
const response = await client.indices.create({
  index: "my-index-000002",
  mappings: {
    properties: {
      inference_field: {
        type: "semantic_text",
        inference_id: "my-openai-endpoint",
      },
    },
  },
});
console.log(response);
PUT my-index-000002
{
  "mappings": {
    "properties": {
      "inference_field": {
        "type": "semantic_text",
        "inference_id": "my-openai-endpoint" 
      }
    }
  }
}

Указывает inference_id конечной точки вывода для генерации эмбеддингов.

Рекомендуемый способ использования semantic_text — использование отдельных конечных точек вывода для загрузки и поиска. Это гарантирует, что скорость поиска не будет затронута рабочими нагрузками загрузки, и наоборот. После создания отдельных конечных точек вывода для обоих случаев вы можете сослаться на них, используя параметры inference_id и search_inference_id при настройке отображения индекса для индекса, использующего поле semantic_text.

resp = client.indices.create(
    index="my-index-000003",
    mappings={
        "properties": {
            "inference_field": {
                "type": "semantic_text",
                "inference_id": "my-elser-endpoint-for-ingest",
                "search_inference_id": "my-elser-endpoint-for-search"
            }
        }
    },
)
print(resp)
const response = await client.indices.create({
  index: "my-index-000003",
  mappings: {
    properties: {
      inference_field: {
        type: "semantic_text",
        inference_id: "my-elser-endpoint-for-ingest",
        search_inference_id: "my-elser-endpoint-for-search",
      },
    },
  },
});
console.log(response);
PUT my-index-000003
{
  "mappings": {
    "properties": {
      "inference_field": {
        "type": "semantic_text",
        "inference_id": "my-elser-endpoint-for-ingest",
        "search_inference_id": "my-elser-endpoint-for-search"
      }
    }
  }
}

Параметры для полей semantic_text

inference_id
(Обязательно, строка) Конечная точка вывода, которая будет использоваться для генерации эмбеддингов для поля. По умолчанию используется .elser-2-elasticsearch. Этот параметр не может быть обновлён. Используйте API создания API вывода для создания конечной точки. Если search_inference_id указан, конечная точка вывода будет использоваться только при индексировании.
search_inference_id
(Необязательно, строка) Конечная точка вывода, которая будет использоваться для генерации эмбеддингов во время запроса. Вы можете обновить этот параметр, используя API обновления отображения. Используйте API создания API вывода для создания конечной точки. Если не указано, конечная точка вывода, определённая inference_id, будет использоваться как при индексировании, так и при выполнении запросов.

Проверка конечной точки вывода

inference_id не будет проверена при создании отображения, но при загрузке документов в индекс. При индексировании первого документа inference_id будет использоваться для генерации базовых структур индексации для поля.

Удаление конечной точки вывода приведёт к ошибке при загрузке документов и семантических запросов в индексах, которые определяют поля semantic_text с этой конечной точкой в качестве inference_id. Попытка удалить конечную точку вывода, которая используется в поле semantic_text, приведёт к ошибке.

Разбиение текста

Конечные точки вывода имеют ограничения на объём текста, который они могут обработать. Чтобы позволить использовать большие объёмы текста в семантическом поиске, semantic_text автоматически генерирует более мелкие фрагменты, если это необходимо, называемые фрагментами.

Каждый фрагмент будет содержать подфрагмент текста и соответствующий ему эмбеддинг, сгенерированный из него. При выполнении запросов отдельные фрагменты будут автоматически искать каждый документ, и самый релевантный фрагмент будет использован для вычисления оценки.

Дополнительные сведения о разбиении и настройке параметров разбиения см. в разделе Настройка разбиения в документации по API вывода.

semantic_text структура

После загрузки документа поле semantic_text будет иметь следующую структуру:

"inference_field": {
  "text": "these are not the droids you're looking for", 
  "inference": {
    "inference_id": "my-elser-endpoint", 
    "model_settings": { 
      "task_type": "sparse_embedding"
    },
    "chunks": [ 
      {
        "text": "these are not the droids you're looking for",
        "embeddings": {
          (...)
        }
      }
    ]
  }
}

Поле станет объектной структурой для хранения как исходного текста, так и результатов вывода.

inference_id, использованный для генерации эмбеддингов.

Настройки модели, включая тип задачи и измерения/сходство, если применимо.

Результаты вывода будут сгруппированы в фрагменты, каждый из которых будет содержать соответствующий текст и эмбеддинги.

Дополнительные сведения о семантическом поиске с использованием semantic_text и запроса semantic см. в этом учебнике.

Настройка индексации semantic_text

semantic_text использует значения по умолчанию для индексации данных на основе указанной конечной точки вывода. Это позволяет быстро начать семантический поиск, предоставляя автоматический вывод и специализированный запрос, поэтому вам не нужно предоставлять дополнительную информацию.

В случае необходимости настройки индексации данных используйте типы полей sparse_vector или dense_vector и создайте конвейер загрузки с процессором вывода для генерации эмбеддингов. Этот учебник расскажет вам об этом процессе. В этих случаях — когда вы используете типы полей sparse_vector или dense_vector вместо типа поля semantic_text для настройки индексации — использование semantic_query запроса для запроса данных поля не поддерживается.

Обновления полей semantic_text

Обновления, использующие скрипты, не поддерживаются для индекса, содержащего поле semantic_text. Даже если скрипт предназначен для полей, не являющихся semantic_text, обновление завершится ошибкой, если индекс содержит поле semantic_text.

copy_to поддержка

Тип поля semantic_text может быть целью copy_to полей. Это означает, что вы можете использовать одно поле semantic_text для сбора значений других полей для семантического поиска. Каждое значение имеет свои эмбеддинги, вычисляемые отдельно; каждое значение поля является отдельным набором фрагментов(ов) в результирующих эмбеддингах.

Это накладывает ограничение на запросы и конвейеры загрузки, которые обновляют документы с полями semantic_text. В этих случаях все поля, которые копируются в поле semantic_text, включая значение поля semantic_text, должны иметь значение, чтобы обеспечить правильное вычисление каждого эмбеддинга.

Например, следующее отображение:

PUT test-index
{
    "mappings": {
        "properties": {
            "infer_field": {
                "type": "semantic_text",
                "inference_id": ".elser-2-elasticsearch"
            },
            "source_field": {
                "type": "text",
                "copy_to": "infer_field"
            }
        }
    }
}

Требует следующего запроса обновления в массиве, чтобы убедиться, что infer_field обновлено правильно:

PUT test-index/_bulk
{"update": {"_id": "1"}}
{"doc": {"infer_field": "updated inference field", "source_field": "updated source field"}}

Обратите внимание, что и поле semantic_text, и исходное поле обновляются в запросе массива.

Ограничения

Типы полей semantic_text имеют следующие ограничения:

  • Поля semantic_text в настоящее время не поддерживаются как элементы вложенных полей.
  • Поля semantic_text в настоящее время не могут быть установлены в рамках динамических шаблонов.
  • Поля semantic_text не могут быть определены как множественные поля другого поля, и они не могут содержать другие поля в качестве множественных полей.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/semantic-text.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API