ES7.7中highlight的结果丢失部分文本的bug

  • Post author:
  • Post category:其他


本bug在windows版本 ES 7.7.0 和 7.15.2 中都可以再现

ik分词器已安装, 并导入了扩展停止词 extra_stopword.dic

Step1, 先建立一个索引.

在此之前, 请确保已经安装分词器插件ik

PUT /test
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      }
    }
  }
}

Step2, 批量导入几笔数据:

POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "title" : "【aben sky found】 最大华人车行!限量超跑,优质二手车买卖,最高价现金收购二手车!" }
{ "index" : { "_index" : "test", "_id" : "2" } }
{ "title" : "【aben sky found】最大华人车行!限量超跑,优质二手车买卖,最高价现金收购二手车!" }
{ "index" : { "_index" : "test", "_id" : "3" } }
{ "title" : "Regenwald Leasing 最大华人车行!限量超跑,优质二手车买卖,最高价现金收购二手车!" }
{ "index" : { "_index" : "test", "_id" : "4" } }
{ "title" : "【Regenwald Leasing】最大华人车行!限量超跑,优质二手车买卖,最高价现金收购二手车!" }
{ "index" : { "_index" : "test", "_id" : "5" } }
{ "title" : "Regenwald Leasing 最大华人车行! 限量超跑,优质二手车买卖,最高价现金收购二手车!" }
{ "index" : { "_index" : "test", "_id" : "6" } }
{ "title" : "Regenwald Leasing 最大华人车行 限量超跑,优质二手车买卖,最高价现金收购二手车!" }
{ "index" : { "_index" : "test", "_id" : "7" } }
{ "title" : "【Regenwald Leasing】最大华人车行 限量超跑,优质二手车买卖,最高价现金收购二手车!" }
{ "index" : { "_index" : "test", "_id" : "8" } }
{ "title" : "This is aben. 二手!奔驰焚枯食淡分类考试的分类看到数据量咖啡就是打了客服绝对时空裂缝!" }
{ "index" : { "_index" : "test", "_id" : "9" } }
{ "title" : "This is aben, 二手,奔驰焚枯食淡分类考试的分类看到数据量咖啡就是打了客服绝对时空裂缝!" }
{ "index" : { "_index" : "test", "_id" : "10" } }
{ "title" : "This is aben, 二手!奔驰焚枯食淡分类考试的分类看到数据量咖啡就是打了客服绝对时空裂缝!" }

Step3, 执行匹配搜索,并高亮title字段:

GET /test/_search
{
  "query": {
    "match": {"title": "二手奔驰"}
  },
  "highlight": {
    "fields": {"title": {}}
  }
}

结果如下:

{
  "took" : 33,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 10,
      "relation" : "eq"
    },
    "max_score" : 1.2969569,
    "hits" : [
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "9",
        "_score" : 1.2969569,
        "_source" : {
          "title" : "This is aben, 二手,奔驰焚枯食淡分类考试的分类看到数据量咖啡就是打了客服绝对时空裂缝!"
        },
        "highlight" : {
          "title" : [
            "This is aben, <em>二手</em>,<em>奔驰</em>焚枯食淡分类考试的分类看到数据量咖啡就是打了客服绝对时空裂缝!"
          ]
        }
      },
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "10",
        "_score" : 1.2969569,
        "_source" : {
          "title" : "This is aben, 二手!奔驰焚枯食淡分类考试的分类看到数据量咖啡就是打了客服绝对时空裂缝!"
        },
        "highlight" : {
          "title" : [
            "This is aben, <em>二手</em>!<em>奔驰</em>焚枯食淡分类考试的分类看到数据量咖啡就是打了客服绝对时空裂缝!"
          ]
        }
      },
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "8",
        "_score" : 1.2752849,
        "_source" : {
          "title" : "This is aben. 二手!奔驰焚枯食淡分类考试的分类看到数据量咖啡就是打了客服绝对时空裂缝!"
        },
        "highlight" : {
          "title" : [
            "<em>二手</em>!<em>奔驰</em>焚枯食淡分类考试的分类看到数据量咖啡就是打了客服绝对时空裂缝!"
          ]
        }
      },
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 0.062752485,
        "_source" : {
          "title" : "Regenwald Leasing 最大华人车行!限量超跑,优质二手车买卖,最高价现金收购二手车!"
        },
        "highlight" : {
          "title" : [
            "限量超跑,优质<em>二手</em>车买卖,最高价现金收购<em>二手</em>车!"
          ]
        }
      },
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 0.062752485,
        "_source" : {
          "title" : "【Regenwald Leasing】最大华人车行!限量超跑,优质二手车买卖,最高价现金收购二手车!"
        },
        "highlight" : {
          "title" : [
            "限量超跑,优质<em>二手</em>车买卖,最高价现金收购<em>二手</em>车!"
          ]
        }
      },
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 0.062752485,
        "_source" : {
          "title" : "Regenwald Leasing 最大华人车行! 限量超跑,优质二手车买卖,最高价现金收购二手车!"
        },
        "highlight" : {
          "title" : [
            "限量超跑,优质<em>二手</em>车买卖,最高价现金收购<em>二手</em>车!"
          ]
        }
      },
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "6",
        "_score" : 0.062752485,
        "_source" : {
          "title" : "Regenwald Leasing 最大华人车行 限量超跑,优质二手车买卖,最高价现金收购二手车!"
        },
        "highlight" : {
          "title" : [
            "Regenwald Leasing 最大华人车行 限量超跑,优质<em>二手</em>车买卖,最高价现金收购<em>二手</em>车!"
          ]
        }
      },
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "7",
        "_score" : 0.062752485,
        "_source" : {
          "title" : "【Regenwald Leasing】最大华人车行 限量超跑,优质二手车买卖,最高价现金收购二手车!"
        },
        "highlight" : {
          "title" : [
            "【Regenwald Leasing】最大华人车行 限量超跑,优质<em>二手</em>车买卖,最高价现金收购<em>二手</em>车!"
          ]
        }
      },
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.06209851,
        "_source" : {
          "title" : "【aben sky found】 最大华人车行!限量超跑,优质二手车买卖,最高价现金收购二手车!"
        },
        "highlight" : {
          "title" : [
            "限量超跑,优质<em>二手</em>车买卖,最高价现金收购<em>二手</em>车!"
          ]
        }
      },
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.06209851,
        "_source" : {
          "title" : "【aben sky found】最大华人车行!限量超跑,优质二手车买卖,最高价现金收购二手车!"
        },
        "highlight" : {
          "title" : [
            "限量超跑,优质<em>二手</em>车买卖,最高价现金收购<em>二手</em>车!"
          ]
        }
      }
    ]
  }
}

可以看到在部分高亮的结果中, 内容的前面一部分丢掉了.

在测试的时候, 尝试不加载外部字典(只使用默认加载的), 在7.7.0和7.15.2版本下结果一致.

从表面上看, 是当前面有英文, 且有感叹号或英文句号(点)时, 就会出现这个bug.

暂时还不知道是ES的bug还是ik分词器的bug.

TODO 这里做个记录, maybe以后可以找到问题的根源.



版权声明:本文为aben_sky原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。