Skip to content

Instantly share code, notes, and snippets.

@onionltd
Last active February 2, 2020 14:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save onionltd/ff7970b1ccf8ee27f0b352599a4520cf to your computer and use it in GitHub Desktop.
Save onionltd/ff7970b1ccf8ee27f0b352599a4520cf to your computer and use it in GitHub Desktop.
func buildIndexMapping() mapping.IndexMapping {
indexMapping := bleve.NewIndexMapping()
indexMapping.TypeField = "type"
indexMapping.DefaultAnalyzer = en.AnalyzerName
if err := indexMapping.AddCustomAnalyzer("custom_alt", map[string]interface{}{
"type": custom.Name,
"tokenizer": unicode.Name,
"token_filters": []string{
detectlang.FilterName,
en.PossessiveName,
apostrophe.Name,
lowercase.Name,
camelcase.Name,
//elision.Name,
en.StopName,
porter.Name,
},
}); err != nil {
panic(err)
}
customTextFieldMapping := bleve.NewTextFieldMapping()
customTextFieldMapping.Analyzer = "custom_alt"
// a generic reusable mapping for english text
englishTextFieldMapping := bleve.NewTextFieldMapping()
englishTextFieldMapping.Analyzer = en.AnalyzerName
// a generic reusable mapping for keyword text
keywordFieldMapping := bleve.NewTextFieldMapping()
keywordFieldMapping.Analyzer = keyword.Name
keyMapping := bleve.NewDocumentMapping()
keyMapping.AddFieldMappingsAt("id", keywordFieldMapping)
keyMapping.AddFieldMappingsAt("fingerprint", keywordFieldMapping)
keyMapping.AddFieldMappingsAt("user_id", englishTextFieldMapping)
serviceMapping := bleve.NewDocumentMapping()
serviceMapping.AddFieldMappingsAt("name", customTextFieldMapping)
serviceMapping.AddFieldMappingsAt("description", englishTextFieldMapping)
serviceMapping.AddFieldMappingsAt("urls", keywordFieldMapping)
serviceMapping.AddSubDocumentMapping("public_keys", keyMapping)
indexMapping.AddDocumentMapping("service", serviceMapping)
indexMapping.AddDocumentMapping("key", keyMapping)
if err := indexMapping.Validate(); err != nil {
panic(err)
}
return indexMapping
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment