背景:没有安装中文分词器如ik等插件。
数据:ElasticSearch已有一些记录 ,格式如下
name:姓名-0
age:0
name:姓名-1
age:1
....
java客户端 client 尝试term 查询("name" , "姓名");
结果查出来结果为空。查询网上资料和回顾官方文档,得知term可以理解为精准查询,而中文text在ElasticSearch的默认分词器中,每个字都会被分词。
根据 _analyze分析分词结果,得到原来“姓名-1”被分词成“姓”、“名”、“1”,这三部分。
GET _analyze
{
"analyzer": "standard",
"text": "姓名-1"
}
分词结果如下:
{
"tokens" : [
{
"token" : "姓",
"start_offset" : 0,
"end_offset" : 1,
"type" : "<IDEOGRAPHIC>",
"position" : 0
},
{
"token" : "名",
"start_offset" : 1,
"end_offset" : 2,
"type" : "<IDEOGRAPHIC>",
"position" : 1
},
{
"token" : "1",
"start_offset" : 3,
"end_offset" : 4,
"type" : "<NUM>",
"position" : 2
}
]
}
这里如果用term,则只有传入 “name":"姓”;“name":"名";“name":"1”这三种其中一种,才能获取到数据。