已使用 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
谢谢!