理解Es的DSL语法(一):查询

news2024/11/29 22:36:46

目录

DSL相关联的基本概念

ElasticSearch的字段类型

ElasticSearch的查询类型

DSL语法

query

普通查询

布尔查询 

 字符串构建查询

_source 

from和size

sort 

关于sort和查询的相关性评分

关于sort的性能


DSL相关联的基本概念

Es的DSL并不是独立的知识点,是需要和Es的存储类型和查询类型相关联,所以在进行DSL语法的解析之前,需要先硬性理解或者说记录这两个内容

ElasticSearch的字段类型

es中的文档是以Json的格式存在,像关系型数据库一样,在使用时需要通过Mapping进行内容的预定义(虽然Es本身可以根据插入的数据进行自动的类型识别,但是最好还是在写入数据之前进行数据建模为好,毕竟自动识别是存在误差的),而Mapping定义中除了定义索引相关的信息外,最重要的就是索引内存储文档的各个字段类型(像关系型数据库中定义表结构时,需要指名每个 cloum的字段类型是varchar还是date)。

例如一个student索引,我们存储的内容包括,学号、姓名、年龄、性别、年级、宣言,那么一个学生的信息在es中的文档应该是:

{
 "stu_no":"sadfas213213312",
 "name":"张三",
 "level":"3"
 "age":9,
 "sex":"男",
 "desc":"阳光向上,积极进取"
}

 这么一种Json结构,在进行Es存储以及后续的检索时,各个字段的数据类型和性能以及查询语句的写法都息息相关,例如年纪,使用中可能需要经常被聚合统计,设置为keyword会更好,desc这种可能需要被快速查询,就需要用到可分析类型(text)……

Es的常用的存储类型有:

es的字段类型
字段类型使用场景是否分词是否纳入倒排索引其他
Text适用于需要进行全文搜索的字段,可存放内容性质、描述性质的数据,如文章内容唯一的可分析字段,Es会对该类型的字段内容进行分析、分词,并把词项纳入倒排索引中
keyword类似于varchar,用于存放简短的字符串性质内容,例如状态码、姓名、账号等keyword不进行分词,但是内容会整个被倒排索引纳入作为一个词项,适用于精确匹配、聚合
Integer, Short, Long, Byte数值类型,用于存储整数注:对于数字类型的字段,Elasticsearch 会为它们构建一个数值索引(Numeric Index),这种索引允许高效的数值范围查询和排序操作。数值索引不包含文本分析和分词,因此它们不适合用于搜索包含文本的查询。
Double, Float, Half_Float数值类型,用于存放浮点数
Date存储日期和时间

1. 日期字段存储为时间戳,查询时和数值类型一样使用数值索引来优化查询

2.在聚合和排序时,通过DocValues、fielddata来提高性能

3.针对日期类型,在查询、聚合时,Es都提供方便的计算和处理

Boolean存放布尔值
Object存储复杂数据结构,例如嵌套JSONObject类型虽然不会被纳入倒排索引,但是内容中可以包含倒排索引的字段
Nested存储嵌套对象数组慎用,对于此类型在查询、聚合时都较为麻烦
Ip专门用于存储 IP 地址使用该类型,Es可以提供一些针对Ip的操作和运算较为方便

ElasticSearch的查询类型

Es中的查询类型又叫查询句柄,如果类比SQL语法,这里的查询类型就类似于SQL中WHERE部分的内容,例如= 、< 、>、LIKE、NOT之类。

Es的查询类型较多,在这里就放一些常用的,对于特殊需求的,可以查阅详细官方文档。

Es常用查询类型
查询类型使用场景适用字段类型缓存情况
Match Query

用于全文搜索,可以进行分词和分析,类似于 SQL 中的 LIKE 查询。

Text使用queryCache,但由于全文搜索的复杂性,缓存效果可能不如 Term Query。
Prefix Query用于查找以特定前缀开头的词项Keyword、Text(不进行分词的情况下)使用queryCache,尤其是当字段是 Keyword 类型时效果更佳
Multi-Match Query允许在多个字段上执行全文搜索Text使用queryCache,但可能因跨多个字段而降低缓存效率
Term Query用于查找与指定词项(term)完全匹配的文档Keyword、Boolean、Integer、Short、Long、Byte、Double、Float、Date、IP通常使用普通的queryCache,如果字段是 Keyword 或 Date 类型,并且查询是精确匹配,也可能使用字段数据缓存(fielddata cache)
Range Query用于查找在指定数值或日期范围内的文档Integer、Short、Long、Byte、Double、Float、Date不使用查询缓存
Wildcard Query

