(七)bleve一些其他特性


忽略/禁用部分文档

有时文档包含仅仅想忽略的部分内容。让我们想象我们有以下结构:

type Person struct {
    Name string
    Addr Address
}

而且,我们已经决定不想索引或存储任何地址数据。我们可以通过使用以下DocumentMapping来完成此操作。

personMapping := bleve.NewDocumentMapping()
addressMapping := bleve.NewDocumentDisabledMapping()
personMapping.AddSubDocumentMapping("Addr", addressMapping)

在结果中高亮显示匹配

搜索的一个流行功能是能够在搜索结果中突出显示文档的匹配部分。
要求:想突出显示的字段必须同时srored和IncludeTermVectors。必须存储以便我们可以访问原始内容以突出显示,并且必须包含术语向量,以便我们知道每个词条在原始文本内发生的字节偏移量。

考虑我们已经有了以下搜索请求:

query := bleve.NewQueryStringQuery(...)
searchRequest := bleve.NewSearchRequest(query)

我们可以使用默认突出显示高亮显示结果:

searchRequest.Highlight = bleve.NewHighlight()

或者我们可以请求使用特定的指定高亮器:

searchRequest.Highlight = bleve.NewHighlightWithStyle(highlighterName)

没有任何其他配置,它会自动尝试突出显示任何匹配的字段。有时我们只关注突出特定字段或一组字段。

searchRequest.Highlight.AddField(field)

高亮器

  • HTML高亮器用于网页高亮
  • ANSI高亮器用于命令行高亮


在结果中包含构面(Facet)

构面允许包含有关与查询匹配的文档的汇总信息。

Terms Facet

词条构面需要一个名字和大小
stylesFacet := bleve.NewFacetRequest("style", 3)
searchRequest.AddFacet("styles", stylesFacet)
构面styles将字段style的每个Term分桶统计,得到top3

Numeric Range Facet

数字范围构面

var lowToMidAbv = 3.5
var midToHighAbv = 9.0
abvFacet := bleve.NewFacetRequest("abv", 3)
abvFacet.AddNumericRange("low", nil, &lowToMidAbv)
abvFacet.AddNumericRange("medium", &lowToMidAbv, &midToHighAbv)
abvFacet.AddNumericRange("high", &midToHighAbv, nil)
searchRequest.AddFacet("abv", abvFacet)

将abv的值分到3个桶

DateTime Range Facet

日期范围构面

var cutOffDate = time.Now().Add(-365*24*time.Hour)
updatedFacet := bleve.NewFacetRequest("updated", 2)
updatedFacet.AddDateTimeRange("old", time.Unix(0, 0), cutOffDate)
updatedFacet.AddDateTimeRange("new", cutOffDate, time.Unix(999999999, 999999999))
searchRequest.AddFacet("updated", updatedFacet)

将updated的日期分到2个桶

Facet Results

构面的结果
对于每个构面,将返回一个FacetResult,其中包含以下内容:

字段: 构面的字段的名称
总计: 遇到的值的总数(如果每个文档有一个词语,这应该与搜索结果中的文档总数相匹配)
缺失: 此字段没有任何值的文档数量
其他: 存在值的文档数量,但不在要求的前N个构面的桶中
构面数组: 每个构面包含表示此面片范围/存储区中项目数的计数

  • Term 词条构面包含词条的名称
  • Numeric Range 数字范围构面包含该桶的数值范围
  • DateTime Range 日期范围构面包含该桶的日期范围

猜你喜欢

转载自www.cnblogs.com/adarking/p/9178796.html