1. 业务代码实现结果和kibana验证不一致?
在实际MySQL业务中,一般会先验证sql有没有问题,如果没有问题,再写业务代码。实际ES业务中,也一样,先DSL确认没有问题,再写业务代码。
2. 某个关键词可以匹配,为什么检索不到?
第一步:借助analyzer API分析查询语句和待查询document分词结果。
GET my_index/_analyze
{
"field": "text",
"text": "中国我爱你,祖国加油",
"analyzer":"ik_smart"
}
这个API的重要性不用我在过多的强调了吧。
第二步:可以借助profile:true查看细节。第三步:核对match_phrase词序的原理。
3. 熟悉sql,但转dsl就不会写了?
ES6.3版本后已经支持sql,如果不会写,可以借助translate 如下API翻译一下。
这种方式虽然不够精确,但足够参考用了,需要根据业务细节微调。
4. 查询慢,但不知道什么原因导致的?
这个问题从大往小进行逐步排解。
索引层面:数据是分散到多个索引中、多个副本中、还是一个索引中?
Mapping映射设计层面:设计高校检索Number类型建议改成keyword。
返回字段:检索的时候返回全字段,数据量大的话,也会慢。
日志查询:查询es日志,看看以后没有大量的gc。
借助cerebro或者xpack mointer监视集群状态。
排除网络慢的原因。