ES高级查询Query DSL查询详解、term术语级别查询、全文检索、highlight高亮

news2024/11/25 16:48:37

文章目录

  • ES高级查询Query DSL
    • match_all
      • 返回源数据_source
      • 返回指定条数size
      • 分页查询from&size
      • 指定字段排序sort
    • 术语级别查询
      • term query术语查询
      • terms query多术语查询
      • range query范围查询
      • exists query
      • ids query
      • prefix query前缀查询
      • wildcard query通配符查询
      • fuzzy query模糊查询
    • 全文检索
      • match query匹配查询
      • multi_match query 多字段查询
      • match_phrase query短语查询
      • query_string query
      • simple_query_string
    • bool query布尔查询
    • highlight高亮
      • 基本使用
      • 自定义高亮标签
      • 多字段高亮

ES高级查询Query DSL

ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specified Language 领域专用语言) ,

Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁。

官网

标准格式如下

GET /索引名/_doc/_search {JOSN请求体}

# 也可以省略_doc 简写成下面这种方式
GET /索引名//_search {JOSN请求体}

案例

# 无条件查询,默认返回10条数据
GET /sys_user/_search
{
  "query": {
    "match_all": {}
  }
}

在这里插入图片描述



案例数据生成,接下来的案例很多都是操作改索引

# 删除现有索引
DELETE /sys_user

# 重新创建索引 指定ik分词器
PUT /sys_user
{
  "settings" : {
      "index" : {
          "analysis.analyzer.default.type": "ik_max_word"
      }
  }
}

# 创建文档,指定id
PUT /sys_user/_doc/1
{
"name": "张三",
"sex": 1,
"age": 25,
"address": "广州天河公园",
"remark": "java developer"
}
PUT /sys_user/_doc/2
{
"name": "李四",
"sex": 1,
"age": 28,
"address": "广州荔湾大厦",
"remark": "java assistant"
}

PUT /sys_user/_doc/3
{
"name": "王五",
"sex": 0,
"age": 26,
"address": "广州白云山公园",
"remark": "php developer"
}

PUT /sys_user/_doc/4
{
"name": "赵六",
"sex": 0,
"age": 22,
"address": "长沙橘子洲",
"remark": "python assistant"
}

PUT /sys_user/_doc/5
{
"name": "张龙",
"sex": 0,
"age": 19,
"address": "长沙麓谷企业广场",
"remark": "java architect assistant"
}    
    
PUT /sys_user/_doc/6
{
"name": "赵虎",
"sex": 1,
"age": 32,
"address": "长沙麓谷兴工国际产业园",
"remark": "java architect"
}    

PUT /sys_user/_doc/7
{
"name": "李虎",
"sex": 1,
"age": 32,
"address": "广州番禺节能科技园",
"remark": "java architect"
}

PUT /sys_user/_doc/8
{
"name": "张星",
"sex": 1,
"age": 32,
"address": "武汉东湖高新区未来智汇城",
"remark": "golang developer"
}



match_all

使用match_all,匹配所有文档,默认只会返回10条数据。

原因:_search查询默认采用的是分页查询,每页记录数size的默认值为10。如果想显示更多数据,指定size

# 无条件查询,_search默认返回10条数据
GET /sys_user/_search

# 等价于
GET /sys_user/_search
{
  "query": {
    "match_all": {}
  }
}



返回源数据_source

_source关键字,是一个数组,在数组中指定用来指定暂时哪些字段,类似于Mysql的select 字段 from table 或MongoDB中的 $project映射

# _source关键字的相关操作
# 返回指定字段
GET /sys_user/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["name","age"]
}


#不查看源数据,仅查看元字段
GET /sys_user/_search
{
  "query": {
    "match_all": {}
  },
  "_source": false
}


# 只看以a开头的字段
GET /sys_user/_search
{
  "query": {
    "match_all": {}
  },
  "_source": "a*"
}



返回指定条数size

size 关键字: 指定查询结果中返回指定条数。 默认返回值10条