支持使用通配符(如 * 和 ?)进行搜索

Keyword、Text通常不使用查询缓存,因为通配符查询可能涉及大量文档
Fuzzy Query允许进行模糊搜索,可以容忍一定数量的拼写错误Keyword、Text不使用查询缓存
Bool Query

允许组合多个查询条件,使用 AND、OR 和 NOT 逻辑

因为其内部可以嵌套其他查询类型,所以适配所有字段类型使用QueryCache,但缓存效率取决于子查询的复杂性和可缓存性
Nested Query用于在嵌套对象中执行查询Nested不使用查询缓存
Script Query允许使用脚本语言(如 Painless)执行自定义查询根据脚本内容决定适配的字段类型不使用查询缓存

关于缓存内容可以参考上一篇文章,详细的查询类型使用方法会在下文中提及

DSL语法

先看一下DSL的语法,DSL常用的有查询、返回内容、排序、条数、以及聚合

{
    "query":{},   // 查询
    "_source":[], //返回内容
    "sort":[],    //排序
    "from":0,     // 起始位置
    "size":10,    // 返回条数
}

以常用的SQL进行对照理解大约是这样的:

DSLSQL解释
querySELECT

name,age

FROM  student

WHERE

home = '饭都花园'

ORDER BY

stu_no DESC

LIMIT

0, 10
相当于SQL中的WHERE起手,此次内容为查询的条件
_sourceSELECT
name,age
FROM  student
WHERE
home = '饭都花园'
ORDER BY
stu_no DESC
LIMIT
0, 10
相当于SQL中SELECT关键字后指定此次查询需要的字段,DSL中通过_source来指定一次查询中需要返回json文档中的哪些字段的内容
from、sizeSELECT
name,age
FROM
student
WHERE
home = '饭都花园'
ORDER BY
stu_no DESC
LIMIT
0, 10
相当于SQL中的返回条数limit,指定多少条数据开始,返回多少个数据
sortSELECT
name,age
FROM
student
WHERE
home = '饭都花园'
ORDER BY stu_no DESC
LIMIT 0, 10
相当于SQL中的ORDER BY排序字段,即查询出的数据是以JSON文档中哪个字段以何种方式排序
aggsSELECT
stu_id
FROM student
WHERE
home = '饭都花园'
GROUP BY stu_id
相当于SQL中的Group BY操作,即对某个字段内容进行聚合

query

其中query关键字是查询中最核心的部分,它是上文中提到的查询类型的集中区,不论是查询功能方面,还是查询性能方面,query的操作性是最多的;从查询类型上来看query又可以分为普通查询、过滤查询、布尔查询、字符串构建查询:

普通查询

普通查询一般使用match查询类型,是最常见的查询语句,只针对类型为text的字段才生效,此查询为全文检索;全文检索会影响返回结果的相关性得分,这意味着Elasticsearch会计算每个匹配文档的相关性,并按照得分排序返回结果

//一个普通的全文查询
{ "query": { "match": { "context": "this is a boy" } } }
// 包含顺序的词短语搜索
{ "query": { "match_phrase": { "context": "搜索引擎" } } }

过滤查询其实也可以算在简单查询里,即都是通过query下一层直接使用查询句柄(查询类型),不同的是使用的查询类型,过滤查询一般使用的查询句柄为 term、range这种查询类型

//等于逻辑筛选 name = 张三
{ "query": { "term": { "name": "张三" } } }
//范围筛选 , age >= 10 ,age =< 20
{ "query": { "range": { "age": { "gte": 10,"lte":20 } } } }

使用term、range这种查询句柄相较于match、match_phrase来说,不会影响相关性得分,过滤查询的结果不会根据相关性进行排序,它们只是简单地确定文档是否应该被包含在结果集中,减少了排序步骤,性能上会好一些。

布尔查询 

布尔查询就是在query关键字下使用布尔查询类型来进行查询,相比于简单查询,仅能使用一种逻辑查询,布尔查询可以理解为复杂查询,即可以使用逻辑关系组合条件,布尔查询包含四个逻辑组,must(且)must_not(非)should(或)filter(且),组成方式是在query下存放逻辑组,逻辑组中放查询句柄:

关键字含义用法
must”是“条件组,参数类型为[]数组内可配多个查询句柄,各查询句柄之间为且的关系
must_not”否“条件组,参数类型为[]数组内可配多个查询句柄,每个查询句柄为逻辑取反
should”或“条件组 ,参数类型为[]数组内可配多个查询句柄,各查询句柄之间为或的关系
filter筛选器,参数类型为[]数组内可配多个查询句柄,查询句柄的关系也为且关系,且使用filter的可以忽略相关性得分,考虑性能可使用filter替代must
{
    "query":{
      "bool":{
         "must":[], //且
         "should":[], // 或
         "must_not":[] // 非    
       }
   }
}

例如以下几个例子

# 查询 性别是女的或者 年龄大于30岁且教授语文的老师
SELECT * FROM tb_teach WHERE  sex = 1 OR ( age > 30 AND role = '语文' )

对应使用Es的布尔查询则是:

{
    "query":{
      "bool":{
         "should":[   //对应SQL中最高层的 OR 逻辑
             {
               "term":{ "sex":1}
             },
             {
               "bool":{ // 对应 SQL中二层里的AND逻辑
                  "must":[
                        {"range": { "age":{ "gt":30 }  } }, //age > 30
                        {"term":{ "role":"语文"  } // role = 语文
                   ]// end must
               }    
             }
          ]   // end should
       }
   }
}
#查询不教语文,且年龄在20-30之间的老师
SELECT * FROM tb_teach WHERE  role != '语文' AND age BETWEEN 20 AND 30

#对应的DSL:
 {
    "query":{
      "bool":{
         "must":[   //对应SQL中最高层的 AND 逻辑
             {
                "bool":{ "must_not":[{"term":{ "role":"语文"}}]  }
             },
             {
                "range":{  
                   "age":{
                       "gte":20,
                        "lte":30
                     }
                }
             }
          ]   
       }
   }
}
#查询名字为张三且年龄为12岁,或者部门不在人事部且年龄在10到20岁之间的人
SELECT 
   * 
FROM 
   USER 
WHERE 
  (name = "张三" AND age = 12) OR (dept != "人事部" AND age >= 10 AND age<=20 )

#对应的DSL
{
    "query":{
        "bool":{
            "should":[        //对标SQL 中 的 OR
                {
                    "bool":{
                        "flter":[    //对标SQL 中 OR左侧()中的AND
                            {
                                "term":{
                                    "name":"张三"
                                }
                            },
                            {
                                "term":{
                                    "age":12
                                }
                            }
                        ]
                    }
                },       // ↑ 为OR左侧的() 中的条件
                {
                   "bool":{
                       "must_not":[   // 对标dept != "人事部"
                         {
                             "term":{
                                 "dept":"人事部"
                             }
                         }  
                       ],
                       "filter":[
                           {
                               "range":{
                                   "age":{
                                       "gte":10,
                                       "lte":20
                                   }
                               }
                           }
                       ]
                   }   
                }    ↑ 为OR右侧的() 中的条件
            ]
        }
    }
}

可以看到,布尔查询也可以被当作逻辑组(must、filter、should、must_not)的一个条件 ,逻辑是可以嵌套的,可以根据需求,选择不同的逻辑组,通过不同的嵌套组合就可以完成复杂逻辑的查询。

另外一点就是must和filter,它俩都可以表示且的关系,但是在执行原理和性能上会有不同:

关键字作用缓存
filter用于定义查询的过滤条件,这些条件用于限制返回的文档集合。过滤条件通常用于结构化数据(如数值范围、日期范围、确切的值匹配等)通常会对 filter 子句使用缓存,这意味着如果相同的过滤条件被多次使用,它们的执行结果可以被缓存和重用,从而提高查询性能
must用于定义查询的搜索条件,这些条件用于计算文档的相关性得分。must 子句中的查询通常用于全文搜索,影响返回文档的排序must 子句通常不使用缓存,因为它们影响文档的相关性得分,每次查询可能都会产生不同的结果

对于结构化的查询,建议优先使用filter

 字符串构建查询

字符串构建查询也是Es常用的一种查询,它适用于需要复杂文本搜索的场景,如搜索引擎的查询框。它允许用户以类 SQL 的方式执行复杂的文本搜索,使用一个查询字符串来构建查询,支持多种查询语法和操作符,使用关键字为:query_string

{
  "query": {
    "query_string": {
      "query": "title:guide AND (title OR body):Elasticsearch"
     }
  }
}

这里主要是query_string中的query内容,它是一个类SQL的语法,表示我们要查询 (titile字段中包含“guide”词项) 且 (title字段或者body字段中包含"Elasticsearch"词项)的文章,这里query支持的形式包含:

  • 布尔逻辑(AND, OR, NOT)
  • 通配符搜索(使用 * 和 ?
  • 模糊搜索(使用 ~ 后跟编辑距离)
  • 正则表达式搜索(使用 / 包围)
  • 短语搜索(使用双引号 " " 包围词组)
  • 字段特定搜索(使用 FIELD: 指定字段)
  • 提升(Boosting)搜索词项(使用 ^ 后跟提升值)

一个完整的query_string还包含字符串查询的一些控制项:

{
  "query": {
    "query_string": {
      "query": "title:guide AND (title OR body):Elasticsearch",
      "default_operator": "AND",
      "fields": ["title", "body"],
      "use_dis_max": true,
      "tie_breaker": 0.3,
      "minimum_should_match": "2<75%",
      "boost": 1.0,
      "analyzer": "standard",
      "quote_field_suffix": ".exact",
      "fuzzy_max_expansions": 50,
      "fuzzy_prefix_length": 2,
      "phrase_slop": 2,
      "escape": false,
      "auto_generate_phrase_queries": true
    }
  }
}

  • default_operator:设置默认的布尔操作符。AND 表示默认使用 AND 逻辑,即所有条件都需要匹配。

  • fields:指定搜索的字段列表。这里我们在 titlebody 字段中搜索。

  • use_dis_max:当设置为 true 时,使用 dis_max 查询来组合多个字段的搜索结果,以提高相关性。

  • tie_breaker:在 use_dis_maxtrue 时,用于控制多字段搜索的相关性得分计算。

  • minimum_should_match:对于使用 OR 操作符的查询,定义至少需要匹配的最小条件数量。这里的 "2<75%" 表示至少匹配两个条件,或者匹配超过 75% 的条件。

  • boost:提升查询的整体相关性得分。

  • analyzer:指定查询时使用的分析器。

  • quote_field_suffix:后缀,用于指定精确匹配的字段版本。

  • fuzzy_max_expansions:模糊查询可以扩展的最大项数。

  • fuzzy_prefix_length:在模糊查询中,前缀的最小字符数。

  • phrase_slop:短语查询中的间隔。

  • escape:是否转义查询字符串中的特殊字符。

  • auto_generate_phrase_queries:是否自动将双引号内的词组转换为短语查询。

_source 

_source在DSL语法中是比较简单的,类比SQL中SELECT 之后的返回内容控制,即这次检索我需要查询的数据需要JSON文档中的哪几个字段,例如索引中数据:

{
  "id": "1",
  "title": "Elasticsearch Basics",
  "content": "Elasticsearch is a powerful search engine based on the Lucene library. It provides full-text search, analysis, and indexing of data. This article will guide you through the basics of Elasticsearch.",
  "date": "2024-06-08T08:00:00Z",
  "author": "John Doe"
}

查询文章标题为Elstaicsearch的文章:

#查询文章名称为Elasticsearch的文档
{
 "query":{
    "term":{
       "title":"Elasticsearch" 
    }
 }
}

#返回:
{
  "took": 10,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1.0,
    "hits": [ 
      {
        "_index": "articles",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.0,
        "_source": {  #返回了Json文档全部的字段
          "id": "1",
          "title": "Elasticsearch Basics",
          "content": "Elasticsearch is a powerful search engine based on the Lucene library...",
          "date": "2024-06-08T08:00:00Z",
          "author": "John Doe"
        }
      }
    ]
  }
}

如果只需要其中的author和context,则使用_source进行指定:


#查询文章名称为Elasticsearch的文章,需要文章作者和内容两部分
{
 "query":{
    "term":{
       "title":"Elasticsearch" 
    }
 },
 "_source":["author","context"] 
}

#返回
{
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1.0,
    "hits": [
      {
        "_index": "articles",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.0,
        "_source": {  #只根据_source指定的内容进行返回
          "author": "John Doe",
          "content": "Elasticsearch is a powerful search engine based on the Lucene library. It provides full-text search, analysis, and indexing of data."
        }
      }
    ]
  }
}

