ElasticSearch检索你的数据(二)

ElasticSearch检索你的数据(二)

高亮显示

高亮显示可以让你在检索的结果中获取高亮的代码片段,因此你能向用户展示查询匹配到的数据。当你请求高亮的时候,返回的响应为每一个检索记录包含额外的highlight元素,其中包含高亮字段和高亮的片段。

高亮显示的字段必须有真实的值。如果未存储该字段,则加载_source并从中提取相关字段。

例如,获取

curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match": { "content": "kimchy" }
  },
  "highlight": {
    "fields": {
      "content": {}
    }
  }
}
'

ElasticSearch支持三种高亮显示unified,plain, fvh

统一高亮

统一高亮使用 Lucene 统一高亮。这个高亮将文本分成句子,并使用 BM25 算法对单个句子进行评分,就好像它们是语料库中的文档一样。它还支持准确的短语和多术语(模糊、前缀、正则表达式)高亮显示。这是默认的高亮。

Plain高亮

plain高亮使用了标准的Lucene高亮器。它试图从理解短语查询中的单词重要性和任何单词定位标准的角度反映查询匹配逻辑。

提示:普通高亮显示最适合突出显示单个字段中的简单查询匹配。为了准确地反映查询逻辑,它创建了一个很小的内存索引,并通过Lucene的查询执行计划器重新运行原始查询条件,以访问当前文档的低级匹配信息。这将对需要突出显示的每个字段和文档重复。如果你想用复杂的查询在很多文档中突出显示很多字段,我们建议在posts或term_vector字段上使用统一的突出显示。

Fast vector 高亮

fvh高亮器使用了Lucene的Fast Vector高亮器。这个高亮器可以使用在映射中term_vector设置为with_positions_offsets的字段上。

  • 可以使用boundary_scanner 进行定制。
  • 需要将 term_vector 设置为 with_positions_offsets 。这会增加索引的大小
  • 可以将多个字段的匹配组合为一个结果。可以看matched_fields
  • 可以为不同位置的匹配分配不同的权重,

提示:fvh 高亮不支持跨度查询。如果您需要对跨度查询的支持,请尝试替代高亮,例如plain高亮。

覆盖全局设置

你可以指定全局高亮设置并且可以有选择性的为单个字段覆盖它们。

curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query" : {
    "match": { "user.id": "kimchy" }
  },
  "highlight" : {
    "number_of_fragments" : 3,
    "fragment_size" : 150,
    "fields" : {
      "body" : { "pre_tags" : ["<em>"], "post_tags" : ["</em>"] },
      "blog.title" : { "number_of_fragments" : 0 },
      "blog.author" : { "number_of_fragments" : 0 },
      "blog.comment" : { "number_of_fragments" : 5, "order" : "score" }
    }
  }
}
'

指定高亮查询

你可以在指定一个highlight_query来添加额外的高亮信息。例如以下查询中highlight_query中包含检索查询和重新评分查询两个查询。如果不使用highlight_query,只会高亮检索查询。

curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match": {
      "comment": {
        "query": "foo bar"
      }
    }
  },
  "rescore": {
    "window_size": 50,
    "query": {
      "rescore_query": {
        "match_phrase": {
          "comment": {
            "query": "foo bar",
            "slop": 1
          }
        }
      },
      "rescore_query_weight": 10
    }
  },
  "_source": false,
  "highlight": {
    "order": "score",
    "fields": {
      "comment": {
        "fragment_size": 150,
        "number_of_fragments": 3,
        "highlight_query": {
          "bool": {
            "must": {
              "match": {
                "comment": {
                  "query": "foo bar"
                }
              }
            },
            "should": {
              "match_phrase": {
                "comment": {
                  "query": "foo bar",
                  "slop": 1,
                  "boost": 10.0
                }
              }
            },
            "minimum_should_match": 0
          }
        }
      }
    }
  }
}
'

设置高亮类型

type字段运行强制指定一个字段的高亮类型。这个值可以设置为unified,plain ,fvh。以下例子是一个强制使用plain类型的高亮:

curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match": { "user.id": "kimchy" }
  },
  "highlight": {
    "fields": {
      "comment": { "type": "plain" }
    }
  }
}
'

配置高亮标签

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值