# 通过size关键字指定返回结果数
GET /sys_user/_search
{
  "query": {
    "match_all": {}
  },
  "size": 20
}



分页查询from&size

size:显示应该返回的结果数量,默认是 10

from:显示应该跳过的初始结果数量,默认是 0

from 关键字用来指定起始返回位置,和size关键字连用可实现分页效果

# 通过from + size关键字实现分页
# 跳过前面5个文档,共显示两个文档
GET /sys_user/_search
{
  "query": {
    "match_all": {}
  },
  "from": 5, 
  "size": 2
}



指定字段排序sort

注意:sort排序会让 _score相关性得分失效

# 使用sort关键字,按age字段降序 排序
GET /sys_user/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}


# sort排序 + from size分页
GET /sys_user/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ],
  "from": 5,
  "size": 3
}



术语级别查询

术语级别查询(Term-Level Queries)指的是搜索内容不经过文本分析直接用于文本匹配

搜索的对象大多是索引的非text类型字段。



term query术语查询

Term查询,对输入不做分词。会将输入作为一个整体,在倒排索引中查找准确的词项,

术语查询直接返回包含搜索内容的文档,常用来查询索引中某个类型为keyword的文本字段,类似于SQL的“=”查询,使用十分普遍。

注意:最好不要在term查询的字段中使用text字段,因为text字段会被分词,这样做既没有意义,还很有可能什么也查不到。

# 对bool,日期,数字,结构化的文本可以利用term做精确匹配
# term 精确匹配
GET /sys_user/_search
{
  "query": {
    "term": {
      "age": {
        "value": "25"
      }
    }
  }
}

# 思考: 查询广州白云是否有数据,为什么?
# 没有数据,因为address是text类型,索引数据时会创建倒排索引,而直接用 term 广州白云这个词 倒排索引中不存在所以查询不到数据
GET /sys_user/_search
{
  "query": {
    "term": {
      "address": {
        "value": "广州白云"
      }
    }
  }
}

# 采用term精确查询, 查询字段映射类型为keyword
# 能查询都数据,因为address字段是类型为text 子类型为keyword,会创建一个完整address字段内容在倒排索引中
GET /sys_user/_search
{
  "query": {
    "term": {
      "address.keyword": {
        "value": "广州白云山公园"
      }
    }
  }
}



在ES中,Term查询,对输入不做分词。会将输入作为一个整体,在倒排索引中查找准确的词项,并且使用相关度算分公式为每个包含该词项的文档进行相关度算分。

可以通过 constant_score 将查询转换成一个 Filtering,避免算分,并利用缓存,提高性能。

  • 将Query 转成 Filter,忽略TF-IDF计算,避免相关性算分的开销
  • Filter可以有效利用缓存
# 使用constant_score + filter 避免相关性算分
GET /sys_user/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "term": {
          "address.keyword": "广州白云山公园"
        }
      }
    }
  }
}



term处理多值字段时,term查询是包含,不是等于。

POST /employee/_bulk
{"index":{"_id":1}}
{"name":"小明","interest":["跑步","篮球"]}
{"index":{"_id":2}}
{"name":"小红","interest":["跳舞","画画"]}
{"index":{"_id":3}}
{"name":"小丽","interest":["跳舞","唱歌","跑步"]}

在这里插入图片描述



terms query多术语查询

terms 用于指定字段上匹配多个词项,这里会精确匹配指定字段中包含的任何一个词项

# trems 多术语匹配
GET /sys_user/_search
{
  "query": {
    "terms": {
      "remark.keyword": [
        "java developer",
        "java assistant"
      ]
    }
    }
  }
}



range query范围查询

关键字

  • range 范围关键字
  • gte 大于等于
  • lte 小于等于
  • gt 大于
  • lt 小于
  • now 当前时间



# 查询age在[18,25]之间的文档,并对结果做一个降序排序
GET /sys_user/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 18,
        "lte": 25
      }
    }
  }, 
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

日期范围的比较 可以使用now表示当前时间

