Скалярные поля индексов
В Milvus скалярный индекс используется для ускорения метафильтрации по определенному значению не векторного поля, подобно традиционному индексу базы данных. В этом руководстве вы узнаете, как создать и настроить скалярные индексы для таких полей, как целые числа, строки и т. д.
Типы скалярного индексирования
Автоматическое индексирование: Milvus автоматически определяет тип индекса, основываясь на типе данных скалярного поля. Это подходит, когда вам не нужно контролировать конкретный тип индекса.
Пользовательское индексирование: Вы указываете точный тип индекса, например инвертированный индекс или растровый индекс. Это обеспечивает больший контроль над выбором типа индекса.
Автоматическое индексирование
Чтобы использовать автоматическое индексирование, опустите параметр index_type в строке add_index()
чтобы Milvus мог определить тип индекса на основе типа скалярного поля.
Чтобы использовать автоматическое индексирование, опустите параметр indexType в IndexParam
, чтобы Milvus мог определить тип индекса на основе типа скалярного поля.
Чтобы использовать автоматическое индексирование, опустите параметр index_type в createIndex()
, чтобы Milvus мог определить тип индекса на основе типа скалярного поля.
Сопоставления между скалярными типами данных и алгоритмами индексации по умолчанию см. в разделе Алгоритмы индексации скалярных полей.
# Auto indexing
client = MilvusClient(
uri="http://localhost:19530"
)
index_params = MilvusClient.prepare_index_params() # Prepare an empty IndexParams object, without having to specify any index parameters
index_params.add_index(
field_name="scalar_1", # Name of the scalar field to be indexed
index_type="", # Type of index to be created. For auto indexing, leave it empty or omit this parameter.
index_name="default_index" # Name of the index to be created
)
client.create_index(
collection_name="test_scalar_index", # Specify the collection name
index_params=index_params
)
import io.milvus.v2.common.IndexParam;
import io.milvus.v2.service.index.request.CreateIndexReq;
IndexParam indexParamForScalarField = IndexParam.builder()
.fieldName("scalar_1") // Name of the scalar field to be indexed
.indexName("default_index") // Name of the index to be created
.indexType("") // Type of index to be created. For auto indexing, leave it empty or omit this parameter.
.build();
List<IndexParam> indexParams = new ArrayList<>();
indexParams.add(indexParamForVectorField);
CreateIndexReq createIndexReq = CreateIndexReq.builder()
.collectionName("test_scalar_index") // Specify the collection name
.indexParams(indexParams)
.build();
client.createIndex(createIndexReq);
await client.createIndex({
collection_name: "test_scalar_index", // Specify the collection name
field_name: "scalar_1", // Name of the scalar field to be indexed
index_name: "default_index", // Name of the index to be created
index_type: "" // Type of index to be created. For auto indexing, leave it empty or omit this parameter.
})
Пользовательское индексирование
Чтобы использовать пользовательскую индексацию, укажите конкретный тип индекса с помощью параметра index_type в файле add_index()
.
Чтобы использовать пользовательскую индексацию, укажите конкретный тип индекса с помощью параметра indexType в IndexParam
.
Чтобы использовать пользовательскую индексацию, укажите конкретный тип индекса с помощью параметра index_type в createIndex()
.
В примере ниже создается инвертированный индекс для скалярного поля scalar_2
.
index_params = MilvusClient.prepare_index_params() # Prepare an IndexParams object
index_params.add_index(
field_name="scalar_2", # Name of the scalar field to be indexed
index_type="INVERTED", # Type of index to be created
index_name="inverted_index" # Name of the index to be created
)
client.create_index(
collection_name="test_scalar_index", # Specify the collection name
index_params=index_params
)
import io.milvus.v2.common.IndexParam;
import io.milvus.v2.service.index.request.CreateIndexReq;
IndexParam indexParamForScalarField = IndexParam.builder()
.fieldName("scalar_1") // Name of the scalar field to be indexed
.indexName("inverted_index") // Name of the index to be created
.indexType("INVERTED") // Type of index to be created
.build();
List<IndexParam> indexParams = new ArrayList<>();
indexParams.add(indexParamForVectorField);
CreateIndexReq createIndexReq = CreateIndexReq.builder()
.collectionName("test_scalar_index") // Specify the collection name
.indexParams(indexParams)
.build();
client.createIndex(createIndexReq);
await client.createIndex({
collection_name: "test_scalar_index", // Specify the collection name
field_name: "scalar_1", // Name of the scalar field to be indexed
index_name: "inverted_index", // Name of the index to be created
index_type: "INVERTED" // Type of index to be created
})
Методы и параметры
prepare_index_params()
Подготавливает объект IndexParams.
add_index()
Добавляет конфигурации индекса в объект IndexParams.
имя_поля(строка)
Имя скалярного поля для индексации.
index_type(строка):
Тип создаваемого скалярного индекса. Для неявного индексирования оставьте его пустым или опустите этот параметр.
Для пользовательского индексирования допустимыми значениями являются:
INVERTED: (Рекомендуется) Инвертированный индекс состоит из словаря терминов, содержащего все токенизированные слова, отсортированные в алфавитном порядке. Подробнее см. в разделе Скалярный индекс.
STL_SORT: Сортирует скалярные поля с помощью стандартного алгоритма сортировки библиотеки шаблонов. Поддерживаются только числовые поля (например, INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
Trie: Древовидная структура данных для быстрого поиска и извлечения префиксов. Поддерживает поля VARCHAR.
имя_индекса(строка)
Имя создаваемого скалярного индекса. Каждое скалярное поле поддерживает один индекс.
create_index()
Создает индекс в указанной коллекции.
имя_коллекции(строка)
Имя коллекции, для которой создается индекс.
index_params
Объект IndexParams, содержащий конфигурации индекса.
Методы и параметры
- IndexParamПодготавливает объект IndexParam.
- fieldName(String) Имя скалярного поля для индексации.
- indexName(String) Имя создаваемого скалярного индекса. Каждое скалярное поле поддерживает один индекс.
- indexType(String) Тип создаваемого скалярного индекса. Для неявного индексирования оставьте его пустым или опустите этот параметр. Для пользовательского индексирования допустимыми значениями являются:
- INVERTED: (Рекомендуется) Инвертированный индекс состоит из словаря терминов, содержащего все токенизированные слова, отсортированные в алфавитном порядке. Подробнее см. в разделе Скалярный индекс.
- STL_SORT: Сортирует скалярные поля с помощью стандартного алгоритма сортировки библиотеки шаблонов. Поддерживает булевы и числовые поля (например, INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
- Trie: Древовидная структура данных для быстрого поиска и извлечения префиксов. Поддерживает поля VARCHAR.
- CreateIndexReqСоздает индекс в указанной коллекции.
- collectionName(String) Имя коллекции, для которой создается индекс.
- indexParams(List
) Список объектов IndexParam, содержащих конфигурации индекса.
Методы и параметры
createIndex
Создает индекс в указанной коллекции.
- Имя_коллекции(строка) Имя коллекции, для которой создается индекс.
- имя_поля(строка) Имя скалярного поля для индексации.
- index_name(string) Имя создаваемого скалярного индекса. Каждое скалярное поле поддерживает один индекс.
- index_type(строка) Тип создаваемого скалярного индекса. Для неявного индексирования оставьте его пустым или опустите этот параметр. Для пользовательского индексирования допустимыми значениями являются:
- INVERTED: (рекомендуется) Инвертированный индекс состоит из словаря терминов, содержащего все токенизированные слова, отсортированные в алфавитном порядке. Подробнее см. в разделе Скалярный индекс.
- STL_SORT: Сортирует скалярные поля с помощью стандартного алгоритма сортировки библиотеки шаблонов. Поддерживаются булевы и числовые поля (например, INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
- Trie: Древовидная структура данных для быстрого поиска и извлечения префиксов. Поддерживает поля VARCHAR.
Проверка результата
Используйте метод list_indexes()
для проверки создания скалярных индексов:
Используйте метод listIndexes()
для проверки создания скалярных индексов:
Используйте метод listIndexes()
для проверки создания скалярных индексов:
client.list_indexes(
collection_name="test_scalar_index" # Specify the collection name
)
# Output:
# ['default_index','inverted_index']
import java.util.List;
import io.milvus.v2.service.index.request.ListIndexesReq;
ListIndexesReq listIndexesReq = ListIndexesReq.builder()
.collectionName("test_scalar_index") // Specify the collection name
.build();
List<String> indexNames = client.listIndexes(listIndexesReq);
System.out.println(indexNames);
// Output:
// [
// "default_index",
// "inverted_index"
// ]
res = await client.listIndexes({
collection_name: 'test_scalar_index'
})
console.log(res.indexes)
// Output:
// [
// "default_index",
// "inverted_index"
// ]
Ограничения
- В настоящее время скалярная индексация поддерживает типы данных INT8, INT16, INT32, INT64, FLOAT, DOUBLE, BOOL, VARCHAR и ARRAY, но не тип данных JSON.