mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-07 17:48:29 +08:00
enhance: support auto index type for json index (#42071)
issue: https://github.com/milvus-io/milvus/issues/42070 --------- Signed-off-by: sunby <sunbingyi1992@gmail.com>
This commit is contained in:
parent
317e7999da
commit
ffb2877992
@ -239,6 +239,8 @@ func (cit *createIndexTask) parseIndexParams(ctx context.Context) error {
|
|||||||
return getPrimitiveIndexType(dataType), nil
|
return getPrimitiveIndexType(dataType), nil
|
||||||
} else if typeutil.IsArrayType(dataType) {
|
} else if typeutil.IsArrayType(dataType) {
|
||||||
return getPrimitiveIndexType(cit.fieldSchema.ElementType), nil
|
return getPrimitiveIndexType(cit.fieldSchema.ElementType), nil
|
||||||
|
} else if typeutil.IsJSONType(dataType) {
|
||||||
|
return Params.AutoIndexConfig.ScalarJSONIndexType.GetValue(), nil
|
||||||
}
|
}
|
||||||
return "", fmt.Errorf("create auto index on type:%s is not supported", dataType.String())
|
return "", fmt.Errorf("create auto index on type:%s is not supported", dataType.String())
|
||||||
}()
|
}()
|
||||||
|
|||||||
@ -53,6 +53,7 @@ type AutoIndexConfig struct {
|
|||||||
ScalarVarcharIndexType ParamItem `refreshable:"true"`
|
ScalarVarcharIndexType ParamItem `refreshable:"true"`
|
||||||
ScalarBoolIndexType ParamItem `refreshable:"true"`
|
ScalarBoolIndexType ParamItem `refreshable:"true"`
|
||||||
ScalarFloatIndexType ParamItem `refreshable:"true"`
|
ScalarFloatIndexType ParamItem `refreshable:"true"`
|
||||||
|
ScalarJSONIndexType ParamItem `refreshable:"true"`
|
||||||
|
|
||||||
BitmapCardinalityLimit ParamItem `refreshable:"true"`
|
BitmapCardinalityLimit ParamItem `refreshable:"true"`
|
||||||
}
|
}
|
||||||
@ -166,7 +167,7 @@ func (p *AutoIndexConfig) init(base *BaseTable) {
|
|||||||
p.ScalarAutoIndexParams = ParamItem{
|
p.ScalarAutoIndexParams = ParamItem{
|
||||||
Key: "scalarAutoIndex.params.build",
|
Key: "scalarAutoIndex.params.build",
|
||||||
Version: "2.4.0",
|
Version: "2.4.0",
|
||||||
DefaultValue: `{"int": "HYBRID","varchar": "HYBRID","bool": "BITMAP", "float": "INVERTED"}`,
|
DefaultValue: `{"int": "HYBRID","varchar": "HYBRID","bool": "BITMAP", "float": "INVERTED", "json": "INVERTED"}`,
|
||||||
}
|
}
|
||||||
p.ScalarAutoIndexParams.Init(base.mgr)
|
p.ScalarAutoIndexParams.Init(base.mgr)
|
||||||
|
|
||||||
@ -207,6 +208,18 @@ func (p *AutoIndexConfig) init(base *BaseTable) {
|
|||||||
}
|
}
|
||||||
p.ScalarFloatIndexType.Init(base.mgr)
|
p.ScalarFloatIndexType.Init(base.mgr)
|
||||||
|
|
||||||
|
p.ScalarJSONIndexType = ParamItem{
|
||||||
|
Version: "2.5.12",
|
||||||
|
Formatter: func(v string) string {
|
||||||
|
m := p.ScalarAutoIndexParams.GetAsJSONMap()
|
||||||
|
if m == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return m["json"]
|
||||||
|
},
|
||||||
|
}
|
||||||
|
p.ScalarJSONIndexType.Init(base.mgr)
|
||||||
|
|
||||||
p.BitmapCardinalityLimit = ParamItem{
|
p.BitmapCardinalityLimit = ParamItem{
|
||||||
Key: "scalarAutoIndex.params.bitmapCardinalityLimit",
|
Key: "scalarAutoIndex.params.bitmapCardinalityLimit",
|
||||||
Version: "2.5.0",
|
Version: "2.5.0",
|
||||||
|
|||||||
@ -244,8 +244,11 @@ func TestCreateAutoIndexAllFields(t *testing.T) {
|
|||||||
for _, field := range schema.Fields {
|
for _, field := range schema.Fields {
|
||||||
if field.DataType == entity.FieldTypeJSON {
|
if field.DataType == entity.FieldTypeJSON {
|
||||||
idx = index.NewAutoIndex(entity.IP)
|
idx = index.NewAutoIndex(entity.IP)
|
||||||
_, err := mc.CreateIndex(ctx, client.NewCreateIndexOption(schema.CollectionName, field.Name, idx))
|
opt := client.NewCreateIndexOption(schema.CollectionName, field.Name, idx)
|
||||||
common.CheckErr(t, err, false, fmt.Sprintf("create auto index on type:%s is not supported", field.DataType))
|
opt.WithExtraParam("json_path", field.Name)
|
||||||
|
opt.WithExtraParam("json_cast_type", "varchar")
|
||||||
|
_, err := mc.CreateIndex(ctx, opt)
|
||||||
|
common.CheckErr(t, err, true)
|
||||||
} else {
|
} else {
|
||||||
if field.DataType == entity.FieldTypeBinaryVector {
|
if field.DataType == entity.FieldTypeBinaryVector {
|
||||||
idx = index.NewAutoIndex(entity.JACCARD)
|
idx = index.NewAutoIndex(entity.JACCARD)
|
||||||
|
|||||||
@ -1184,19 +1184,6 @@ class TestIndexInvalid(TestcaseBase):
|
|||||||
check_items={"err_code": 1100,
|
check_items={"err_code": 1100,
|
||||||
"err_msg": "invalid index type: ANNOY"})
|
"err_msg": "invalid index type: ANNOY"})
|
||||||
|
|
||||||
@pytest.mark.tags(CaseLabel.L1)
|
|
||||||
def test_create_index_json(self):
|
|
||||||
"""
|
|
||||||
target: test create index on json fields
|
|
||||||
method: 1.create collection, and create index
|
|
||||||
expected: create index raise an error
|
|
||||||
"""
|
|
||||||
collection_w = self.init_collection_general(prefix, True, nb=100, is_index=False)[0]
|
|
||||||
# create index on JSON/Array field is not supported
|
|
||||||
collection_w.create_index(ct.default_json_field_name,
|
|
||||||
check_task=CheckTasks.err_res,
|
|
||||||
check_items={ct.err_code: 1100,
|
|
||||||
ct.err_msg: "create auto index on type:JSON is not supported"})
|
|
||||||
|
|
||||||
@pytest.mark.tags(CaseLabel.L1)
|
@pytest.mark.tags(CaseLabel.L1)
|
||||||
def test_create_scalar_index_on_vector_field(self, scalar_index, vector_data_type):
|
def test_create_scalar_index_on_vector_field(self, scalar_index, vector_data_type):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user