# 日期范围的比较
PUT /product/_bulk
{"index": {"_id": 1}}
{"productId": "XHDK-1293","price": 100,"date": "2022-01-01"}
{"index": {"_id": 2}}
{"productId": "XHDK-3566","price": 200,"date": "2023-01-01"}

# 当前时间 - 2年    当然你也可以直接写"gte": "2022-08-12"
GET /product/_search
{
  "query": {
    "range": {
      "date": {
        "gte": "now-2y"
      }
    }
  }
}



exists query

使用exists关键字查询,查询文档中所有存在该字段的文档

字段不存在 和 字段值为null的文档都查询不出来

# 查询所有存在name字段的文档数据
GET /sys_user/_search
{
  "query": {
    "exists": {
      "field": "name"
    }
  }
}
# 索引一个文档,没有name字段
POST /sys_user/_doc
{
  "sex": 1,
  "age": 25,
  "address": "广州天河公园111",
  "remark": "java developer111"
}

# 索引一个文档,name字段的值为null
POST /sys_user/_doc
{
  "name": null,
  "sex": 1,
  "age": 25,
  "address": "广州天河公园222",
  "remark": "java developer222"
}

# 索引一个文档,name字段的值为""
POST /sys_user/_doc
{
  "name": "",
  "sex": 1,
  "age": 25,
  "address": "广州天河公园333",
  "remark": "java developer333"
}

# 最终只能查询到  name字段的值为"" 的文档, name字段不存在 和 name值为null的文档都查询不出来
GET /sys_user/_search
{
  "query": {
    "exists": {
      "field": "name"
    }
  }
}



ids query

ids关键字,值为数组类型,可以根据一组id查询文档数据

# 使用ids关键字,查询一组id对应的文档
GET /sys_user/_search
{
  "query": {
    "ids": {
      "values": [1,2,3]
    }
  }
}



prefix query前缀查询

直接根据传入的前缀去倒排索引中进行匹配,判断倒排索引中的每个term是否以所指定的前缀开头。它不会分析要搜索字符串,传入的前缀就是想要查找的前缀

默认状态下,前缀查询不做相关性分数计算,它只是将所有匹配的文档返回,然后赋予所有相关分数值为1。它的行为更像是一个过滤器而不是查询。两者实际的区别就是过滤器是可以被缓存的,而前缀查询不行。

# 使用prefilx前缀匹配查询
GET /sys_user/_search
{
  "query": {
    "prefix": {
      "address": {
        "value": "广州"
      }
    }
  }
}



wildcard query通配符查询

工作原理和prefix相同,只不过它不是只比较开头,它能支持更为复杂的匹配模式。

# 使用wildcard通配符匹配
GET /sys_user/_search
{
  "query": {
    "wildcard": {
      "address": {
        "value": "*白*"
      }
    }
  }
}



fuzzy query模糊查询

使用fuzziness属性来进行模糊查询,从而达到搜索有错别字的情形。

fuzzy 查询会用到两个很重要的参数,fuzziness,prefix_length

  • fuzziness

    对输入的关键字进行几次操作可以和倒排索引中的term词匹配。

    新增一个字符,删除一个字符,修改一个字符,每次操作可以记做编辑距离为1;

    该参数默认值为0,即不开启模糊查询; fuzzy 模糊查询 最大模糊错误必须在0-2之间

  • prefix_length

    输入的关键字前面几个字符必须要和倒排索引的term词匹配,关键字前面几个字符不允许写错

    默认值为0

# 使用fuzzy关键字进行模糊查询
# 允许一个错别字,但是第一个字不能是错别字
GET /sys_user/_search
{
  "query": {
    "fuzzy": {
      "address": {
        "value": "白晕山",
        "fuzziness": 1,
        "prefix_length": 1
      }
    }
  }
}



全文检索

全文检索查询旨在基于相关性搜索和匹配文本数据。

这些查询会对输入的文本进行分析,将其拆分为词项(单个单词),并执行诸如分词、词干处理和标准化等操作。

以相关性为基础进行搜索和匹配。全文检索查询使用相关性算法来确定文档与查询的匹配程度,并按照相关性进行排序。相关性可以基于词项的频率、权重和其他因素来计算。



