问题:
在使用term精确查询text 类型时,比如phone 手机号数值时可以查询到,使用nickname 这种text 查询不到。
我的mapping 是这样的
解决:
1.通过es提供的测试分词的接口,我们可以测试各字段的分词情况
get http:/ip/索引名称/_analyze
{
"field":"firtname", #要进行分析的索引中的字段
"text":"DNF" #要进行分析的文本内容
}
分别分词为’北‘,京,大,学,并没有我想要的整体的一块的分词 “北京大学”。
2.ES 字段类型keyword和text的区别和选择
keyword:存储数据时候,不会分词建立索引
text:存储数据时候,会自动分词,并生成索引
创建es索引是最好先设置好每个字段的类型和使用的分词索引,如果不需要分词查询,设置字段类型为keyword最好,例如商品id、编号之类的;
如果需要分词查询,就设置为text类型,并且指定分词器,例如商品名称、商品标签、关键字等等;
设置字段类型和使用的分词器:
"fieldName": {
"type": "text", #字段类型为text
"analyzer":"ik_max_word" #ik中文分词器
}
注意:设置字段类型为text后,es建立的分词索引会把大写字母转换为小写,通过term精确匹配就匹配不到
结果:
后面我试着为content添加附属字段keyword,希望能够借此达到目的:
$where = [
/*"term" => [ //根据词条精确值查询
"_id" => ["value" => "42"]
]*/
/*"range" => [
"birthday" => [
"gte" => '1989-03-31', // 这里的gte代表大于等于,gt则代表大于
"lte" => '2095-03-31' // lte代表小于等于,lt则代表小于
]
]*/
/*"match" => [ //单字段查询
"nickname" => "蓝红白"
],*/
'bool' => [
'should' => [
// ["term" => ["_id" => '42']], //可以查询到
// ["term" => ["id" => '7']],//可以查询到
// ["term" => ["phone" => '18235555501']],//可以查询到
// ["term" => ["school_name" => '北京大学']],// 查不到
["term" => ["school_name.keyword" => '北京大']],//可以查询到
["term" => ["nickname.keyword" => '小白']],//可以查询到
]
]
];
["term" => ["school_name.keyword" => '北京大']], 必须为“北京大学”,多一字少一字都匹配不到这就是精确匹配。文章来源:https://www.toymoban.com/news/detail-410784.html
总结:
- 布尔查询: must:必须匹配每个子查询,类似“与”; should:选择性匹配子查询,类似“或”; must_not:必须不匹配,不参与算分,类似“非”; filter:必须匹配,不参与算分
- bool.must:适用于精确查询,并且如果使用多个term的话不能适用于同一个字段,多值而适用于多个字段
- match:根据一个字段查询,在匹配时会对所查找的关键词进行分词,然后按分词匹配查找,而term会直接对关键词进行查找。一般模糊查找的时候,多用match,而精确查找时可以使用term。
- multi_match: 提供在多个字段上查询,搜索字段越多,对查询性能影响越大,因此建议采用copy_to,然后单字段查询的方式
- erm结合bool使用时:should是或,must是与,must_not是非
- term:精准查询,根据词条精确值查询,keyword、数值类型、布尔类型、日期类型字段; range:根据值的范围查询,可以是数值、日期的范围
- geo_bounding_box:矩形范围查询,查询坐标落在某个矩形范围的所有文档,查询时,需要指定矩形的左上、右下两个点的坐标,然后画出一个矩形,落在该矩形内的都是符合条件的点。
- geo_distance:附近查询,也叫做距离查询,查询到指定中心点小于某个距离值的所有文档。在地图上找一个点作为圆心,以指定距离为半径,画一个圆,落在圆内的坐标都算符合条件
https://blog.csdn.net/xcdsdf14545/article/details/106189972/
https://blog.csdn.net/Muscleheng/article/details/115380374文章来源地址https://www.toymoban.com/news/detail-410784.html
到了这里,关于es8 text类型使用term精确查询失效的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!