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

本文为原创文章,转载请注明出处,欢迎访问作者网站(和而不同)

发表评论

error: Content is protected !!