func OpenBlevePIndexImpl(indexType, path string, restart func()) (cbgt.PIndexImpl, cbgt.Dest, error) { buf, err := ioutil.ReadFile(path + string(os.PathSeparator) + "PINDEX_BLEVE_META") if err != nil { return nil, nil, err } buf, err = bleveMappingUI.CleanseJSON(buf) if err != nil { return nil, nil, fmt.Errorf("bleve: cleanse params, err: %v", err) } bleveParams := NewBleveParams() err = json.Unmarshal(buf, bleveParams) if err != nil { return nil, nil, fmt.Errorf("bleve: parse params: %v", err) } // TODO: boltdb sometimes locks on Open(), so need to investigate, // where perhaps there was a previous missing or race-y Close(). bindex, err := bleve.Open(path) if err != nil { return nil, nil, err } return bindex, &cbgt.DestForwarder{ DestProvider: NewBleveDest(path, bindex, restart), }, nil }
func ValidateBlevePIndexImpl(indexType, indexName, indexParams string) error { if len(indexParams) <= 0 { return nil } b, err := bleveMappingUI.CleanseJSON([]byte(indexParams)) if err != nil { return err } return json.Unmarshal(b, NewBleveParams()) }
func NewBlevePIndexImpl(indexType, indexParams, path string, restart func()) (cbgt.PIndexImpl, cbgt.Dest, error) { bleveParams := NewBleveParams() if len(indexParams) > 0 { buf, err := bleveMappingUI.CleanseJSON([]byte(indexParams)) if err != nil { return nil, nil, fmt.Errorf("bleve: cleanse params, err: %v", err) } err = json.Unmarshal(buf, bleveParams) if err != nil { return nil, nil, fmt.Errorf("bleve: parse params, err: %v", err) } } kvStoreName, ok := bleveParams.Store["kvStoreName"].(string) if !ok || kvStoreName == "" { kvStoreName = bleve.Config.DefaultKVStore } kvConfig := map[string]interface{}{ "create_if_missing": true, "error_if_exists": true, } for k, v := range bleveParams.Store { kvConfig[k] = v } // Use the "metrics" wrapper KVStore if it's allowed, available // and also not already configured. kvStoreMetricsAllow := true ksmv, exists := kvConfig["kvStoreMetricsAllow"] if exists { v, ok := ksmv.(bool) if ok { kvStoreMetricsAllow = v } } if kvStoreMetricsAllow { _, exists := kvConfig["kvStoreName_actual"] if !exists && kvStoreName != "metrics" && bleveRegistry.KVStoreConstructorByName("metrics") != nil { kvConfig["kvStoreName_actual"] = kvStoreName kvStoreName = "metrics" } } bleveIndexType, ok := bleveParams.Store["indexType"].(string) if !ok || bleveIndexType == "" { bleveIndexType = bleve.Config.DefaultIndexType } bindex, err := bleve.NewUsing(path, &bleveParams.Mapping, bleveIndexType, kvStoreName, kvConfig) if err != nil { return nil, nil, fmt.Errorf("bleve: new index, path: %s,"+ " kvStoreName: %s, kvConfig: %#v, err: %s", path, kvStoreName, kvConfig, err) } pathMeta := path + string(os.PathSeparator) + "PINDEX_BLEVE_META" err = ioutil.WriteFile(pathMeta, []byte(indexParams), 0600) if err != nil { return nil, nil, err } return bindex, &cbgt.DestForwarder{ DestProvider: NewBleveDest(path, bindex, restart), }, nil }