2024-05-10 10:01:30 +00:00
|
|
|
// Licensed to the LF AI & Data foundation under one
|
|
|
|
// or more contributor license agreements. See the NOTICE file
|
|
|
|
// distributed with this work for additional information
|
|
|
|
// regarding copyright ownership. The ASF licenses this file
|
|
|
|
// to you under the Apache License, Version 2.0 (the
|
|
|
|
// "License"); you may not use this file except in compliance
|
|
|
|
// with the License. You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
|
|
|
package index
|
|
|
|
|
|
|
|
import "strconv"
|
|
|
|
|
|
|
|
const (
|
|
|
|
scannNlistKey = `nlist`
|
|
|
|
scannWithRawDataKey = `with_raw_data`
|
2024-12-17 12:52:44 +00:00
|
|
|
scannNProbeKey = `nprobe`
|
|
|
|
scannReorderKKey = `reorder_k`
|
2024-05-10 10:01:30 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type scannIndex struct {
|
|
|
|
baseIndex
|
|
|
|
|
|
|
|
nlist int
|
|
|
|
withRawData bool
|
|
|
|
}
|
|
|
|
|
|
|
|
func (idx scannIndex) Params() map[string]string {
|
|
|
|
return map[string]string{
|
2024-07-01 15:54:06 +00:00
|
|
|
MetricTypeKey: string(idx.metricType),
|
|
|
|
IndexTypeKey: string(SCANN),
|
|
|
|
scannNlistKey: strconv.Itoa(idx.nlist),
|
|
|
|
scannWithRawDataKey: strconv.FormatBool(idx.withRawData),
|
2024-05-10 10:01:30 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-07-01 15:54:06 +00:00
|
|
|
func NewSCANNIndex(metricType MetricType, nlist int, withRawData bool) Index {
|
2024-07-05 01:10:09 +00:00
|
|
|
return scannIndex{
|
2024-05-10 10:01:30 +00:00
|
|
|
baseIndex: baseIndex{
|
|
|
|
metricType: metricType,
|
2024-07-01 15:54:06 +00:00
|
|
|
indexType: SCANN,
|
2024-05-10 10:01:30 +00:00
|
|
|
},
|
2024-07-08 23:58:14 +00:00
|
|
|
nlist: nlist,
|
2024-07-05 01:10:09 +00:00
|
|
|
withRawData: withRawData,
|
2024-05-10 10:01:30 +00:00
|
|
|
}
|
|
|
|
}
|
2024-12-17 12:52:44 +00:00
|
|
|
|
|
|
|
type scannAnnParam struct {
|
|
|
|
baseAnnParam
|
|
|
|
nprobe int
|
|
|
|
reorderK int
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewSCANNAnnParam(nprobe int, reorderK int) scannAnnParam {
|
|
|
|
return scannAnnParam{
|
|
|
|
baseAnnParam: baseAnnParam{
|
|
|
|
params: make(map[string]any),
|
|
|
|
},
|
|
|
|
nprobe: nprobe,
|
|
|
|
reorderK: reorderK,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ap scannAnnParam) Params() map[string]any {
|
|
|
|
result := ap.baseAnnParam.params
|
|
|
|
result[scannNProbeKey] = ap.nprobe
|
|
|
|
result[scannReorderKKey] = ap.reorderK
|
|
|
|
return result
|
|
|
|
}
|