match query匹配查询

match在匹配时会对所查找的关键词进行分词,然后按分词匹配查找。

match支持以下参数:

  • query : 指定匹配的值

  • operator : 匹配条件类型

    • and : 条件分词后都要匹配
    • or : 条件分词后有一个匹配即可(默认)
  • minmum_should_match : 最低匹配度,即条件在倒排索引中最低的匹配度

# 下面两种写法一样,两种写法都是operator分词后or的效果
GET /sys_user/_search
{
  "query": {
    "match": {
      "address": "广州白云山"
    }
  }
}

# 如果只有关键词需要指定,那么match关键词下的query参数就可以省略
GET /sys_user/_search
{
  "query": {
    "match": {
      "address": {
        "query": "广州白云山"
      }
    }
  }
}


# 分词后 and的结果
GET /sys_user/_search
{
  "query": {
    "match": {
      "address": {
        "query": "广州白云山",
        "operator": "and"
      }
    }
  }
}

# 如果分词后是or操作,我们也可以添加minmum_should_match 来指定最低匹配度
# 至少要匹配两个分词
GET /sys_user/_search
{
  "query": {
    "match": {
      "address": {
        "query": "广州白云山公园",
        "operator": "or",
        "minimum_should_match": 2
      }
    }
  }
}



对于match查询,其底层逻辑的概述:

  1. 分词:首先,输入的查询文本会被分词器进行分词。分词器会将文本拆分成一个个词项(terms),如单词、短语或特定字符。分词器通常根据特定的语言规则和配置进行操作。
  2. 倒排索引:ES使用倒排索引来加速搜索过程。倒排索引是一种数据结构,它将词项映射到包含这些词项的文档。每个词项都有一个对应的倒排列表,其中包含了包含该词项的所有文档的引用。
  3. 匹配计算:一旦查询被分词,ES将根据查询的类型和参数计算文档与查询的匹配度。对于match查询,ES将比较查询的词项与倒排索引中的词项,并计算文档的相关性得分。相关性得分衡量了文档与查询的匹配程度。
  4. 结果返回:根据相关性得分,ES将返回最匹配的文档作为搜索结果。搜索结果通常按照相关性得分进行排序,以便最相关的文档排在前面。

在这里插入图片描述



在这里插入图片描述




在这里插入图片描述



multi_match query 多字段查询

让查询关键词在文档内的多个字段中进行查询

# 使用multi_match,让输入的关键词在多个字段中进行查找匹配
# 这其中也有 operator  minimum_should_match 这些参数
GET /sys_user/_search
{
  "query": {
    "multi_match": {
      "query": "长沙赵六",
      "fields": ["name", "address"],
      "operator": "or",
      "minimum_should_match": 1
    }
  }
}



match_phrase query短语查询

对搜索文本进行分词,再去倒排索引找每个分词,并要求分词相邻。可以通过slop参数设置允许分词之间出现的最大间隔距离

我们先来使用分词器来看看一个文本是如何分词的

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "广州白云山"
}

在这里插入图片描述



那么我们现在输入文本广州白云山应该是能查询到数据,因为这两个分词是相邻的,如果输入文本广州白云应该是查询不到数据,因为这两个分词是不相邻的

# 能查询到数据,因为广州 白云山 这两个分词是相邻的,
GET /sys_user/_search
{
  "query": {
    "match_phrase": {
      "address": "广州白云山"
    }
  }
}

# 查询不到数据,因为 广州 白云  这两个分词是不相邻
GET /sys_user/_search
{
  "query": {
    "match_phrase": {
      "address": "广州白云"
    }
  }
}

# slop参数设置允许分词之间出现的最大间隔距离
GET /sys_user/_search
{
  "query": {
    "match_phrase": {
      "address": {
        "query": "广州白云",
        "slop": 2
      }
    }
  }
}

在这里插入图片描述



query_string query

对输入的文本在文档中所有字段进行匹配搜索

允许我们在单个查询字符串中指定AND | OR | NOT条件,必须大写

