Elasticsearch文档全面解析

一、基础认识

1、Elasticsearch是一个分布式的开源搜索和分析引擎,可以快速地存储、搜索和分析大量数据。

2、Elasticsearch是基于Lucene库构建的,Lucene是一个高性能、可扩展、全文搜索库,Elasticsearch在其基础上进行改善。

3、Elasticsearch使用分布式架构,可以在多个节点上存储和处理数据,使得可以横向扩展。

4、Elasticsearch具有强大的查询能力,支持全文检索、复合查询、地理位置查询等各种查询方式。

二、使用Elasticsearch

1、安装和配置Elasticsearch

// 下载Elasticsearch并解压
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.0-linux-x86_64.tar.gz
tar -zxvf elasticsearch-7.14.0-linux-x86_64.tar.gz

// 修改配置文件config/elasticsearch.yml
cluster.name: my_elasticsearch_cluster
node.name: my_elasticsearch_node
network.host: 0.0.0.0

2、索引操作

// 创建索引
PUT /my_index

// 在指定索引中创建文档
PUT /my_index/_doc/1
{
  "title": "Elasticsearch",
  "content": "Elasticsearch是一个分布式的开源搜索和分析引擎"
}

// 查询指定文档
GET /my_index/_doc/1

// 搜索索引中的文档
GET /my_index/_search
{
  "query": {
    "match": {
      "title": "Elasticsearch"
    }
  }
}

三、数据模型

1、索引是Elasticsearch数据的最小单位,相当于关系型数据库中的表,但索引中可以包含不同类型的文档。

2、文档是Elasticsearch中最基本的单位,相当于关系型数据库中的行,文档和索引一一对应。

3、字段是文档中的属性,可以是字符串、数字、日期、布尔值等多种类型,可以嵌套。

4、类型已经在Elasticsearch 7.0版本后被弃用,文档可以直接存放在索引中,不再需要指定类型。

四、查询操作

1、全文搜索

// 匹配查询
GET /my_index/_search
{
  "query": {
    "match": {
      "title": "search"
    }
  }
}

// 短语匹配查询
GET /my_index/_search
{
  "query": {
    "match_phrase": {
      "title": "Elasticsearch search"
    }
  }
}

// 多字段匹配查询
GET /my_index/_search
{
  "query": {
    "multi_match": {
      "query": "search",
      "fields": ["title", "content"]
    }
  }
}

2、过滤器

// 范围查询
GET /my_index/_search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "age": {
            "gte": 18,
            "lte": 30
          }
        }
      }
    }
  }
}

// 地理位置查询
GET /my_index/_search
{
  "query": {
    "bool": {
      "filter": {
        "geo_distance": {
          "distance": "10km",
          "location": {
            "lat": 40,
            "lon": -70
          }
        }
      }
    }
  }
}

五、聚合查询

1、常用聚合

// 分组统计
GET /my_index/_search
{
  "size": 0,
  "aggs": {
    "group_by_age": {
      "terms": {
        "field": "age"
      }
    }
  }
}

// 嵌套聚合
GET /my_index/_search
{
  "size": 0,
  "aggs": {
    "group_by_age": {
      "terms": {
        "field": "age"
      },
      "aggs": {
        "avg_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}

2、Pipeline聚合

// 计算移动平均值
GET /my_index/_search
{
  "size": 0,
  "aggs": {
    "moving_avg_balance": {
      "moving_avg": {
        "buckets_path": "group_by_age>avg_balance",
        "window": 2,
        "model": "simple"
      }
    }
  }
}

六、高级技巧

1、分片和副本

2、自定义分析

// 自定义分析器
PUT /my_analyzer_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "standard",
          "filter": ["lowercase", "my_stemmer"]
        }
      },
      "filter": {
        "my_stemmer": {
          "type": "stemmer",
          "language": "light_english"
        }
      }
    }
  }
}

// 测试分析器
GET /my_analyzer_example/_analyze
{
  "analyzer": "my_analyzer",
  "text": "Stemmers remove morphological affixes from words, leaving only the word stem."
}

3、词向量分析

