9-Elasticsearch的term level查询

Elasticsearch的term level查询

数据准备:

# 创建索引映射
PUT idx_term_level
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword"
      },
      "languages": {
        "type": "keyword"
      },
      "matches": {
        "type": "long"
      }
    }
  }
}

POST idx_term_level/_bulk
{"index":{"_id":1}}
{"name":"张三","languages":["c++","java","php"],"matches":2}
{"index":{"_id":2}}
{"name":"李四","languages":["java","php","dotnet"],"matches":2}
{"index":{"_id":3}}
{"name":"王五","languages":["java","donet","c"],"matches":3}
{"index":{"_id":4}}
{"name":"赵六","languages":["php","c++","hive"],"matches":3,"remark":"hi world"}
{"index":{"_id":5}}
{"name":"田七","languages":["spark","pyhon","java"],"matches":3,"remark":"big data"}
term level的exists查询

exists查询:判断文档中是否存在对应的字段。

查询:

GET idx_term_level/_search
{
  "query": {
    "exists": {
      "field": "remark"
    }
  }
}

结果:

{
  "took" : 540,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 1.0,
        "_source" : {
          "name" : "赵六",
          "languages" : [
            "php",
            "c++",
            "hive"
          ],
          "matches" : 3,
          "remark" : "hi world"
        }
      },
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 1.0,
        "_source" : {
          "name" : "田七",
          "languages" : [
            "spark",
            "pyhon",
            "java"
          ],
          "matches" : 3,
          "remark" : "big data"
        }
      }
    ]
  }
}
term level的ids查询

ids查询:通过 _id 批量查询

查询:

GET idx_term_level/_search
{
  "query": {
    "ids": {
      "values": [1,4]
    }
  }
}

结果:

{
  "took" : 30,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "张三",
          "languages" : [
            "c++",
            "java",
            "php"
          ],
          "matches" : 2
        }
      },
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 1.0,
        "_source" : {
          "name" : "赵六",
          "languages" : [
            "php",
            "c++",
            "hive"
          ],
          "matches" : 3,
          "remark" : "hi world"
        }
      }
    ]
  }
}
term level的prefix查询

prefix查询:根据前缀来查找某个字段

查询:

GET idx_term_level/_search
{
  "query": {
    "prefix": {
      "name": {
        "value": "张"
      }
    }
  }
}

结果:

{
  "took" : 665,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "张三",
          "languages" : [
            "c++",
            "java",
            "php"
          ],
          "matches" : 2
        }
      }
    ]
  }
}
term level的term单个词查询

单个词查询:搜索的内容不会被分词

查询:

GET idx_term_level/_search
{
  "query": {
    "term": {
      "languages": {
        "value": "php"
      }
    }
  }
}

结果:

{
  "took" : 127,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 0.7411202,
    "hits" : [
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.7411202,
        "_source" : {
          "name" : "张三",
          "languages" : [
            "c++",
            "java",
            "php"
          ],
          "matches" : 2
        }
      },
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.7411202,
        "_source" : {
          "name" : "李四",
          "languages" : [
            "java",
            "php",
            "dotnet"
          ],
          "matches" : 2
        }
      },
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 0.7411202,
        "_source" : {
          "name" : "赵六",
          "languages" : [
            "php",
            "c++",
            "hive"
          ],
          "matches" : 3,
          "remark" : "hi world"
        }
      }
    ]
  }
}
term level的terms多词查询

terms多词查询:匹配其中任意一个。

查询:

GET idx_term_level/_search
{
  "query": {
    "terms": {
      "languages": [
        "c",
        "c++"
      ]
    }
  }
}

结果:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "张三",
          "languages" : [
            "c++",
            "java",
            "php"
          ],
          "matches" : 2
        }
      },
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "name" : "王五",
          "languages" : [
            "java",
            "donet",
            "c"
          ],
          "matches" : 3
        }
      },
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 1.0,
        "_source" : {
          "name" : "赵六",
          "languages" : [
            "php",
            "c++",
            "hive"
          ],
          "matches" : 3,
          "remark" : "hi world"
        }
      }
    ]
  }
}
term level的动态匹配到单词的个数

通过term_set关键字查询,统计文档中动态匹配到单词的个数。

查询:

结果:

通配符查询–wildcard

wildcard:通配符查询

‘*’ :通配多个字符

查询:

GET idx_term_level/_search
{
  "query": {
    "wildcard": {
      "languages": {
        "value": "p*"
      }
    }
  }
}

结果:

