Bleve 查询时如何处理特殊字符
Bleve(https://github.com/blevesearch/bleve)是一个全文检索库,用于Go语言。它支持各种查询类型。
Bleve在存储mime_type字段,有类似“image/jpeg”这样数据的时候,我们可以设置字段的Analyzer为keyword,不分词查询:
fileMapping := bleve.NewIndexMapping()
fileMapping.DefaultAnalyzer = "keyword"
docMapping := bleve.NewDocumentMapping()
// 关键字类型字段,不分词
keywordField := bleve.NewKeywordFieldMapping()
docMapping.AddFieldMappingsAt("mime_type", keywordField)
fileMapping.AddDocumentMapping("file", docMapping)
index, err = bleve.New(path, fileMapping)
if err != nil {
return err
}
可以使用下面代码查看keyword是否生效:
// 获取 mime_type 字段的所有词条
fieldDict, _ := index.FieldDict("mime_type")
defer fieldDict.Close()
for {
termEntry, err := fieldDict.Next()
if err != nil || termEntry == nil {
break
}
fmt.Printf("Term: %s\n", termEntry.Term)
}
如果结果是Term: image/jpeg,就表示映射设置成功了
当使用NewPrefixQuery时,可以保证查询的时候,对关键词使用keyword分析器,不进行分词查询
prefixQuery := bleve.NewPrefixQuery(mimeType)
prefixQuery.SetField("mime_type")
prefixSearch := bleve.NewSearchRequest(prefixQuery)
prefixResults, err := index.Search(prefixSearch)
if err != nil {
return err
}
fmt.Printf("前缀查询结果数: %d", prefixResults.Total)
0