知识分享之Golang——Bleve中如何定义一个自定义文档映射对象

简介: 知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。知识分享系列目前包含Java、Golang、Linux、Docker等等。

知识分享之Golang——Bleve中如何定义一个自定义文档映射对象

背景

知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。

知识分享系列目前包含Java、Golang、Linux、Docker等等。

开发环境

内容

在日常使用全文检索时难免需要使用到一些自定义的字段,这时如何来进行快速存储这些字段呢?在bleve中可以使用Field特性进行实现,下面我们先进行一个简单的实现

// 获取一个自定义文档映射对象,这样便于我们对于其增加一些特定的field
func getDocumentMapping() *mapping.DocumentMapping {
    // 首先我们创建一个默认文档集合
    document := bleve.NewDocumentMapping()
    // 给我们的文档映射增加一个作者
    authorName := bleve.NewTextFieldMapping()
    document.AddFieldMappingsAt("authorName", authorName)
    // 增加一个创建时间
    createTime := bleve.NewDateTimeFieldMapping()
    document.AddFieldMappingsAt("createTime", createTime)
    // 增加一个文档名称
    title := bleve.NewTextFieldMapping()
    document.AddFieldMappingsAt("title", title)
    return document
}

通过这段代码我们就可以获取到一个DocumentMapping 对象,这个文档集合中具有authorName、createTime、title这三个字段,
我们如果需要对于某个字段设定为一些特性,可以使用如下代码:
Index - 索引该字段,默认为true
Store - 存储此字段,默认为true
IncludeTermVectors - 包含此字段的术语向量,默认为true
IncludeInAll - 在名为_all的复合字段中包含此字段,默认值为true

// 给我们的文档映射增加一个作者
    authorName := bleve.NewTextFieldMapping()
        authorName.Index = false
    document.AddFieldMappingsAt("authorName", authorName)

例如上面这段代码,authorName这个字段将不再作为索引,即当使用该字段索引时是无效的。

至此我们就定义好了一个自定义的文档集合,在我们bleve.New时可以将该对象放入进去即可在索引存储时使用了。

本文声明:

5330898-d1c72b6c90e378f3.png
知识共享许可协议
本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。

目录
相关文章
|
11月前
|
关系型数据库 Go PostgreSQL
golang pgx自定义PostgreSQL类型
golang的pgx驱动提供了大约70种PostgreSQL类型支持,但还是有一些类型没有涵盖,本文介绍如何自己编写代码支持特殊的类型。
|
2月前
|
JSON Go 数据格式
Golang 对象深拷贝的方案以及性能比较
文章探讨了在Go语言中实现对象深拷贝的三种方法:使用gob序列化、JSON序列化和定制化拷贝,并对比了它们在性能和代码复杂度方面的优劣,建议根据具体需求选择最适合的方法。
31 0
|
1月前
|
Go
Golang语言之映射(map)快速入门篇
这篇文章是关于Go语言中映射(map)的快速入门教程,涵盖了map的定义、创建方式、基本操作如增删改查、遍历、嵌套map的使用以及相关练习题。
26 5
|
1月前
|
Go
Golang语言基础之标识符和变量定义
这篇文章详细介绍了Go语言中标识符和变量的定义、命名规则、关键字、变量类型、声明方式、作用域等基础知识。
16 3
|
5月前
|
Go
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
【4月更文挑战第21天】Go语言函数是代码组织的基本单元,用于封装可重用逻辑。本文介绍了函数定义(包括基本形式、命名、参数列表和多返回值)、调用以及匿名函数与闭包。在函数定义时,注意参数命名和注释,避免参数顺序混淆。在调用时,要检查并处理多返回值中的错误。理解闭包原理,小心处理外部变量引用,以提升代码质量和可维护性。通过实践和示例,能更好地掌握Go语言函数。
77 1
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
|
5月前
|
Go 开发者
Golang深入浅出之-Go语言结构体(struct)入门:定义与使用
【4月更文挑战第22天】Go语言中的结构体是构建复杂数据类型的关键,允许组合多种字段。本文探讨了结构体定义、使用及常见问题。结构体定义如`type Person struct { Name string; Age int; Address Address }`。问题包括未初始化字段的默认值、比较含不可比较字段的结构体以及嵌入结构体字段重名。避免方法包括初始化结构体、自定义比较逻辑和使用明确字段选择器。结构体方法、指针接收者和匿名字段嵌入提供了灵活性。理解这些问题和解决策略能提升Go语言编程的效率和代码质量。
82 1
|
11月前
|
Go 数据库
Golang面对象编程小案例(未连接数据库)
Golang面对象编程小案例(未连接数据库)
32 0
|
Go Python
化整为零优化重用,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang函数的定义和使用EP07
函数是基于功能或者逻辑进行聚合的可复用的代码块。将一些复杂的、冗长的代码抽离封装成多个代码片段,即函数,有助于提高代码逻辑的可读性和可维护性。不同于Python,由于 Go lang是编译型语言,编译之后再运行,所以函数的定义顺序无关痛痒。
化整为零优化重用,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang函数的定义和使用EP07
golang interface对象的比较会同时比较类型和值
golang interface对象的比较会同时比较类型和值
下一篇
无影云桌面