LLM大语言模型项目知识点总结——数据库:Elasticsearch、Milvus

应用到的数据库:Elasticsearch、Milvus

一、Elasticsearch

1.1 简介

Elasticsearch 是一个分布式的、基于 RESTful API 的搜索和分析引擎,广泛用于大规模的数据存储和快速检索。(就是一个数据库)

1.2 ES中的基本概念

ES的基本概念除了集群、节点之外,还有:索引、Mapping、文档、字段、分词、分词器、分片、副本、倒排索引。

  1. 索引:索引是某一类文档的集合,类似Mysql的数据库。

  2. Mapping:Mapping是定义索引中有哪些字段,以及字段类型,以及字段是否会分词等,类似数据库中定义的表结构。

  3. 文档:文档就是索引里的一条记录,类似数据库表中的一行记录。

  4. 字段:文档有一个或多个字段,每个字段有指定的类型,常用的类型有:keyword、text、数字类型(integer、long、float、double等)、日期类型、对象类型等。
    类型是text类型时,创建文档时ES会对该字段进行分词操作,其余类型则不会做分词。

  5. 分词:ES里最核心的概念就是分词了,ES会对text类型的字段进行分词,分词后就会得到一个个的词项,常用Term表述。

  6. 分词器:ES里有各种各样的分词器,用于不用场景下对text类型的字段进行分词。

  7. 分片:分片实际上是将某个索引的数据切分成多个块,然后均匀地将各个块分配到集群里的各个Node节点上。可以通过ES的策略查找数据块所在的Node。
    这种方案是面向海量数据而设计的,这样数据可以分布在各个节点上,数据量扩张时通过扩充Node数量来快速解决。

  8. 副本:只要涉及到分布式的场景,几乎都有副本的概念。副本主要是为了备份数据,保障数据的安全性。同时也可以将查询请求分摊到各个副本里,缓解系统压力,提高吞吐量。
    ES里的数据分为主分片和副本分片,写数据时先写入主分片,然后在异步写入副本分片。

  9. 倒排索引:比如我们常用的数据库索引,是把索引字段建立目录,保存目录和数据的关系,然后根据目录去查找文档,使用 B+ 树来实现。
    但是倒排索引(又称反向索引),是根据分词后的Term与文档建立关系,每个Term都对应着一堆文档,然后搜索文本时先将文本分词,然后去匹配Term,然后再去根据匹配的得分找出相关文档。

1.3 DSL查询文档

Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括:

  1. 查询所有:查询出所有数据,一般测试用。例如:match_all
  2. 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:match_query、multi_match_query
  3. 精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。
  4. 地理(geo)查询:根据经纬度查询。
  5. 复合(compound)查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。

1、查询所有文档:

GET /order/_search
{
   
  "query":{
   
    "match_all":{
   }
  }
}

2、全文检索(full text)查询:
match查询,查询字段name中包含5G的文档

GET /order/_search
{
   
  "query":{
   
    "match": {
   
      "name": "5G"
    }
  }
}

multi_match查询,返回字段name或者user.address.keyword包含天津市的文档

GET /order/_search
{
   
  "query":{
   
    "multi_match": {
   
      "query": "天津市",
      "fields": ["user.address.keyword&#

你可能感兴趣的:(语言模型,数据库,elasticsearch)