它也支持单字段查询和多字段查询,只不过这些功能我们通过match、multi_match也能实现

# 未指定字段查询,查询文档中的所有字段的值
# AND必须大写 文档中必须包含这两个分词才能查询出来
GET /sys_user/_search
{
  "query": {
    "query_string": {
      "query": "赵六 AND 橘子洲"
    }
  }
}

# 指定单字段   添加default_field参数
GET /sys_user/_search
{
  "query": {
    "query_string": {
      "default_field": "address", 
      "query": "赵六 OR 橘子洲"
    }
  }
}

# 指定多字段  添加
GET /sys_user/_search
{
  "query": {
    "query_string": {
      "fields": ["name", "address"], 
      "query": "张三 OR (赵六 AND 橘子洲)"
    }
  }
}



simple_query_string

类似于query_string ,但是会忽略错误的语法,同时只支持部分查询语法,不支持AND OR NOT ,如果存在AND这些会当作普通字符串处理。

支持部分逻辑:

  • +代替AND
  • |代替OR
  • -代替NOT
# simple_query_string 默认的operator是OR
GET /sys_user/_search
{
  "query": {
    "simple_query_string": {
      "fields": ["name","address"],
      "query": "广州公园",
      "default_operator": "AND"
    }
  }
}

GET /sys_user/_search
{
  "query": {
    "simple_query_string": {
      "fields": ["name","address"],
      "query": "广州 + 公园"
    }
  }
}



bool query布尔查询

  • 搜索上下文query context

    需计算每个文档与搜索条件相关性得分,有一定性能开销,带文本分析的全文检索查询语句适合放在搜索上下文中

  • 过滤上下文filter context

    只判断搜索条件跟文档是否匹配,不计算相关性得分。可以使用缓存加快响应速度,术语级别查询是否放在过滤上下文中



类型说明
must可包含多个查询条件,每个条件均满足的文档才能被搜索到,每次查询需要计算相关度得分,属于搜索上下文
should可包含多个查询条件,不存在must和fiter条件时,至少要满足多个查询条件中的一个,文档才能被搜索到,否则需满足的条件数量不受限制,匹配到的查询越多相关度越高,也属于搜索上下文
filter可包含多个过滤条件,每个条件均满足的文档才能被搜索到,每个过滤条件不计算相关度得分,结果在一定条件下会被缓存, 属于过滤上下文
must_not可包含多个过滤条件,每个条件均不满足的文档才能被搜索到,每个过滤条件不计算相关度得分,结果在一定条件下会被缓存, 属于过滤上下文



案例

生成案例数据

PUT /books
{
  "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 1
  },
  "mappings": {
    "properties": {
      "id": {
        "type": "long"
      },
      "title": {
        "type": "text",
        "analyzer": "ik_max_word"
      },
      "language": {
        "type": "keyword"
      },
      "author": {
        "type": "keyword"
      },
      "price": {
        "type": "double"
      },
      "publish_time": {
        "type": "date",
        "format": "yyy-MM-dd"
      },
      "description": {
        "type": "text",
        "analyzer": "ik_max_word"
      }
    }
  }
}

POST /_bulk
{"index":{"_index":"books","_id":"1"}}
{"id":"1", "title":"Java编程思想", "language":"java", "author":"Bruce Eckel", "price":70.20, "publish_time":"2007-10-01", "description":"Java学习必读经典,殿堂级著作!赢得了全球程序员的广泛赞誉。"}
{"index":{"_index":"books","_id":"2"}}
{"id":"2","title":"Java程序性能优化","language":"java","author":"葛一鸣","price":46.5,"publish_time":"2012-08-01","description":"让你的Java程序更快、更稳定。深入剖析软件设计层面、代码层面、JVM虚拟机层面的优化方法"}
{"index":{"_index":"books","_id":"3"}}
{"id":"3","title":"Python科学计算","language":"python","author":"张若愚","price":81.4,"publish_time":"2016-05-01","description":"零基础学python,光盘中作者独家整合开发winPython运行环境,涵盖了Python各个扩展库"}
{"index":{"_index":"books","_id":"4"}}
{"id":"4", "title":"Python基础教程", "language":"python", "author":"Helant", "price":54.50, "publish_time":"2014-03-01", "description":"经典的Python入门教程,层次鲜明,结构严谨,内容翔实"}
{"index":{"_index":"books","_id":"5"}}
{"id":"5","title":"JavaScript高级程序设计","language":"javascript","author":"Nicholas C. Zakas","price":66.4,"publish_time":"2012-10-01","description":"JavaScript技术经典名著"}

