笔记记录
GET books/_mapping
DELETE books
# 如何动态进行 mapper的修改
PUT books
{
"mappings": {
"properties": {
"title": {
"type": "text"
},
"publish_date": {
"type": "date"
},
"name": {
"type": "text"
}
}
}
}
#新增 mapper 字段
PUT books/_mapping
{
"properties":{
"price":{
"type":"integer"
}
}
}
#为新增的mapper字段初始化值
POST books/_update_by_query
{
"query": {
"match_all": {}
},
"script": {
"source": "if (ctx._source.price == null){ctx._source.price = 0}",
"lang": "painless"
}
}
GET books/_search
# 一共多少数量
GET yuqing_new/_count
# 比较这三个分词器的区别
POST _analyze
{
"tokenizer": "ik_max_word",
"text": ["龙珠新转"]
}
POST _analyze
{
"tokenizer":"ik_smart",
"text":["龙珠新转"]
}
POST _analyze
{
"tokenizer": "standard",
"text":["龙珠新转"]
}
PUT books/_doc/1
{
"title":"葫芦娃",
"name":"国产动漫,葫芦娃",
"actor":"80后",
"price":80,
"publish_date":"1980-09-07"
}
PUT books/_doc/2
{
"title":"灵笼",
"name":"国产动漫",
"actor":"90后, 00后",
"price":180,
"publish_date":"2021-09-07"
}
PUT books/_doc/3
{
"title":"一人之下",
"name":"国产动漫",
"actor":"90后",
"price":90,
"publish_date":"2021-09-17",
"starring":"冯宝宝"
}
PUT books/_doc/4
{
"title":"进击的巨人",
"name":"国外动漫",
"actor":"30岁,20岁,10多岁",
"price":200,
"publish_date":"2020-09-07"
}
PUT books/_doc/5
{
"title":"七龙珠",
"name":"国外动漫",
"actor":"30岁",
"price":100,
"publish_date":"2010-09-07"
}
PUT books/_doc/6
{
"title":"悟空转",
"name":"龙珠新转",
"actor":"正在筹备中",
"price":0,
"publish_date":"2022-09-07"
}
GET books/_search
# match
# operator: or 就是query中选中一个就可以 operator:and 全部要匹配才可以出来
GET books/_search
{
"query": {
"match": {
"title": {
"query": "巨人七龙珠",
"operator": "or"
}
}
}
}
# match_phrase, 查询短语,以一个短词作为一个整体来查询, 如下以 巨人 为一个整体来查询
GET books/_search
{
"query": {
"match_phrase": {
"title": "巨人"
}
}
}
# match_phrase_prefix, 这个不明白。
GET books/_search
{
"query": {
"match_phrase_prefix": {
"title": "葫芦娃七"
}
}
}
# multi_match 多个条件的查询,查询多个字段中,有这个字的。
GET books/_search
{
"query": {
"multi_match": {
"query": "龙",
"fields": ["title","name"]
}
}
}
# multi_match 通配符处理
GET books/_search
{
"query": {
"multi_match": {
"query": "龙",
"fields": ["title","*name"]
}
}
}
# multi_match 指定关键词出现在 title 中的权重是出现在 description 字段中的 3 倍
GET books/_search
{
"query": {
"multi_match": {
"query": "龙",
"fields": ["title^3","name"]
}
}
}
#common_terms query,
#主要作用:它把 query 分词后的词项分成重要词项(低频词项)和不重要的词项(高频词,也就是之前的停用词)
# 在搜索的时候,首先搜索和重要词项匹配的文档,这些文档是词项出现较少并且词项对其评分影响较大的文档。然后执行第二次查询,搜索对评分影响较小的高频词项,但是不计算所有文档的评分,而是只计算第一次查询已经匹配的文档得分。如果一个查询中只包含高频词,那么会通过 and 连接符执行一个单独的查询,换言之,会搜索所有的词项。
# 感觉针对一些大量的常用的, 不重要的词汇来进行,这样的效率会高很多。
# 具体看 https://www.knowledgedict.com/tutorial/elasticsearch-query.html#common_terms%20query 提高查询速度。
# 此段要做细进行说明。
GET books/_search
{
"query": {
"common": {
"title": {
"query": "人",
"cutoff_frequency": 0.001,
"low_freq_operator":"and"
}
}
}
}
#词项查询
# 说明:
# 1. 避免 term 查询对 text 字段使用查询。
# 2. 默认情况下,Elasticsearch 针对 text 字段的值进行解析分词,这会使查找 text 字段值的精确匹配变得困难。
# 3. 要搜索 text 字段值,需改用 match 查询。
# 4. 应用场景为查询人名、地名等需要精准匹配的需求
GET books/_search
GET books/_mapping
PUT books/_mapping
{
"properties":{
"actor":{
"type":"keyword"
}
}
}
# 精确匹配操作,
GET books/_search
{
"query": {
"term": {
"actor": {
"value": "90后"
}
}
}
}
# 这个搜索不到, 因为默认分词只有 葫 芦 娃,三个中文字,然后又是text类型,所以用term精准查找葫芦娃,找不到
GET books/_search
{
"query": {
"term": {
"title": {
"value": "葫芦娃"
}
}
}
}
POST _analyze
{
"tokenizer": "standard",
"text":["葫芦娃"]
}
# match_phrase是分词匹配 ,而且必须连续 默认中文分字了 你用这个搜索条件就变成 三个字 而且必须连续 就能搜出 葫芦娃
GET books/_search
{
"query": {
"match_phrase": {
"title": "葫芦娃"
}
}
}
GET books/_search
GET books/_search
{
"query": {
"terms": {
"title": [
"笼",
"人"
]
}
}
}
#range query
# 1. gt 大于,查询范围的最小值,也就是下界,但是不包含临界值。
# 2. gte 大于等于,和 gt 的区别在于包含临界值。
# 3. lt 小于,查询范围的最大值,也就是上界,但是不包含临界值。
# 4. lte 小于等于,和 lt 的区别在于包含临界值。
GET books/_search
{
"query": {
"range": {
"price": {
"gte": 80,
"lte": 150
}
}
}
}
GET books/_search
{
"query": {
"range": {
"publish_date": {
"gte": "1980-01-02",
"lte": "2010-10-01",
"format": "yyyy-MM-dd"
}
}
}
}
#新增 mapper 字段
PUT books/_mapping
{
"properties":{
"starring":{
"type":"keyword"
}
}
}
# exists 查询会返回字段中至少有一个非空值的文档。用于判断这个属性是否有值
# 如:我这所有数据中,只有一个 starring有值, 那么他就返回回来了。
GET books/_search
{
"query": {
"exists": {
"field": "starring"
}
}
}
# 已什么开头,进行查询
GET books/_search
{
"query": {
"prefix": {
"title": {
"value": "人"
}
}
}
}
#正则表达式查询
# 中文译为通配符查询,支持单字符通配符和多字符通配符,? 用来匹配一个任意字符,* 用来匹配零个或者多个字符。
# 和 prefix 查询一样,wildcard 查询的查询性能也不是很高,需要消耗较多的 CPU 资源。
GET books/_search
{
"query": {
"wildcard": {
"actor": {
"value": "*后"
}
}
}
}
# wildcard, regexp 处于正则表达式
GET books/_mapping
# 根据id查询,像查数据库的组件一样
GET books/_search
{
"query": {
"ids": {
"values": ["1","2"]
}
}
}
#复合查询
# 复合查询就是把一些简单查询组合在一起实现更复杂的查询需求,除此之外,复合查询还可以控制另外一个查询的行为。
# bool 查询可以把任意多个简单查询组合在一起,使用 must、should、must_not、filter 选项来表示简单查询之间的逻辑,每个选项都可以出现 0 次到多次。
GET books/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "国产"
}
}
],
"filter": [
{
"range": {
"price": {
"gte": 60,
"lte": 100
}
}
}
],
"must_not": [
{
"match": {
"title": "龙"
}
}
]
}
}
}
# boosting query 所谓的查询评分是啥? 另外进行学习处理。
# constant_score query
# dis_max query
# es中是否有相识度的问题。
GET yuqing_new/_count
# 嵌套查询
# 主要针对,继承关系的数量
# nested query
# has_child query
# has_parent query
#特殊查询
#script query
GET books/_search
{
"query": {
"script": {
"script": "doc['price'].value > 100"
}
}
}
# percolate query 需要熟悉这个
GET books/_search
# 位置查询后期在补上去
# 大结: 高亮处理
# 自定义高亮 , 默认是 em标签,但是我们可以设置HTML标签的
GET books/_search
{
"query": {
"match": {
"title": "葫芦娃"
}
},
"highlight": {
"fields": {
"title": {
"pre_tags": "<strong>",
"post_tags": "<strong>"
}
}
}
}
# 多字段高亮
GET books/_search
{
"query": {
"match": {
"title": "葫芦娃"
}
},
"highlight": {
"require_field_match": "false",
"fields": {
"title": {},
"name": {}
}
}
}
# 大结: 排序 , 排序的时候, 这个 mode:max是个啥意思
# mode:针对数组数据(多个值)时,指定的取值模式,可选值有 min、max、sum、avg 和 median,当排序采用升序时,默认为 min;排序采用降序时,默认为 max。
GET books/_search
{
"sort": [
{
"price": {
"order": "desc",
"mode": "max"
}
}
]
}
# 大结: 聚合处理
# 结果返回的各个值说明 , _score 这个值很重要。
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付