// 添加词向量
PUT /my_index
{
  "settings": {
    "analysis": {
      "tokenizer": {
        "my_tokenizer": {
          "type": "whitespace",
          "filter": ["my_w2v_filter"]
        }
      },
      "filter": {
        "my_w2v_filter": {
          "type": "word2vec",
          "model_name": "my_model",
          "vector_size": 300,
          "window_size": 5,
          "min_count": 5,
          "top_terms": 10,
          "term_weighting": "tf-idf"
        }
      },
      "word2vec": {
        "models": {
          "my_model": {
            "source": "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased.tar.gz",
            "preprocessing": {
              "tokenizer": "bert-base-uncased"
            }
          }
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "text": {
        "type": "text",
        "analyzer": "my_analyzer",
        "term_vector": "with_positions_offsets",
        "store": true
      }
    }
  }
}

七、总结

本篇文章从基础认识、使用Elasticsearch、数据模型、查询操作、聚合查询和高级技巧的角度,对Elasticsearch进行了全面的阐述。希望可以帮助读者更好地理解和使用Elasticsearch。

原创文章,作者:CFSNR,如若转载,请注明出处:https://www.506064.com/n/317864.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
CFSNRCFSNR
上一篇 2025-01-11 16:28
下一篇 2025-01-11 16:28

相关推荐

  • Python应用程序的全面指南

    Python是一种功能强大而简单易学的编程语言,适用于多种应用场景。本篇文章将从多个方面介绍Python如何应用于开发应用程序。 一、Web应用程序 目前,基于Python的Web…

    编程 2025-04-29
  • 使用Spire.PDF进行PDF文档处理

    Spire.PDF是一款C#的PDF库,它可以帮助开发者快速、简便地处理PDF文档。本篇文章将会介绍Spire.PDF库的一些基本用法和常见功能。 一、PDF文档创建 创建PDF文…

    编程 2025-04-29
  • Python zscore函数全面解析

    本文将介绍什么是zscore函数,它在数据分析中的作用以及如何使用Python实现zscore函数,为读者提供全面的指导。 一、zscore函数的概念 zscore函数是一种用于标…

    编程 2025-04-29
  • 全面解读数据属性r/w

    数据属性r/w是指数据属性的可读/可写性,它在程序设计中扮演着非常重要的角色。下面我们从多个方面对数据属性r/w进行详细的阐述。 一、r/w的概念 数据属性r/w即指数据属性的可读…

    编程 2025-04-29
  • Python计算机程序代码全面介绍

    本文将从多个方面对Python计算机程序代码进行详细介绍,包括基础语法、数据类型、控制语句、函数、模块及面向对象编程等。 一、基础语法 Python是一种解释型、面向对象、动态数据…

    编程 2025-04-29
  • Python爬虫文档报告

    本文将从多个方面介绍Python爬虫文档的相关内容,包括:爬虫基础知识、爬虫框架及常用库、爬虫实战等。 一、爬虫基础知识 1、爬虫的定义: 爬虫是一种自动化程序,通过模拟人的行为在…

    编程 2025-04-28
  • Matlab二值图像全面解析

    本文将全面介绍Matlab二值图像的相关知识,包括二值图像的基本原理、如何对二值图像进行处理、如何从二值图像中提取信息等等。通过本文的学习,你将能够掌握Matlab二值图像的基本操…

    编程 2025-04-28
  • 疯狂Python讲义的全面掌握与实践

    本文将从多个方面对疯狂Python讲义进行详细的阐述,帮助读者全面了解Python编程,掌握疯狂Python讲义的实现方法。 一、Python基础语法 Python基础语法是学习P…

    编程 2025-04-28
  • 全面解析Python中的Variable

    Variable是Python中常见的一个概念,是我们在编程中经常用到的一个变量类型。Python是一门强类型语言,即每个变量都有一个对应的类型,不能无限制地进行类型间转换。在本篇…

    编程 2025-04-28
  • Zookeeper ACL 用户 anyone 全面解析

    本文将从以下几个方面对Zookeeper ACL中的用户anyone进行全面的解析,并为读者提供相关的示例代码。 一、anyone 的作用是什么? 在Zookeeper中,anyo…

    编程 2025-04-28

发表回复

登录后才能评论