首先先创建两个文档数据!
PUT /my_index6/_doc/1
{
"name":"张三",
"age":21,
"tags":["内向","孤独","自尊心强"]
}
PUT /my_index6/_doc/2
{
"name":"小花",
"age":23,
"tags":["简单","低调","善良"]
}
可以看到 默认创建的两个文档的类型是
name:text 类型
age :long 类型
tags:text 类型
所以查询name或tags的时候会使用到分词器进行分词!
最简单的查询
GET /my_index6/_doc/_search?q=name:"张"
复杂查询1 match和term的区别
GET /索引名/_search
{请求体 json}
match:当查询“小花”的时候则可以直接查出,因为使用match相当于模糊查询,只要文档包含搜索的内容就可以被查出!
term:显而易见,直接查询“小花”则不可以被查出,因为使用term就会在搜索前到文档分词集合中去查找,例如 当时PUT的时候创建了name=“小花”的文档,这时文档就会把小花分成“小”,“花”两个词,所以刚才我们直接查询“小花”的时候才没有被查询出来!
那问题来了,显然使用term的时候会有很大的不便之处,因为我们不知道es到底怎么把我们的中文进行分词,这时候又是IK分词器上场了!
使用IK分词器 避免term时中文胡乱分词问题!
先看一下不适用IK分词器的时候es默认分词是什么样的。
果然分成了“小”,“花”,那使用IK分词器呢?
可以看到,IK分词器默认把“小花“当成一个词,这显然更符合中文对于”词“的理解!
所以如果我们要使用term要搜索的条件是中文的话 就是用ik分词器帮助我们!
或许现在的理解还不太到位,后面学习更多就会及时更新的!