关于查询文档内容,可以根据需求和性能要求使用stored在Mapping定义阶段就使用,也可以通过_source进行灵活指定,各有利弊,详细可以参考在ElasticSearch性能原理拆解中提过Stored Fields

from和size

fromsize 是用于分页和限制返回结果集的参数,等同于SQL中的Limit语法,

from 参数指定了搜索结果中跳过的文档数量。这可以用于实现分页功能,其中第一页的结果可以跳过0个结果,第二页跳过10个结果(如果每页显示10个结果),以此类推。

size 参数定义了搜索结果中返回的最大文档数量。使用 size 可以限制返回的文档数量,这对于性能和网络带宽管理非常重要,因为它可以防止一次性返回大量数据。

例如:

#执行一个分页查询
{
  "from": 2,
  "size": 10,
  "query": {
    "match_all": {}
  }
}
#输出:
{
  "took": 5,               
  "timed_out": false,      
  "_shards": {
    "total": 5,           
    "successful": 5,      
    "skipped": 0,         
    "failed": 0           
  },
  "hits": {
    "total": {
      "value": 1000,      
      "relation": "eq"    
    },
    "max_score": 1.0,     
    "hits": [
      {
        "_index": "my_index",     
        "_type": "_doc",           
        "_id": "doc_11",          
        "_score": 1.0,             
        "_source": { ... },       
      },
      // ... 其他文档,直到第10个
    ]
  }
}