bool 查询案例

# 使用must类型,需满足所有查询条件,属于搜索上下文
GET /books/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "Java编程"
          }
        },
        {
          "match": {
            "description": "性能优化"
          }
        }
      ]
    }
  }
}


# 使用 should 满足任意一个查询条件即可
# 通过 minimum_should_match 参数指定需要满足条件的个数
GET /books/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": "java编程"
          }
        },
        {
          "match": {
            "description": "性能优化"
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}



# 使用 filter 需满足所有查询条件
GET /books/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "price": {
              "gte": 20,
              "lte": 100
            }
          }
        },
        {
          "term": {
            "language": "java"
          }
        }
      ]
    }
  }
}



在这里插入图片描述

在这里插入图片描述
在这里插入图片描述



highlight高亮

highlight 关键字: 可以让符合条件的文档中的关键词高亮。

highlight相关属性:

  • pre_tags 前缀标签
  • post_tags 后缀标签
  • tags_schema 设置为styled可以使用内置高亮样式
  • require_field_match 多字段高亮需要设置为false



基本使用

示例数据

#指定ik分词器
PUT /products
{
  "settings" : {
      "index" : {
          "analysis.analyzer.default.type": "ik_max_word"
      }
  }
}

PUT /products/_doc/1
{
  "proId" : "2",
  "name" : "牛仔男外套",
  "desc" : "牛仔外套男装春季衣服男春装夹克修身休闲男生潮牌工装潮流头号青年春秋棒球服男 7705浅蓝常规 XL",
  "timestamp" : 1576313264451,
  "createTime" : "2019-12-13 12:56:56"
}

PUT /products/_doc/2
{
  "proId" : "6",
  "name" : "HLA海澜之家牛仔裤男",
  "desc" : "HLA海澜之家牛仔裤男2019时尚有型舒适HKNAD3E109A 牛仔蓝(A9)175/82A(32)",
  "timestamp" : 1576314265571,
  "createTime" : "2019-12-18 15:56:56"
}



测试

GET /products/_search
{
  "query": {
    "term": {
      "name": {
        "value": "牛仔"
      }
    }
  },
  "highlight": {
    "fields": {
      "*": {}
    }
  }
}

在这里插入图片描述



自定义高亮标签

可以在highlight中使用pre_tagspost_tags

GET /products/_search
{
  "query": {
    "multi_match": {
      "query": "牛仔",
      "fields": ["name","desc"]
    }
  },
  "highlight": {
    "pre_tags": ["<span style='color:red'>"], 
    "post_tags": ["</span>"], 
    "fields": {
      "*": {}
    }
  }
}

在这里插入图片描述



多字段高亮

之前的案例中,都是查询匹配哪些字段,highlight高亮标签中才有这些字段数据。我们也可以指定多字段都可以有高亮数据

使用多字段高亮就需要把require_field_match 参数的值设置为false