{
  "took" : 58,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "张三",
          "languages" : [
            "c++",
            "java",
            "php"
          ],
          "matches" : 2
        }
      },
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "name" : "李四",
          "languages" : [
            "java",
            "php",
            "dotnet"
          ],
          "matches" : 2
        }
      },
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 1.0,
        "_source" : {
          "name" : "赵六",
          "languages" : [
            "php",
            "c++",
            "hive"
          ],
          "matches" : 3,
          "remark" : "hi world"
        }
      },
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 1.0,
        "_source" : {
          "name" : "田七",
          "languages" : [
            "spark",
            "pyhon",
            "java"
          ],
          "matches" : 3,
          "remark" : "big data"
        }
      }
    ]
  }
}
范围查询–range

range:用于数字和日期范围查询

查询:

GET idx_term_level/_search
{
  "query": {
    "range": {
      "matches": {
        "gte": 1,
        "lte": 2
      }
    }
  }
}

结果:

{
  "took" : 39,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "张三",
          "languages" : [
            "c++",
            "java",
            "php"
          ],
          "matches" : 2
        }
      },
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "name" : "李四",
          "languages" : [
            "java",
            "php",
            "dotnet"
          ],
          "matches" : 2
        }
      }
    ]
  }
}
模糊匹配查询–fuzzy

模糊匹配表示返回包含与搜索词相似的词的文档。

  1. 更改字符
  2. 删除字符
  3. 插入字符
  4. 倒置两个相邻的字符

查询:

GET idx_term_level/_search
{
  "query": {
    "fuzzy": {
      "remark": {
        "value": "big"
      }
    }
  }
}

结果:

{
  "took" : 272,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.6931471,
    "hits" : [
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 0.6931471,
        "_source" : {
          "name" : "田七",
          "languages" : [
            "spark",
            "pyhon",
            "java"
          ],
          "matches" : 3,
          "remark" : "big data"
        }
      }
    ]
  }
}
正则表达式查询–regexp

正则表达式是一种占位符匹配数据的方法。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NBgmO9fz-1679648078946)(/Users/zhaoxianwang/Library/Application Support/typora-user-images/image-20230321095749205.png)]

查询:

GET idx_term_level/_search
{
  "query": {
    "regexp": {
      "remark": {
        "value": "hi*"
      }
    }
  }
}

结果:

{
  "took" : 22,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "idx_term_level",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 1.0,
        "_source" : {
          "name" : "赵六",
          "languages" : [
            "php",
            "c++",
            "hive"
          ],
          "matches" : 3,
          "remark" : "hi world"
        }
      }
    ]
  }
}

脚本总结:

# 创建索引映射
PUT idx_term_level
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword"
      },
      "languages": {
        "type": "keyword"
      },
      "matches": {
        "type": "long"
      }
    }
  }
}

POST idx_term_level/_bulk
{"index":{"_id":1}}
{"name":"张三","languages":["c++","java","php"],"matches":2}
{"index":{"_id":2}}
{"name":"李四","languages":["java","php","dotnet"],"matches":2}
{"index":{"_id":3}}
{"name":"王五","languages":["java","donet","c"],"matches":3}
{"index":{"_id":4}}
{"name":"赵六","languages":["php","c++","hive"],"matches":3,"remark":"hi world"}
{"index":{"_id":5}}
{"name":"田七","languages":["spark","pyhon","java"],"matches":3,"remark":"big data"}

GET idx_term_level/_search
{
  "query": {
    "exists": {
      "field": "remark"
    }
  }
}


GET idx_term_level/_search
{
  "query": {
    "ids": {
      "values": [1,4]
    }
  }
}



GET idx_term_level/_search
{
  "query": {
    "prefix": {
      "name": {
        "value": "张"
      }
    }
  }
}


GET idx_term_level/_search
{
  "query": {
    "term": {
      "languages": {
        "value": "php"
      }
    }
  }
}


GET idx_term_level/_search
{
  "query": {
    "terms": {
      "languages": [
        "c",
        "c++"
      ]
    }
  }
}


GET idx_term_level/_search
{
  "query": {
    "wildcard": {
      "languages": {
        "value": "p*p"
      }
    }
  }
}

GET idx_term_level/_search
{
  "query": {
    "range": {
      "matches": {
        "gte": 1,
        "lte": 2
      }
    }
  }
}


GET idx_term_level/_search
{
  "query": {
    "fuzzy": {
      "remark": {
        "value": "big"
      }
    }
  }
}


GET idx_term_level/_search
{
  "query": {
    "regexp": {
      "remark": {
        "value": "hi*"
      }
    }
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值