但是使用form 和size去实现分页查询存在一个问题,因为对于用户看到的是返回了10条数据,而对于Es而言则是

  • 执行 match_all 查询,匹配 my_index 索引中的所有文档。
  • 计算所有文档的相关性得分。
  • 忽略前30个文档。
  • 选择第31到40个文档。
  • 将这10个文档的相关信息返回给用户。

当不停地滑动页码,from的值越来越大时,会让Es过度计算和内存消耗,必要时会让Es抛出异常。所以,尽管form+size在分页查询的场景下是有效的,但是面对深度分页时,form+size是不推荐的,在面对大批量数据且有分页查询的诉求时,Elasticsearch推荐使用 search_after 参数,因为它可以提供更高效的分页机制。search_after 通过指定一个或多个排序值来检索结果集的一部分,这使得它可以避免重新计算所有文档的得分,从而提高性能。

sort 

sort 用于对搜索结果进行排序。sort 允许你指定一个或多个字段,根据这些字段的值对结果进行排序。以下是 sort 的使用方法:

#对查询结果,根据学号进行正序排序
{
"query": {
   "match_all": {}
},
"sort": [
    {
     "stu_no": {
        "order": "asc" //或者desc
     }
   }
 ]
}
也可以指定多个字段进行排序,第一个字段的排序完成后,如果存在相同值,则根据第二个字段排序,以此类推。

{
"query": {
   "match_all": {}
},
"sort": [
  {
    "stu_no": {
      "order": "asc"
    }
  },
  {
    "age": {
      "order": "desc"
    }
  }
]
}

还可以通过脚本进行排序

{
    "query": {
        "match_all": {}
    },
    "sort": [
        {
            "_script": {
                "type": "number",
                "script": {
                    "lang": "painless",
                    "source": "doc['age'].value * 2"
                },
                "order": "asc"
            }
        }
    ]
}

关于sort和查询的相关性评分

使用 sort 语句在 Elasticsearch 中对查询结果进行排序不会直接影响查询的相关性评分(_score)。相关性评分是由查询自身的算法决定的,例如 match 查询或 term 查询等,这些查询根据文档与查询条件的匹配程度来计算每个文档的得分。

sort 语句通常用于在相关性评分的基础上对结果进行进一步的排序。例如,当你使用 match_all 查询时,所有文档的相关性评分可能相同,此时你可以使用 sort 来根据其他标准(如日期、数值字段等)对结果进行排序。

  • 独立性: sort 操作是独立的,它基于你指定的字段和排序顺序对文档进行排序,与文档的相关性评分无关。
  • 组合使用: 你可以在任何类型的查询之后使用 sort,包括那些返回相关性评分的查询。
  • 优先级: 当使用 bool 查询时,可以在 mustshouldfilter 子句中组合多个查询,并使用 sort 来确定最终的排序顺序。
  • 不改变评分: 即使文档经过 sort 操作被重新排序,它们的相关性评分 (_score) 保持不变。
  • 混合使用: 你可以将基于评分的排序与基于其他字段的排序混合使用。例如,首先根据相关性评分降序排序,然后根据日期字段升序排序。

