func (schema *Schema) createLucySchema() { lucySchema := C.LucySchemaNew() for _, item := range schema.PlanItems { var specType *C.CFishObj if item.Type == FullTextType { var language *C.CFishCharBuf if item.Options != nil && item.Options.Language != "" { language = cb_newf(item.Options.Language) } else { language = cb_newf("en") } analyzer := C.LucyEasyAnalyzerNew(language) specType = C.LucyFullTextTypeNew(analyzer) // TODO: come up with a better way to handle options. // This isn't very friendly. if item.Options != nil { specType = C.LucyFullTextTypeInitOptions(specType, analyzer, (C.float)(item.Options.Boost), (C.bool)(item.Options.Indexed), (C.bool)(item.Options.Stored), (C.bool)(item.Options.Sortable), (C.bool)(item.Options.Highlightable), ) } C.DECREF(language) C.DECREF(analyzer) } else if item.Type == StringType { specType = C.LucyStringTypeNew() if item.Options != nil { specType = C.LucyStringTypeInitOptions(specType, (C.float)(item.Options.Boost), (C.bool)(item.Options.Indexed), (C.bool)(item.Options.Stored), (C.bool)(item.Options.Sortable), ) } } else if item.Type == BlobType { isStored := (C.bool)(false) if item.Options != nil && item.Options.Stored { isStored = (C.bool)(true) } specType = C.LucyBlobTypeNew(isStored) // need to send []cfish_byte castable value panic("BlobType not supported yet") } else { panic("Type not supported yet") } fieldName := cb_newf(item.Field) C.LucySchemaSpecField(lucySchema, fieldName, specType) C.DECREF(fieldName) C.DECREF(specType) } schema.lucySchema = lucySchema }
func (schema *Schema) AddField(field *Field) { schema.Fields = append(schema.Fields, field) var specType *C.lucy_FieldType defer C.DECREF((*C.cfish_Obj)(specType)) name := cb_newf(field.Name) defer C.DECREF((*C.cfish_Obj)(name)) switch field.IndexType { case FullTextType: specType = fullTextSpecType(field) case StringType: specType = stringSpecType(field) default: panic("Specified IndexType not supported yet") } C.LucySchemaSpecField(schema.lucySchema, name, specType) }