您的位置:首页 > 文旅 > 美景 > 国家卫生和计划生育委员会_比较好的设计网站有哪些_宁波网站推广找哪家_腾讯广告平台

国家卫生和计划生育委员会_比较好的设计网站有哪些_宁波网站推广找哪家_腾讯广告平台

2024/10/6 22:21:08 来源:https://blog.csdn.net/golove666/article/details/142441611  浏览:    关键词:国家卫生和计划生育委员会_比较好的设计网站有哪些_宁波网站推广找哪家_腾讯广告平台
国家卫生和计划生育委员会_比较好的设计网站有哪些_宁波网站推广找哪家_腾讯广告平台

elasticsearch实战应用

Elasticsearch 是一个基于 Lucene 的开源分布式搜索引擎,主要用于全文搜索、结构化搜索、分析和数据存储。它广泛应用于日志分析、数据可视化、推荐系统等场景。以下是 Elasticsearch 在实际项目中的常见应用和操作指南。

1. Elasticsearch 核心概念

1.1 核心术语
  • 索引(Index):类似于关系型数据库中的数据库,存储数据的逻辑空间。一个索引可以包含多个文档。
  • 类型(Type):以前用于将不同类别的文档组织在同一个索引下,现在不推荐使用。
  • 文档(Document):存储在索引中的数据实体,类似于关系型数据库中的行。
  • 字段(Field):文档中的属性,类似于关系型数据库中的列。
  • 分片(Shard):索引的物理存储单元。每个索引可以拆分为多个分片,分散存储以实现分布式架构。
  • 副本(Replica):每个分片的备份副本,用于提高查询速度和故障恢复能力。
1.2 数据结构

Elasticsearch 的数据以 JSON 格式存储,每个文档是 JSON 对象。示例如下:

{"user": "Alice","message": "Elasticsearch is a powerful search engine","post_date": "2024-09-22T14:12:12","likes": 100
}

2. Elasticsearch 安装与配置

2.1 Docker 安装

使用 Docker 快速安装 Elasticsearch:

docker pull elasticsearch:8.9.0
docker run -d --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" elasticsearch:8.9.0
2.2 基本配置

Elasticsearch 配置文件通常位于 /etc/elasticsearch/elasticsearch.yml,以下是常见配置选项:

  • cluster.name: 集群的名称,用于标识一个 Elasticsearch 集群。
  • node.name: 每个节点的名称。
  • network.host: 绑定的 IP 地址。
  • http.port: 提供 HTTP 服务的端口,默认为 9200

3. 创建索引和文档操作

3.1 创建索引

在 Elasticsearch 中,创建索引是存储数据的第一步。你可以通过 REST API 创建索引:

PUT /my_index
{"settings": {"number_of_shards": 3,"number_of_replicas": 2}
}

这将创建一个名为 my_index 的索引,包含 3 个主分片和 2 个副本分片。

3.2 插入文档

使用 POST 请求插入文档:

POST /my_index/_doc/1
{"user": "Alice","message": "Learning Elasticsearch","post_date": "2024-09-22T14:12:12","likes": 10
}
  • /my_index/_doc/1:表示在 my_index 索引中插入文档,文档 ID 为 1
3.3 获取文档

通过文档 ID 获取文档内容:

GET /my_index/_doc/1

返回结果类似于:

{"_index": "my_index","_type": "_doc","_id": "1","_source": {"user": "Alice","message": "Learning Elasticsearch","post_date": "2024-09-22T14:12:12","likes": 10}
}
3.4 更新文档

通过 POST 请求更新文档:

POST /my_index/_update/1
{"doc": {"likes": 20}
}
3.5 删除文档

通过文档 ID 删除文档:

DELETE /my_index/_doc/1

4. 搜索与查询

Elasticsearch 强大的地方在于它的搜索能力。支持多种搜索方式,包括全文检索、结构化查询、模糊查询等。

4.1 简单查询

使用 match 查询:

GET /my_index/_search
{"query": {"match": {"message": "Elasticsearch"}}
}
4.2 布尔查询(Bool Query)

使用 bool 查询可以组合多个查询条件:

GET /my_index/_search
{"query": {"bool": {"must": [{ "match": { "user": "Alice" }},{ "range": { "likes": { "gte": 10 }}}]}}
}
  • must: 匹配所有条件。
  • should: 匹配至少一个条件。
  • filter: 进行过滤查询,不影响评分。
4.3 词语查询与短语查询
  • Term Query:用于精确匹配字段值,通常用于关键字字段。
GET /my_index/_search
{"query": {"term": {"user": "Alice"}}
}
  • Phrase Query:用于匹配包含特定短语的文档。
GET /my_index/_search
{"query": {"match_phrase": {"message": "powerful search engine"}}
}
4.4 范围查询

使用 range 查询范围:

GET /my_index/_search
{"query": {"range": {"post_date": {"gte": "2024-09-01","lte": "2024-09-30"}}}
}
4.5 聚合查询

Elasticsearch 还支持数据聚合,如计数、求和、平均值等。以下是按 likes 字段进行平均值聚合的例子:

GET /my_index/_search
{"size": 0,"aggs": {"avg_likes": {"avg": {"field": "likes"}}}
}

返回结果:

{"aggregations": {"avg_likes": {"value": 15.0}}
}

5. 实战场景应用

5.1 日志分析平台

使用 Elasticsearch、Logstash、Kibana(ELK Stack)搭建日志分析平台。日志从服务器收集后通过 Logstash 解析并存入 Elasticsearch,然后通过 Kibana 实现日志的实时分析和可视化。

  • Logstash:负责采集、过滤和传输数据。
  • Elasticsearch:负责存储和搜索数据。
  • Kibana:负责可视化展示数据。
5.2 全文搜索引擎

Elasticsearch 可用于构建高效的全文搜索引擎,支持复杂的查询组合、相关性评分和自动补全等功能。可以通过自定义分词器提升搜索精度。

5.3 实时推荐系统

Elasticsearch 的快速查询能力适合用于构建推荐系统。可以将用户行为数据实时存入 Elasticsearch,并根据查询条件进行个性化推荐,例如基于用户的点击记录进行商品推荐。

6. 性能优化

6.1 分片和副本设置
  • 分片数量:分片太少会导致数据分布不均匀,分片太多会增加管理成本。根据数据规模和查询并发设置合理的分片数。
  • 副本设置:增加副本可以提高查询速度和容错性,但会消耗更多的存储资源。
6.2 文档结构优化
  • 减少嵌套结构:过于复杂的嵌套结构会影响查询性能。
  • 字段映射:提前定义好字段类型和分析器,避免动态映射带来的额外开销。
6.3 搜索查询优化
  • 使用 filter 查询filter 查询不会计算相关性评分,适合对性能要求高的场景。
  • 分页查询:如果查询结果过大,使用 fromsize 来分页数据,避免一次返回大量数据。

7. 总结

Elasticsearch 是一个强大且灵活的分布式搜索引擎,适合各种实时数据搜索和分析场景。它广泛应用于日志分析、全文搜索、推荐系统和数据可视化等领域。通过合理设计索引、优化查询、调整分片与副本设置,可以充分发挥 Elasticsearch 的性能。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com