升级es分词检索遇到查询数据量不匹配的问题-es查询问题排查思路方式(一)

两集群esA esB,一致的docs数,doc内容,mapping等,区别只是es的版本不同(及相应的分词jar包不同,但是jar包只是针对不同es版本做的适配,实际行为完全一致)

同样的dsl,但是有1%的dsl查询结果不一致

首先用不一致的dsl分别查询esA,esB,获取命中文档 matchA matchB,假设这里只拿到一个doc,该doc的分词字段是content,该doc的id为 id_miss_doc_0000001,index为 test_db

取matchA,matchB的差集,获取到偏差doc

  • 1 首先保证文档内容一致,这个已确定没问题

  • 2 再次确保分词一致,包括分词算法,jar包内容等,这个也确定没问题

    分词结果较验 ik里有例子,校验不同es集群对content的分词结果

    https://github.com/medcl/elasticsearch-analysis-ik

    curl -XGET "http://localhost:9200/test_db/_analyze" -H 'Content-Type: application/json' -d'
    {
       "text":"中华人民共和国MN","tokenizer": "ik_smart"
    }'
    
    curl -H 'Authorization: Basic ZWxhc3RpYzptei1iaWEtcGFzcw==' -k http://10.11.110.150:8201/_tasks/ChkklhuRRGupUkB1ZhVT9Q:518106
    
    curl -H 'Authorization: Basic ZWxhc3RpYzptei1iaWEtcGFzcw==' -k  -XGET "http://10.11.110.150:8201/ik_sl_v2_201805_weixin/_analyze" -H 'Content-Type: application/json' -d'{
       "text":"三角轮胎对窜货者严厉警告:传真内容:2018年4月28日,淄博友顺经贸有限公司来函反应在潍坊昌邑
    
    
    
    curl -XGET "http://10.11.110.131:9200/ik_sl_v2_201805_weixin/_analyze" -H 'Content-Type: application/json' -d'
    {
       "text":"三角轮胎对窜货者严厉警告:传真内容:2018年4月28日,淄博友顺经贸有限公司来函反应在潍坊昌邑地区发现违规销售轮胎,具体如下:1.举报窜货轮胎为三角牌7.50R16LT-14PR规格TR668轮胎,列举胎号Y710016X605,12171305289等,经查询,窜货轮胎为我公司2017年11月2日发往贵司的轮胎,窜货轮胎订单号为12171305289.2.贵司以上行为,已违反我公司2018年《中国市场规范管理制度》第2.1条“向合同约定区域外销售三角公司各品牌轮胎(跨区域销售)”中相关条款。针对以上情况,按照2018年《中国市场规范管理制度》,对于贵司首次违规,给予通报警告,请贵司联系淄博友顺公司或我公司驻淄博业务人员,并限在2018年5月5日前收回窜货轮胎,如未按期收回,视同第二次违规,按照合同约定“第二次违规轮胎此批发货单号总金额10%进行处罚”,以淄博友顺公司确认函为准。望贵司能够自觉遵守三角轮胎股份有限公司《中国市场规范管理制度》的有关规定,共同维护好三角的市场规范和品牌形象,精诚团结,实现多赢。 顺祝商祺中国市场策划与销售中心服务处2018年5月2日同时抄送淄博友顺公司普利司通经销商对非该区域销售的三包胎不予理赔:原文如下:关于普利司通TBR市场管控措施通知 由于目前普利司通TBR市场越区情况严重,各家族网络店反映轮胎单胎利润持续下滑,为了控制越区轮胎,保护本区域广大经销商的共同利益,本公司即日起采取以下措施: 1)非本区域销售的普利司通三包胎一律不予理赔;2)不定时随机走访市场,回收越区轮胎;3)对于扰乱市场价格及涉及越区的经销商按照普利司通工厂越区胎相关规定处理;4)对于维护市场价格稳定的经销商及积极配合管控市场越区轮胎的经销商给与奖励;最后,希望大家积极参与配合,共同维护稳定市场价格!共建良好市场环境。上海中杰轮胎销售有限公司 2018年5月1号 普利司通中国因假轮胎事件发布声明!山东凯旋橡胶收回窜货经销商品牌代理权:2018年4月9日,轮胎界也发生一件令人震惊的事件,轮胎厂商公开“砍”掉了自己的一家经销商!我们一起来看什么原因:原文通告如下:经过山东凯旋橡胶有限公司销售部核实,2018年3月份辽宁沈阳德迈品牌代理商沈阳金汇达商贸有限公司向内蒙赤峰地区范围串货德迈品牌轮胎,此事件严重扰乱了内蒙赤峰地区德迈品牌的正常销售经营,给公司及内蒙赤峰地区经销商均造成不可挽回的损失。沈阳金汇达商贸有限公司在串货过程中,对轮胎胎号进行了损坏,性质特别恶劣。根据公司《市场规范管理办法》,现给予沈阳金汇达商贸有限公司以下处罚决定:1、取消其德迈品牌代理权;2、剩余所有返利作为罚款一并扣除。希望所有经销商引以为戒,共同营造和谐健康的产品市场环境。特此通告!另山东凯旋橡胶有限公司对于磨损胎号的轮胎一律认定为假冒伪劣产品,各地区经销商若发现胎号磨损轮胎工厂配合出具假冒伪劣鉴定书,经销商可联合当地工商局进行处理。山东凯旋橡胶有限公司2018年4月9日中策橡胶集团联合区域经销商发布通告:在2016年8月1号中策就假轮胎事件联合区域经销商发布通告,并采取如下措施:  1、使用扫码仪对出库轮胎进行严格管理,对非本公司轮胎一律拒收。  2、要求经销商对胎号进行登记,对假冒轮胎线索举报有奖。  3、从8月1日起,所有三包轮胎均要进工厂进行二次复检。  4、对发现的假冒轮胎一律没收,并追查来源严格打假。  5、变更三包轮胎理赔流程。河南郏县一轮胎经销商,进了一条外地串货的轮胎:普利司通M858花纹的9.00R20轮胎,价格便宜60元。通常故事到此结束,店老板多赚60元!高兴!本图为网络用图,与事件无关。可这条轮胎在安装到一辆货车后, 在经过当地集贸市场时,爆胎了!由于集贸市场人员密集,伤了一位不幸的路人,治疗费1万8千多,车主找他理赔。此时,这条轮胎的供货者已经没了踪影,没有发票,更没有三包售后服务。 这位经销商找到当地代理商理赔,查兑后,当地代理商发现这条轮胎不是他们供出的,拒绝理赔!因为这条轮胎找不到供货者,没有三包售后服务,他负全责,赔了1万8,而且还另赔了一条新胎。事情闹大后,交警介入,后来工商介入,因他不知道商品流通来源,找不到供货人,再次被罚款2万元。为省60元,损失38000元!而且失去了辛苦打下的市场,辜负了信任他的老客户!“轮胎人知道的轮胎事”了解到,全国各地发生过这样的事情太多,涉及的轮胎品牌也太多,因为串货赔几十万的案例小编知道的就有好几起了。我们呼吁:1、呼吁各轮胎厂家要加强管理,别为了多占市场而纵容投机、装聋作哑,别做掩耳盗铃的事情。2、呼吁买轮胎的客户们,别再砍价了。轮胎价格砍下来后,可能轮胎的质量也砍下来了。3、呼吁同行,要在勤奋、敬业、轮胎技术、生意运营、店面管理等方面竞争。恶性竞争只会一时痛快:你抢了别人的碗,也会有人砸你的碗。我们要记住:慢既是快!点击文章结尾“阅读原文”,免费领取广饶国际轮胎展门票!点击下面链接看往期精彩内容:★ 广饶轮胎展路线指引(高铁、飞机、汽车、自驾)★ 定了!这是今年轮胎界的大事,我一定去现场!★ 倒计时!中国最大轮胎展开幕在即!★ 轰动!全球7万轮胎人将来到中国这个县城!★ 史上最全的轮胎专业术语,拿走不谢!★ 卖轮胎赊账的6种死法,看哭了轮胎人!★ 轮胎行业转疯了!★ 谁来关心流动补胎工?★ 2017年度中国轮胎企业营收排行榜轮 胎 报真实、客观、及时、引领▲长按二维码“识别”关注轮胎人不知道的轮胎事 中国轮胎行业大影响者长按下图二维码3秒!即可免费加入!▲长按二维码“识别”关注","tokenizer": "ik_max_word"
    }'
    

    这里经个人测试,完全一致

    分词结果类似

    {
        "tokens": [{
                "token": "#",
                "start_offset": 0,
                "end_offset": 1,
                "type": "CN_CHAR",
                "position": 0
            },    
            {
                "token": "
    ",
                "start_offset": 30,
                "end_offset": 31,
                "type": "CN_CHAR",
                "position": 14
            },
            {
                "token": "/",
                "start_offset": 87,
                "end_offset": 88,
                "type": "CN_CHAR",
                "position": 36
            }
        ]
    }
    
  • 3 分词结果保证一致,则确认doc索引的内容一致,然后是验证查询

  • 4 熟悉sql类db的都会通过看sql的查询计划也找优化方向,es本身也提供explain查询计划的api

不同版本的api稍有区别

https://www.elastic.co/guide/en/elasticsearch/reference/7.x/search-explain.html#search-explain

GET /test_db/_explain/id_miss_doc_0000001
{
  "query" : {
    "match" : { "message" : "elasticsearch" }
  }
}

https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-explain.html#search-explain

GET /test_db/_doc/id_miss_doc_0000001/_explain
{
      "query" : {
        "match" : { "message" : "elasticsearch" }
      }
}

分别查看查询explain比对

{
    "query": {
        "bool": {
            "must": [
                {
                    "query_string": {
                        "analyzer": "ik_smart",
                        "query": ".........",
                        "fields": [
                            "content"
                        ]
                    }
                }
            ]
        }
    }
}

经比对不同版本es 对 not的处理不一致,导致最终结果命中率出现偏差

原始文档相同,分词相同,dsl相同,但是结果不同

原文地址:https://www.cnblogs.com/zihunqingxin/p/14916196.html