# 多字段高亮
# require_field_match属性设置为false 在fields中指定多个字段
GET /products/_search
{
  "query": {
    "match": {
      "name": "牛仔"
    }
  },
  "highlight": {
    "pre_tags": ["<span style='color:red'>"], 
    "post_tags": ["</span>"], 
    "require_field_match": "false", 
    "fields": {
      "name": {},
      "desc": {}
    }
  }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2045549.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里财报透视:谁在投入?谁在收缩?

8月15日晚&#xff0c;阿里巴巴发布2025财年Q1业绩。由于阿里今年频繁对外表态&#xff0c;所以市场也很关注这份财报能不能反映一点东西。 此前5月的年报电话会&#xff0c;阿里 CFO 徐宏曾说&#xff0c;阿里密切关注ROI。而到了7月&#xff0c;又有媒体报道称阿里内部已达成…

李晨晨的嵌入式学习 DAY27

今天主要学习了线程的两种退出方式以及分离线程和互斥锁 一&#xff0c;进程结束 1.从线程执行函数中return 2.pthread_cancel发送取消请求 3.任何一个函数使用exit或主函数return 二&#xff0c;线程资源的回收 1.pthread_join 主线程关系子线程状态 昨天有提到 2.pthrea…

嵌入式人工智能ESP32(4-PWM呼吸灯)

1、PWM基本原理 PWM&#xff08;Pulse-width modulation&#xff09;是脉冲宽度调制的缩写。脉冲宽度调制是一种模拟信号电平数字编码方法。脉冲宽度调制PWM是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式。所以根据面积等效法则&#xff0c;…

【Python机器学习】FP-growth算法——构建FP树

在第二次扫描数据集时会构建一棵FP树。为构建一棵树&#xff0c;需要一个容器来保存树。 创建FP树的数据结构 FP树要比书中其他树更加复杂&#xff0c;因此需要创建一个类来保存树的每一个节点&#xff1a; class treeNode:def __init__(self,nameValue,numOccur,parentNode…

【GLM-4微调实战】GLM-4-9B-Chat模型之Lora微调实战

系列篇章&#x1f4a5; No.文章1【GLM-4部署实战】GLM-4-9B-Chat模型本地部署实践指南2【GLM-4部署实战】GLM-4-9B-Chat模型之对话机器人部署测试3【GLM-4部署实战】GLM-4-9B-Chat模型之vLLM部署推理实践4【GLM-4微调实战】GLM-4-9B-Chat模型之Lora微调实战 目录 系列篇章&…

SpringBoot整合SMS短信服务

SpringBoot整合SMS短信服务 概览pom依赖yml配置配置类service 层interfaceimpl controller层 概览 了解阿里云用户权限操作开通阿里云短信服务添加短信模板添加签名编写测试代码编写可复用的微服务接口&#xff0c;实现验证码的发送 pom依赖 <!--aliyun 短信服务--> &l…

【项目方案】IP地址地理解析方案对比与选型

目前&#xff0c;许多项目在用户发布言论时需要解析其 IP 地址&#xff0c;并且在账号管理中也有查看最近登录地的需求。然而&#xff0c;市面上的相关教程通常缺乏全面性&#xff0c;往往只提供一种简单的方法&#xff0c;导致在技术方案选型时难以进行有效的方案对比。本文旨…

前端工程化-05.Vue项目开发流程

一.Vue项目开发流程 import是导入模块&#xff0c;而export是导出模块 以.vue结尾的为vue组件文件&#xff0c;是我们Vue项目开发时经常操作的组件 <template>&#xff1a;模板部分&#xff0c;由他生成HTML代码 相当于vue当中的视图部分 <script>&#xff1a;…

C++:缺省参数、函数重载、引用

目录 一、缺省参数 二、函数重载 三、引用 3.1 引用的概念和定义 3.2 引用的特征 3.3 引用的使用 3.4 const引用 3.5 指针和引用的关系 一、缺省参数 • 缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值&#xff0c;在调用该函数时&#xff0c;如果没有指定实参…

数据结构预备知识

目录 1. 什么是集合框架 2. 什么是数据结构 3. 容器背后对应的数据结构 4. 相关java知识 5. 时间复杂度 6. 空间复杂度 7. 包装类 7.1 装箱和拆箱 7.2 阿里面试题&#xff1a; 8. 泛型 8.1 泛型的语法 8.2 泛型怎样编译 9. 泛型的上界 9.1 语法 9.2 泛型方法 1.…

网络通信要素

网络介绍 定义&#xff1a;将具有独立功能的多台计算机通过通信线路和通信设备连接起来&#xff0c;在网络管理软件及网络通信协议下&#xff0c;实现资源共享和信息传递的虚拟平台。 学习网络的目的&#xff1a; 能够编写基于网络通信的软件或程序&#xff0c;通常来说就是网…

CentOS7下制作openssl1.1.1i RPM包并升级

OpenSSL最新漏洞 OpenSSL官方发布了拒绝服务漏洞风险通告&#xff0c;漏洞编号为CVE-2020-1971 漏洞详情 OpenSSL是一个开放源代码的软件库包&#xff0c;应用程序可以使用这个包来进行安全通信&#xff0c;避免窃听&#xff0c;同时确认另一端连接者的身份。这个包广泛被应…

爆了,20w点赞!收好这6个可以一键替换视频人物的AI工具!(建议收藏)

用 AI 一键替换视频中人物角色的玩法&#xff0c;彻底被网友们带火了&#xff01; 前有机器人插秧、机器人做饭做家务的视频&#xff0c;后有机器人打乒乓球、美女踢足球的视频。 这类视频动辄几万、几十万点赞&#xff0c;流量也太猛了&#xff01; 图片可能不太直观&#x…

时空自回归模型(STAR)及 Stata 具体操作步骤

目录 一、引言 二、文献综述 三、理论原理 四、实证模型 五、稳健性检验 六、程序代码及解释 附录 数据预处理 生成时空权重矩阵 一、引言 时空自回归模型&#xff08;Spatial-Temporal Autoregressive Model&#xff0c;简称 STAR&#xff09;在分析具有时空特征的数…

Java填充PDF并返回填充后PDF文件及对应base64码

前期准备 下载PDF编辑工具&#xff08;Adobe Acrobat 9 Pro&#xff09;&#xff1a; 可以主页关注小程序【白哥Java】回复【PDF编辑软件】即可获取 或者直接联系博主也可 主页如下&#xff1a; 软件使用流程 此处流程为文本域流程 图片或其他大致相同 生成模板PDF样式如下&…

Linux命令行参数与环境变量

目录 命令行参数与环境变量 命令行参数 环境变量及其相关概念 环境变量的相关操作 环境变量的本质 命令行参数与环境变量 命令行参数 我们在使用一些Linux的一些指令时&#xff0c;会有意或无意的使用一些指令参数&#xff0c;例如&#xff1a; ls -al ps -ajx gcc -o …

CVE-2024-38077 微软 RDP 漏洞修复 报错 不适用于你的计算机 解决方法

这一漏洞存在于Windows远程桌面许可管理服务&#xff08;RDL&#xff09;中&#xff0c;该服务被广泛部署于开启Windows远程桌面&#xff08;3389端口&#xff09;的服务器&#xff0c;用于管理远程桌面连接许可&#xff0c;也有文章认为该漏洞实际利用的是135端口。攻击者无需…

【大模型】多模态的原理简述

多模态的原理 多模态模型目前基本就是文生图、图生图、图生视频、文生视频这些&#xff0c;其底层逻辑其实还是先从生图片这一源头。因为毕竟视频也是若干帧的图片组成。 所以在生图片的这个环节上&#xff0c;我们把比较火的这个stablediffusion用的这个diffusion扩散模型理…

企业大数据治理管理平台解决方案(33页PPT)

方案介绍&#xff1a; 本解决方案旨在为企业提供一套从数据采集、存储、处理、分析到应用的全链条大数据治理管理平台。该平台通过集成先进的数据技术和管理理念&#xff0c;帮助企业实现数据的全生命周期管理&#xff0c;提升数据质量&#xff0c;降低数据风险&#xff0c;促…

PX4-Autopolite linux环境下源码编译中遇到的一些问题及相应解决办法

最近在做一个PX4飞控移植的项目&#xff0c;第一次接触到PX4源码&#xff0c;真的是感觉编译起来非常的麻烦&#xff0c;下面我将介绍几个新手比较容易踩坑的点。 &#xff08;我都踩了ㄒ-ㄒ&#xff09; 1.PX4源码要用git clone 从github上克隆来&#xff0c;千万不要直接在g…