# 使用 highlight 的 boundary\_chars参数后仍然从非边界字符截断

**URL:** <https://discuss.elastic.co/t/highlight-boundary-chars/57805>\
**Category:** 中文提问与讨论\
**Created:** [August 11, 2016, 12:03pm UTC](https://discuss.elastic.co/t/highlight-boundary-chars/57805 "2016-08-11T12:03:08Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![wpzdm](https://avatars.discourse-cdn.com/v4/letter/w/8797f3/32.png) [@wpzdm](https://discuss.elastic.co/u/wpzdm)\
**Post date:** [August 11, 2016, 12:03pm UTC](https://discuss.elastic.co/t/highlight-boundary-chars/57805/1 "2016-08-11T12:03:08Z")

</div>

已使用 highlight 的 boundary\_chars参数，但有时仍然从非边界字符截断。

测试数据如下：

```
PUT wpz_2

PUT wpz_2/_mapping/test
{
  "properties": {
    "test": {
      "analyzer": "index_ansj", 
      "type": "string", 
      "term_vector": "with_positions_offsets"
    }
  }
}

PUT wpz_2/test/3
{
  "test": "，全市工业80%以上的大型装备实现了信息化集成。投资2000万元启动“智慧企业”专项行动，重点支持工业企业无线、物联技术应用。"
}
GET wpz_2/test/_search
{
  "query": {
    "match": {
      "test": "智慧"
    }
  }
  , "highlight": {
    "boundary_chars": ".,!?；，。？！",
    "fragment_size": 30,
    "fields": {
      "test": {}
    }
  }
}

```

输出：

```
{
  "took": 4,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.057534903,
    "hits": [
      {
        "_index": "wpz_2",
        "_type": "test",
        "_id": "3",
        "_score": 0.057534903,
        "_source": {
          "test": "，全市工业80%以上的大型装备实现了信息化集成。投资2000万元启动“智慧企业”专项行动，重点支持工业企业无线、物联技术应用。"
        },
        "highlight": {
          "test": [
            "集成。投资2000万元启动“<em>智慧</em>企业”专项行动，重点支持工业企业无线、物联技术应用"
          ]
        }
      }
    ]
  }
}

```

注意在高亮片段的开头没有按 boundary char '。' 截断。

analyzer用standard结果是一样的，所以不应该是分析器的问题。

我猜是boundary\_chars和fragment\_size两个参数共同起作用的机制有问题，不知道有没有办法保证开始出一定是从boundary char截断的？

ES版本2.3.3

谢谢！

---

<div class="post-metadata">

**Author:** ![medcl.net](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/medcl.net/32/4414_2.png) [@medcl.net](https://discuss.elastic.co/u/medcl.net)\
**Post date:** [September 1, 2016, 3:22am UTC](https://discuss.elastic.co/t/highlight-boundary-chars/57805/2 "2016-09-01T03:22:21Z")

</div>

> [@wpzdm](#):
>
> PUT wpz\_2
> 
> PUT wpz\_2/\_mapping/test  
> {  
> "properties": {  
> "test": {  
> "analyzer": "index\_ansj",  
> "type": "string",  
> "term\_vector": "with\_positions\_offsets"  
> }  
> }  
> }
> 
> PUT wpz\_2/test/3  
> {  
> "test": "，全市工业80%以上的大型装备实现了信息化集成。投资2000万元启动“智慧企业”专项行动，重点支持工业企业无线、物联技术应用。"  
> }  
> GET wpz\_2/test/\_search  
> {  
> "query": {  
> "match": {  
> "test": "智慧"  
> }  
> }  
> , "highlight": {  
> "boundary\_chars": ".,!?；，。？！",  
> "fragment\_size": 30,  
> "fields": {  
> "test": {}  
> }  
> }  
> }

fragment size 要优先考虑，保证fragment前后有足够的上下文信息，你可以调小点fragment\_size，如25试试

---

<div class="post-metadata">

**Author:** ![wpzdm](https://avatars.discourse-cdn.com/v4/letter/w/8797f3/32.png) [@wpzdm](https://discuss.elastic.co/u/wpzdm)\
**Post date:** [September 12, 2016, 9:42am UTC](https://discuss.elastic.co/t/highlight-boundary-chars/57805/3 "2016-09-12T09:42:11Z")

</div>

感谢回复。

我试了一下，似乎不是保证fragment size可以解释的。  
比如  
`投资2000万元启动“智慧企业”专项行动，重点支持工业企业无线、物联技术应用`  
这个字符串长度远超25，但是需要fragment\_size设为25才不在highlight中带上开头的‘。’  
而且往上增加fragment\_size也不必然增加最后highlight的长度，  
比如fragment\_size为26 和 27 时，生成的highlight都是  
`。投资2000万元启动“智慧企业”专项行动，重点支持工业企业无线、物联技术应用`

上面的情况同样也是跟分析器无关。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2017, 1:45pm UTC](https://discuss.elastic.co/t/highlight-boundary-chars/57805/4 "2017-07-06T13:45:32Z")

</div>


