elasticsearch 中term与match区别
term是精确查询match是模糊查询term查询
term是代表完全匹配,也就是精确查询,搜索前不会再对搜索词进⾏分词,所以我们的搜索词必须是⽂档分词集合中的⼀个。⽐如说我们要找标题为北京奥运的所有⽂档
$curl -XGET http://localhost:9200/index/doc/_search?pretty -d '{
\"query\":{ \"term\":{
\"title\":\"北京奥运\" } }}'
将会得到如下结果
{
\"took\": 1,
\"timed_out\": false, \"_shards\": { \"total\": 5,
\"successful\": 5, \"failed\": 0 },
\"hits\": { \"total\": 1,
\"max_score\": 0.92055845, \"hits\": [ {
\"_index\": \"index\ \"_type\": \"doc\ \"_id\": \"3\
\"_score\": 0.92055845, \"_source\": {
\"content\": \"同⼀个世界同⼀个梦想\ \"title\": \"北京奥运\ \"tags\": [ \"和平\" ] } } ] }}
match类查询
match查询会先对搜索词进⾏分词,分词完毕后再逐个对分词结果进⾏匹配,因此相⽐于term的精确搜索,match是分词匹配搜索,match搜索还有两个相似功能的变种,⼀个是match_phrase,⼀个是multi_match,接下来详细介绍⼀下match
前⾯提到match搜索会先对搜索词进⾏分词,对于最基本的match搜索来说,只要搜索词的分词集合中的⼀个或多个存在于⽂档中即可,例如,当我们搜索中国杭州,搜索词会先分词为中国和杭州,只要⽂档中包含搜索和杭州任意⼀个词,都会被搜索到
$curl -XGET http://localhost:9200/index/doc/_search?pretty -d '{
\"query\": { \"match\": {
\"content\": \"中国杭州\" } }}'
⽂档3正⽂中有杭州,⽂档2中有中国,因此搜索结果有两个,⽂档3中杭州出现两次,所以排在前⾯,结果如下:
{
\"took\" : 1,
\"timed_out\" : false, \"_shards\" : { \"total\" : 5,
\"successful\" : 5, \"failed\" : 0 },
\"hits\" : { \"total\" : 2,
\"max_score\" : 0.99999994, \"hits\" : [ {
\"_index\" : \"index\ \"_type\" : \"doc\ \"_id\" : \"4\
\"_score\" : 0.99999994, \"_source\" : {
\"content\" : \"杭州是⼀个美丽的城市,欢迎来到杭州\ \"title\" : \"宣传\
\"tags\" : [ \"旅游\城市\" ] } }, {
\"_index\" : \"index\ \"_type\" : \"doc\ \"_id\" : \"2\
\"_score\" : 0.8838835, \"_source\" : {
\"content\" : \"中国是世界上⼈⼝最多的国家\ \"title\" : \"中国\
\"tags\" : [ \"中国\⼈⼝\" ] } } ] }}
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,谢谢⼤家对的⽀持。如果你想了解更多相关内容请查看下⾯相关链接
因篇幅问题不能全部显示,请点此查看更多更全内容