关于sort的性能

使用 sort 可能会对查询性能产生影响,虽然DocValues的存在会对sort有一定的优化,但是DocValues不是适用所有字段:

  • keyword:对于keyword类型的字段,会默认使用 DocValues 存储

  • 数值和日期: 对于数值(如 integerfloatdouble)和日期(date)类型的字段,默认使用 DocValues 存储。

  • Text:文本(text)类型的字段默认不使用 DocValues,它需要经过分析(analysis)来支持全文搜索。但是,可以为 text 字段显式定义一个 keyword 子字段,该子字段将使用 DocValues。

使用 search_after 进行深度分页时,排序字段必须在索引时定义为 docValues,以便高效地检索和排序。

关于聚合部分,放在下一篇介绍:

理解DSL语法(二):聚合

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

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

相关文章

深入理解计算机系统 家庭作业6.35

第一步先求(S,E,B,m) 题目说共C128个字节,块大小B为16个字节,那就是分为八组:0,1,2,3,4,5,6,7.然后每组存4个int 每个4字节 CB*E*S .B16 ,直接映射的E就是1,所以S8 (S,E,B,m)(8,1,16,7) C128M128s3b4t0 sizeof(int)0100地址(二进制)COCIsrc[0][0]00000000000000组0src[0][1…

气膜球幕影院:大众追捧的全新体验—轻空间

近年来&#xff0c;气膜球幕影院因其独特的观影体验和灵活的应用&#xff0c;受到了广大观众的热烈欢迎。轻空间带您来探讨一下气膜球幕影院为何如此受欢迎。 沉浸式体验的吸引力 气膜球幕影院的360度全景沉浸式体验&#xff0c;让观众仿佛置身于影片的世界中。这种前所未有的观…

【计算机视觉】人脸算法之图像处理基础知识(一)

图像处理基础知识&#xff08;一&#xff09; 1.图像的构成 图像的构成可以包括以下几方面知识&#xff1a; 1.像素&#xff1a;图像的基本单位&#xff0c;是图像中的一个点。每个像素都有特定的位置和色彩值。在数字图像中&#xff0c;像素的颜色通常由红、绿、蓝&#xf…

cocos creator如何使用cryptojs加解密(及引入方法)

cocos creator如何使用cryptojs加解密&#xff08;及引入方法&#xff09; 如果想转请评论留个言并注明原博 Sclifftop 13805064305 阿浚 cocos creator如何使用cryptojs加解密&#xff08;及引入方法&#xff09; 步骤 获取库 1. npm install crypto-js -g&#xff0c;加不加…

跨域问题以及解决方案

文章目录 1.什么是跨域访问&#xff1f;2. AJAX 请求无法跨域访问的原因&#xff1a;同源策略3. 解决AJAX跨域访问的方案包括哪些3.1 代理服务器方案的实现原理 1.什么是跨域访问&#xff1f; (1) 在a页面中想获取b页面中的资源&#xff0c;如果a页面和b页面所处的协议、域名、…

如何在Spring Boot中实现图片上传至本地和阿里云OSS

在开发Web应用时&#xff0c;处理文件上传是常见的需求之一&#xff0c;尤其是在涉及到图片、视频等多媒体数据时。本文将详细介绍如何使用Spring Boot实现图片上传至本地服务器以及阿里云OSS存储服务&#xff0c;并提供完整的代码示例。 一、上传图片至本地 首先&#xff0c…

五、Nginx配置文件-server模块

目录 一、概述 二、虚拟主机设置的三种形式 1、基于端口号配置 2、基于域名配置 3、基于ip配置 三、常用参数 1、listen 2、server_name 3、location 3.1、常见的Nginx正则表达式 3.2、location正则&#xff1a; 3.3示例 4、root 5、index 6、error_page 7、deny…

C#——结构体详情

结构体 结构体也被称为结构类型&#xff08;“structure type”或“struct type”&#xff09;&#xff0c;它是一种可封装数据和相关功能的值类型&#xff0c;在语法上结构体与类&#xff08;class&#xff09;非常相似&#xff0c;它们都可以用来封装数据&#xff0c;并且都…

笔记本电脑安装属于自己的Llama 3 8B大模型和对话客户端

选择 Llama 3 模型版本&#xff08;8B&#xff0c;80 亿参数&#xff09; 特别注意&#xff1a; Meta 虽然开源了 Llama 3 大模型&#xff0c;但是每个版本都有 Meta 的许可协议&#xff0c;建议大家在接受使用这些模型所需的条款之前仔细阅读。 Llama 3 模型版本有几个&…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第八周) - 现代大语言模型

现代大语言模型 1. GPT-32. 上下文学习 2.1. 零样本提示2.2. 少样本提示2.3. 归纳头 3. 对齐 3.1. 指令微调3.2. 基于人类反馈的强化学习3.3. 事实与幻觉 1. GPT-3 GPT系列论文 GPT-1(2018): Improving Language Understanding by Generative Pre-TrainingGPT-2(2019): Lang…

missing authentication credentials for REST request

1、报错截图 2、解决办法 将elasticsearch的elasticsearch.yml的 xpack.security.enabled: true 改为 xpack.security.enabled: false

字节智能体平台:扣子原理和实践案例

完整内容&#xff1a; 字节智能体平台&#xff1a;扣子原理和实践案例

JAVA小知识20:万字详解List与ArrayList

一、集合简介 1.1、什么是集合&#xff1f; 可同时存储多个元素的数据结构就是集合。 1.2、为什么要有集合&#xff1f; 我们可以使用数组同时存储多个元素&#xff0c;但是数组有个弊端。数组创建之后长度就会固定&#xff0c;如需扩容则需要手动扩容&#xff0c;我们需要…

MEGALODON:突破传统,实现高效无限上下文长度的大规模语言模型预训练和推理

在人工智能领域&#xff0c;尤其是在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;大模型&#xff08;LLMs&#xff09;的预训练和推理效率一直是研究的热点。最近&#xff0c;一项突破性的研究提出了一种新型神经网络架构——MEGALODON&#xff0c;旨在解决传统Tran…

2024年武汉市中级、高级职称水测考试开卷方法分享

2024年武汉市&#xff08;除开东湖高新区外&#xff09;职称首次组织全员水测&#xff0c;先考水测后报名&#xff0c;水测报名在5月16号截止。 武汉市水测组织形式&#xff1a; 武汉市2024年专业技术职务水平能力测试分为笔试和面试&#xff0c;面试答辩有关事项另行通知&…

全息图分类及相位型全息图制作方法

全息图是一种光学器件&#xff0c;全息图分为振幅型和相位型全息图&#xff0c;振幅型全息图记录光的振幅信息即强度信息&#xff0c;相位型全息图记录光的相位信息&#xff0c;利用相位信息可以恢复光的波前形状&#xff0c;从而记录物体形状&#xff0c;这里主要介绍相位全息…

C# Winform 用户控件,扩展控件,自定义控件综合实例

Control类是Windows窗体控件的基类&#xff0c;它提供了在 Windows 窗体应用程序中进行可视显示所需的基础结构&#xff0c;可以通过继承来扩展熟悉的用户控件和现有控件的功能。本列介绍三种不同自定义控件以及怎么创建他们。 自定义控件分类 用户控件&#xff1a;基本控件的…

django学习入门系列之第二点《浏览器能识别的标签1》

文章目录 文件的编码(head)网站表头信息(head)标题&#xff08;body&#xff09;div和span往期回顾 文件的编码(head) <!--浏览器会以"UTF-8"这种编码来读取文件--> <meta charset"UTF-8">网站表头信息(head) <title>Title</title&…

React Native将 ipad 端软件设置为横屏显示后关闭 Modal 弹窗报错

问题&#xff1a; 将 ipad 端软件设置为横屏显示后&#xff0c;关闭 Modal 弹窗报错。 Modal was presented with 0x2 orientations mask but the application only supports 0x18.Add more interface orientations to your apps Info.plist to fix this.NOTE: This will cras…

移动端超超超详细知识点总结(Part3)

flex布局体验 1. 传统布局与flex布局 传统布局&#xff1a; 兼容性好布局繁琐局限性&#xff0c;不能再移动端很好的布局flex 弹性布局&#xff1a; 操作方便&#xff0c;布局极为简单&#xff0c;移动端应用很广泛PC 端浏览器支持情况较差IE 11或更低版本&#xff0c;不支持…