ElasticSearch 梳理:房屋搜索平台与日志分析系统构建指南

Git Rebase 详解与实战使用指南 本文系统讲解 Git Rebase 的原理与实战,揭示其如何通过线性化提交历史提升代码可读性。对比 Merge 与 Rebase 的差异,详解基础用法、交互式变基(如 squash、reword)、冲突处理及常见陷阱。强调“仅对本地分支 rebase”“强推用 --force-with-lease”等最佳实践,并推荐使用 git pull --rebase 保持开发主线整洁,助力团队协作高效有序。 阅读详情

搜索项目实践:基于 ElasticSearch 的搜索引擎快速搭建


数据建模与导入流程

1 ) 数据源说明
使用类 Airbnb 房屋数据集(CSV 格式),包含字段:

  • bathrooms(淋浴房数量)
  • room_type(房间类型)
  • bedrooms(卧室数量)
  • date_from/date_to(可租日期范围)
  • availability(当前可用状态)
  • images(图片URL)
  • description(文本描述)

2 ) ES 索引建模关键配置

PUT /test_airbnb
{
  "mappings": {
    "dynamic": false,  // 禁用动态映射
    "properties": {
      "bedrooms": {
        "type": "text",  // 支持全文检索 
        "fields": { "keyword": { "type": "keyword" } }
      },
      "date_from": { 
        "type": "date", 
        "format": "yyyy-MM-dd" 
      },
      "images": { 
        "type": "keyword", 
        "index": false  // 关闭索引节省资源
      },
      "name": {
        "type": "text",
        "analyzer": "autosuggest_analyzer"  // 自定义自动补全分析器
      },
      "location": { "type": "geo_point" }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "autosuggest_analyzer": {
          "tokenizer": "standard",
          "filter": ["lowercase", "autosuggest_filter"]
        }
      },
      "filter": {
        "autosuggest_filter": {
          "type": "edge_ngram",
          "min_gram": 1,
          "max_gram": 20
        }
      }
    }
  }
}

技术细节:

  • edge_ngram 分词器实现输入时自动补全(如输入 “be” 匹配 “bedroom”)
  • 地理位置字段 geo_point 支持距离排序和地图展示

或

PUT /test_airbnb
{
  "mappings": {
    "dynamic": false,
    "properties": {
      "bath_type": { 
        "type": "text",
        "fields": { "keyword": { "type": "keyword" } }
      },
      "date_from": { 
        "type": "date",
        "format": "yyyy-MM-dd"
      },
      "date_to": {
        "type": "date",
        "format": "yyyy-MM-dd"
      },
      "host_image": {
        "type": "keyword",
        "index": false
      },
      "name": {
        "type": "text",
        "analyzer": "autosuggest_analyzer"
      },
      "property_type": {
        "type": "text",
        "analyzer": "standard"
      },
      "location": {
        "type": "geo_point"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "autosuggest_analyzer": {
          "tokenizer": "standard",
          "filter": ["lowercase", "autosuggest_filter"]
        }
      },
      "filter": {
        "autosuggest_filter": {
          "type": "edge_ngram",
          "min_gram": 1,
          "max_gram": 20 
        }
      }
    }
  }
}

关键配置说明:

  • edge_ngram 分词器实现自动补全功能
  • 动态映射关闭(dynamic: false)避免字段污染
  • 非搜索字段(如图片URL)设置 index: false 减少存储
  • 地理位置字段使用 geo_point 支持空间检索

3 ) Logstash 数据导入配置

input { file { path => "/data/airbnb.csv" } }
filter {
  csv {
    columns => ["bathrooms", "room_type", ...]  # 所有列名 
  }
  mutate { lowercase => ["availability"] }  # 布尔值转小写
}
output { elasticsearch { hosts => ["localhost:9200"] index => "test_airbnb" } }

执行命令:bin/logstash -f airbnb.conf

数据导入与Kibana探索


Logstash导入配置

input {
  file {
    path => "/data/airbnb.csv"
    start_position => "beginning"
  }
}
 
filter {
  csv {
    separator => ","
    columns => ["id", "name", "bath_type", "date_from", ...]
  }
  mutate {
    lowercase => ["availability"]
  }
  date {
    match => ["date_from", "yyyy-MM-dd"]
    target => "date_from"
  }
}
 
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "test_airbnb"
  }
}

数据处理要点:

  • 对布尔字段(如availability)进行小写标准化
  • 显式指定日期格式转换
  • CSV列名与索引字段严格对应

Kibana可视化技巧

  1. 字段显示优化:
    • URL字段设置 Format: URL → Type: Link
    • 图片字段设置 Format: Image → Type: URL
  2. 过滤查询示例:
    {
      "query": {
        "bool": {
          "must": [
            { "range": { "bedrooms": { "gte": 3 } } },
            { "range": { "price": { "lte": 400 } } }
          ]
        }
      }
    }
    
  3. 数据表格配置字段:
    • 房东名称(host)
    • 房屋图片(image_url)
    • 房间类型(property_type)
    • 价格(price)
    • 预订链接(booking_url)

前端搜索界面:Reactivesearch 快速实现


1 ) 技术选型与部署

  • 框架:Reactivesearch(基于 React 的 ES 前端组件库)
  • 部署流程:
    # 安装依赖
    npm install -g @appbaseio/reactivesearch
    
    git clone https://github.com/appbaseio/reactivesearch-airbnb-demo
    cd reactivesearch-airbnb-demo
    yarn install  # 安装依赖
    yarn start    # 启动服务(端口 3000)
    

2 ) 核心组件与功能映射

组件功能ES 字段映射
<DataSearch>顶部搜索框name
<DateRange>日期筛选器date_from
<NumberBox>卧室数量选择bedrooms
<RangeSlider>价格区间滑块price
<ResultCard>房屋卡片展示多字段渲染

3 ) 自动补全与结果渲染示例

// 搜索框组件(支持自动补全)
<DataSearch
  componentId="searchbox"
  dataField="name"
  autosuggest={true}
  placeholder="搜索房源名称"
/>
 
// 结果卡片组件
<ResultCard
  dataField="name"
  react={{ and: ["searchbox", "daterange"] }} // 关联其他组件
  onData={(res) => ({
    image: res.images[0],
    title: res.name,
    description: `${res.bedrooms} 卧室 · ${res.bathrooms} 浴室`,
    price: `¥${res.price}/晚`
  })}
/>

或 参考核心组件配置

<ReactiveBase
  app="test_airbnb"
  url="http://localhost:9200"
>
  <DataSearch
    componentId="searchbox"
    dataField="name"
    placeholder="Search rentals..."
    autosuggest={true}
    highlight={true}
  />
  <RangeSlider
    componentId="priceslider"
    dataField="price"
    title="Price Range"
    range={{ start: 10, end: 1000 }}
  />
  <MultiList
    componentId="propertyfilter"
    dataField="property_type.keyword"
    title="Property Type"
  />
  <ResultCard
    componentId="results"
    dataField="name"
    pagination={true}
    react={{ and: ["searchbox", "priceslider"] }}
    onData={(res) => ({
      image: res.image_url,
      title: res.name,
      description: `${res.bedrooms} bedrooms · ${res.bath_type}`,
      price: `$${res.price}/night`
    })}
  />
</ReactiveBase>

功能扩展示例(添加标签云)

import { TagCloud } from "@appbaseio/reactivesearch";
 
<TagCloud
  componentId="tagfilter"
  dataField="amenities.keyword"
  title="Popular Amenities"
  size={50}
/>

日志分析项目:Nginx 访问日志处理


1 ) 日志格式与字段解析

原始日志样例:
192.168.1.1 [09/Nov/2023:10:12:33] "GET /video/123.ts HTTP/1.1" 304 "https://www.google.com" "Chrome/117.0"

2 ) Logstash Grok 解析配置

filter {
  grok {
    match => { "message" => "%{IP:client_ip} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATH:path} %{DATA}\" %{NUMBER:status} \"%{DATA:referrer}\" \"%{DATA:user_agent}\"" }
  }
  date { match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss"] }
  geoip { source => "client_ip" }  # IP转地理位置 
  useragent { source => "user_agent" } # 解析设备信息
}

3 ) ES 索引关键配置

PUT /nginx_logs
{
  "mappings": {
    "properties": {
      "timestamp": { "type": "date" },
      "client_ip": { "type": "ip" },
      "geoip": { "type": "geo_point" },
      "response_time_ms": { "type": "float" }
    }
  }
}

日志分析项目:ELK实战与业务洞察


日志数据结构,Nginx日志示例:

66.249.73.135 [08/Nov/2016:00:01:02 +0000] "GET /video/1234 HTTP/1.1" 304 154 "www.google.com" "Mozilla/5.0" 192.168.1.10 192.168.1.20 0.016 0.016

字段解析:

  • $remote_addr:客户端IP
  • $time_local:访问时间
  • $request:请求路径
  • $status:响应状态码
  • $http_referer:来源页
  • $http_user_agent:客户端设备

Logstash管道配置

filter {
  grok {
    match => { "message" => "%{IP:clientip} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{PATH:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:status} %{NUMBER:body_bytes} \"%{URI:referrer}\" \"%{DATA:agent}\" %{IP:upstream_ip} %{NUMBER:upstream_time} %{NUMBER:request_time}" }
  }
  date {
    match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
  }
  mutate {
    convert => { 
      "upstream_time" => "float"
      "request_time" => "float"
    }
  }
  urldecode { 
    field => "request"
  }
  useragent {
    source => "agent"
    target => "ua"
  }
  geoip {
    source => "clientip"
  }
}

Kibana仪表板关键指标

  1. 流量分析:

    • 请求量趋势图(15分钟粒度)
    • 地域分布热力图(GeoIP)
    • 流量TOP10页面
  2. 性能监控:

    {
      "aggs": {
        "response_time": {
          "percentiles": {
            "field": "request_time",
            "percents": [50, 95, 99]
          }
        }
      }
    }
    
  3. 业务洞察:

    • 热门视频内容排行
    • 用户活跃时段分布
    • 流量来源渠道分析

工程示例:1


1 ) 方案 1:基础 CRUD 操作

// 安装依赖:npm install @nestjs/elasticsearch
import { ElasticsearchService } from '@nestjs/elasticsearch';
 
@Injectable()
export class SearchService {
  constructor(private readonly esService: ElasticsearchService) {}
 
  async createListing(listing: any) {
    return this.esService.index({
      index: 'test_airbnb',
      body: listing 
    });
  }
 
  async searchListings(query: string) {
    return this.esService.search({
      index: 'test_airbnb',
      body: {
        query: { match: { name: query } }
      }
    });
  }
}

2 ) 方案 2:复杂查询(地理位置 + 分页)

async findNearbyLocations(lat: number, lon: number, radius: string) {
  return this.esService.search({
    index: 'test_airbnb',
    body: {
      query: {
        bool: {
          filter: {
            geo_distance: {
              distance: radius,
              location: { lat, lon }
            }
          }
        }
      },
      sort: [{ _geo_distance: { location: [lon, lat], order: "asc" } }],
      from: 0,
      size: 10
    }
  });
}

3 ) 方案 3:批量写入与索引管理

async bulkImport(listings: any[]) {
  const body = listings.flatMap(listing => [
    { index: { _index: 'test_airbnb' } },
    listing
  ]);
 
  return this.esService.bulk({ body });
}
 
async createAutosuggestIndex() {
  return this.esService.indices.create({
    index: 'autosuggest',
    body: {
      settings: { /* 同前文分析器配置 */ },
      mappings: { properties: { name: { type: "text", analyzer: "autosuggest_analyzer" } } }
    }
  });
}

工程示例:2


模块配置(es.module.ts)

import { Module } from '@nestjs/common';
import { ElasticsearchModule } from '@nestjs/elasticsearch';
 
@Module({
  imports: [
    ElasticsearchModule.register({
      node: 'http://localhost:9200',
      maxRetries: 3,
      requestTimeout: 30000
    })
  ],
  exports: [ElasticsearchModule]
})
export class EsModule {}

服务层封装(search.service.ts)

import { Injectable } from '@nestjs/common';
import { ElasticsearchService } from '@nestjs/elasticsearch';
 
@Injectable()
export class SearchService {
  constructor(private readonly esService: ElasticsearchService) {}
 
  async searchHomes(params: SearchParamsDTO) {
    const { query, minPrice, maxPrice, location, radius } = params;
    
    return this.esService.search({
      index: 'test_airbnb',
      body: {
        query: {
          bool: {
            must: [{
              multi_match: {
                query,
                fields: ['name^3', 'description']
              }
            }],
            filter: [
              { range: { price: { gte: minPrice, lte: maxPrice } } },
              { 
                geo_distance: {
                  distance: `${radius}km`,
                  location
                }
              }
            ]
          }
        },
        highlight: {
          fields: { name: {}, description: {} }
        }
      }
    });
  }
 
  async logBulkInsert(logs: any[]) {
    const body = logs.flatMap(log => [
      { index: { _index: 'nginx_logs' } },
      log
    ]);
 
    return this.esService.bulk({
      refresh: 'wait_for',
      body
    });
  }
}

控制器调用(search.controller.ts)

import { Controller, Post, Body } from '@nestjs/common';
import { SearchService } from './search.service';
 
@Controller('search')
export class SearchController {
  constructor(private readonly searchService: SearchService) {}
 
  @Post('homes')
  async searchHomes(@Body() params: any) {
    return this.searchService.searchHomes(params);
  }
 
  @Post('logs')
  async ingestLogs(@Body() logs: any[]) {
    return this.searchService.logBulkInsert(logs);
  }
}

关键配置优化

  1. 连接池配置:

    ElasticsearchModule.register({
      nodes: [
        'http://node1:9200',
        'http://node2:9200'
      ],
      ConnectionPool: require('@elastic/elasticsearch').ConnectionPool,
      maxRetries: 5,
      sniffOnStart: true
    })
    
  2. 安全认证:

    auth: {
      username: process.env.ES_USER,
      password: process.env.ES_PASS
    },
    ssl: { 
      ca: readFileSync('./certs/ca.crt'),
      rejectUnauthorized: false 
    }
    
  3. 性能调优参数:

    maxSockets: 100, // 最大连接数
    compression: true, // 启用压缩
    suggestCompression: true // 建议服务端压缩
    

工程示例:3


1 ) 方案1:基础数据索引服务

import { Injectable } from '@nestjs/common';
import { ElasticsearchService } from '@nestjs/elasticsearch';
 
@Injectable()
export class ListingService {
  constructor(private readonly esService: ElasticsearchService) {}
 
  async indexListing(listing: any) {
    return this.esService.index({
      index: 'airbnb',
      body: {
        ...listing,
        timestamp: new Date()
      }
    });
  }
 
  async searchListings(query: string) {
    return this.esService.search({
      index: 'airbnb',
      body: {
        query: { 
          multi_match: { 
            query, 
            fields: ["name^3", "description"] 
          } 
        }
      }
    });
  }
}

2 ) 方案2:批量异步处理管道

import { Processor, Process } from '@nestjs/bull';
import { ElasticsearchService } from '@nestjs/elasticsearch';
 
@Processor('log-queue')
export class LogProcessor {
  constructor(private readonly esService: ElasticsearchService) {}
 
  @Process()
  async handleLogs(job: Job) {
    const bulkBody = job.data.flatMap(log => ([
      { index: { _index: 'nginx_logs' } },
      log
    ]));
    
    await this.esService.bulk({ 
      refresh: 'wait_for',
      body: bulkBody
    });
  }
}

3 ) 方案3:安全与性能优化

elasticsearch.yml 关键配置
thread_pool.write.queue_size: 1000  # 增大写入队列
indices.query.bool.max_clause_count: 8192  # 提升复杂查询能力
 
安全模块集成
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true 

日志分析系统实战


1 )Nginx日志建模

日志格式解析:

$remote_addr - [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"

索引模板配置:

PUT /nginx_logs
{
  "mappings": {
    "properties": {
      "geoip": { "type": "geo_point" },
      "response_time": { "type": "float" },
      "user_agent": { "type": "text", "fields": { "keyword": { "type": "keyword" } } }
    }
  }
}

2 ) 日志收集架构

Nginx服务器
Filebeat
Kafka集群
Logstash管道
ElasticSearch
Kibana仪表板

3 ) Grok解析配置
Logstash过滤器示例:

filter {
  grok {
    match => { "message" => "%{IP:client} %{GREEDYDATA:ident} ..." }
  }
  date { match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ] }
  geoip { source => "client" target => "geoip" }
  useragent { source => "agent" target => "os" }
}

生产环境最佳实践

Elasticsearch集群配置

# elasticsearch.yml
cluster.name: production-cluster
node.name: ${HOSTNAME}
network.host: 0.0.0.0
discovery.seed_hosts: ["es-node1", "es-node2"]
cluster.initial_master_nodes: ["es-node1"]
 
# 硬件优化
bootstrap.memory_lock: true
indices.queries.cache.size: 10%
thread_pool.write.queue_size: 1000

监控与告警配置

  1. Kibana监控看板:

    • JVM堆内存使用率
    • 索引速率/查询速率
    • 分片分配状态
  2. 告警规则示例:

    PUT _watcher/watch/cluster_health_watch
    {
      "trigger": { "schedule": { "interval": "10s" } },
      "input": { "http": { "request": { "host": "localhost", "port": 9200, "path": "/_cluster/health" } } },
      "condition": {
        "compare": { "ctx.payload.status": { "eq": "red" } }
      },
      "actions": {
        "email_alert": {
          "email": {
            "to": "admin@example.com",
            "subject": "ES Cluster Status RED",
            "body": "Cluster health status is RED at {{ctx.execution_time}}"
          }
        }
      }
    }
    

性能优化策略

  1. 索引设计:

    • 冷热数据分层(ILM策略)
    • 时序数据使用时间序列索引
    PUT _ilm/policy/logs_policy 
    {
      "policy": {
        "phases": {
          "hot": { "actions": { "rollover": { "max_size": "50GB" } } },
          "delete": { "min_age": "30d", "actions": { "delete": {} } }
        }
      }
    }
    
  2. 查询优化:

    • 避免深度分页(改用search_after)
    • 使用runtime_mappings替代脚本
    • 聚合查询开启pre_filter_shard_size

关键要点总结:

  1. 数据建模是Elasticsearch性能基础,需明确字段类型和使用场景
  2. 自动补全通过edge_ngram分词器实现,需平衡存储和查询效率
  3. 前端集成使用Reactivesearch可快速构建生产级搜索界面
  4. 日志分析需结合Grok解析和GeoIP扩展实现深度洞察
  5. NestJS集成通过模块化封装提升后端服务可维护性
  6. 集群运维需关注分片策略、ILM管理和实时监控

ES 周边配置最佳实践


1 ) 跨域访问配置 (elasticsearch.yml)

http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE

2 ) 安全加固方案

  • 使用 readonlyrest 插件设置权限
  • 通过 API Key 替代基础认证:
    curl -XPOST "localhost:9200/_security/api_key" -H 'Content-Type: application/json' -d'
    { "name": "airbnb_app_key" }'
    

3 )性能优化建议

PUT /test_airbnb/_settings
{
  "index.refresh_interval": "30s",  // 降低刷新频率
  "index.number_of_replicas": 1     // 生产环境建议≥2
}

初学者提示:

  • edge_ngram:将单词按前缀切分(如 “bedroom” → [“b”,“be”,“bed”,…])实现输入时自动补全
  • geo_distance:计算经纬度两点间距离(支持 km/mi 单位)
  • 全文检索与精准查询区别:text 类型分词处理,keyword 类型精确匹配
【OAG vs RAG】RAG的“语义崩溃“:为什么你的知识库越大,AI越笨?_语义检索oag-优快云博客 19.9 元(AI 编程 / Agent 实战 | 本文同主题系统课程)·49.9 元(AI 时代成长方法论)。单篇不过瘾?订阅解锁全量源码、实战与答疑;文末附资料包领取方式 ↓图1:RAG语义崩溃概念图。 阅读详情

相关推荐

LSTM模型股价波动率预测(含Python代码)

源代码文件可在gzh’finance褪黑素'回复【24012203】获取。

celiaweiwei的博客 3777

告别规则黑盒:基于JVS-Rules的风控规则治理实践——可视化决策编排+血缘追踪+版本快照

可读’——通过决策流图谱与业务语义节点,让非技术人员理解逻辑;‘可溯’——依赖规则版本快照与执行日志,实现任意交易的全链路回放;‘可担责’——基于血缘追踪与权限基线,清晰界定业务定义、技术实现、合规验证三方责任。这三者共同构成风控规则治理的三角支柱,将隐性经验转化为可版本化、可审计、可协同的组织级数字资产。

weixin_42054392的博客 445

STM32 FATFS文件系统按行读取SD卡数据

STM32 SD数据实现按行读取

qq_32216815的博客 7830

把 KV Cache 压到 FP4:BitDecoding-FP4 的算法-系统协同设计复盘

长上下文推理卡在KV Cache的显存与带宽上,而现有FP4方案要么精度崩、要么速度废。这篇文章复盘BitDecoding-FP4如何用三个算法补丁加一个系统重构,在B300上把服务吞吐提升2.4–3.0倍,精度几乎不掉。

helloagent的博客 314

openlayers6【十九】vue HeatmapLayer热力图层实现热力图效果详解

文章目录1. 写在前面2. Heatmap 类实现热力图2.1 Heatmap 参数2.2 实现热力图3. 完整代码4. 添加删除map图层的方法5. 热力图自身的get,set方法 1. 写在前面 我们主要看热力图的效果,区域绘制效怎么设置详细内容可以访问 openlayers6【十七】vue VectorLayer矢量图层画地图省市区,多省市区(粤港澳大湾区)效果详解 在 openlayers 中,图层是使用 layer 对象表示的,主要有 WebGLPoints Layer、热度图(HeatMap L

@必意玲 1万+

1.用Python写了一个进销存管理的软件~需求分析&界面设计&数据库设计&技术路线选择~

前端也打算用Python来写,查了很多的python库,大家比较推荐的是wxpython和QPython,之前接触过一点点的QT,确实非常强大,但是库比较重量级,自己写的这个东西明显配不上QT,又详细调研了一下wxpython,就是它了!

pepper_lihui的专栏 4323

【Git】fork工作流与上游同步

Fork工作流允许开发者在远程平台(如Gitee)上创建开源项目副本,实现安全二开与贡献。通过fork生成个人仓库(origin),并添加上游(upstream)远程地址,可定期同步原项目更新。推荐使用master分支同步上游,开发分支(如cm-dev)专注业务代码,避免冲突。同步流程包括fetch upstream、合并master至本地,再推送到开发分支。贡献代码时,推送至个人仓库并发起PR。关键点:手动同步、不直接推送到上游、保持分支清晰,确保协作高效。

沉梦听雨的博客 464

基于机器学习和辐射传输的地表温度模拟方法对比

对于不同的地表类型和不同的年份,经验方法是实用的,虽然整体精度不如物理方法,但具有计算速度快、对模型内部结构考虑较少等优点。尽管深度学习等回归的经验方法不需要考虑辐射传输和能量平衡的具体过程, 但在其输入参数的选择上也不能是无序和随机的,而是应选择有关相应物理过程的参数。经验方法在处理不同年份相同地表类型或表现相对较好, RMSE 约为 1.50K,但在不同地表类型且不同年份模拟结果较差, RMSE 约为 3.0K, 虽然精度不如物理方法,但它具有计算速度快,不需过多考虑模型内部结构的优点。

2301_77907355的博客 1023

第1章第1节:什么是Elasticsearch

在传统数据库里搜"一句话中包含某个词",我们通常会写出%关键词%这样的 LIKE 查询——数据一多就慢得无法忍受,而且完全不懂"分词"和"相关度"。本节从全文检索的真实需求出发,讲清楚倒排索引这一核心思想,再介绍 Elasticsearch 是什么、能干什么,以及它在 ELK/EFK 生态中的位置。

啊渊的专栏 182

HP DL380G9 iLO降级Degrated及存储失败storage Failed报错如何解决?

HP DL380G9 iLO降级(Degrated)及存储失败(storage Failed)报错如何处理? ©Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者https://blog.51cto.com/lander 2018/09/7 7:30 问题描述 某沙特公司搭建的虚拟化环境中有一台ESXi主机报Storage Fialed警告但是仍...

weixin_34226182的博客 4849

手把手教你校准垂起固定翼(VTOL)遥控器与电调:从零到飞的完整流程

本文详细介绍了垂起固定翼(VTOL)遥控器与电调的校准流程,从基础认知到飞行前检查,涵盖遥控器通道配置、电调校准、舵机方向调整等关键步骤。通过图文并茂的指导,帮助无人机爱好者安全完成VTOL调试,确保首飞成功。特别强调多旋翼模式、过渡模式和固定翼模式的设置要点,适合新手和进阶用户参考。

jenkins8butler的博客 361

配置总控中心Config(接近淘汰)

config+bus(服务总线)Apollo为什么需要配置中心?一处修改,处处可用。微服务意味着将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务自己带着一个application.yml,一个完整的项目就可能有上百个配置文件的管理,是一件相当麻烦的事情。

m0_57532232的博客 150

SAP 业务技术平台(BTP) Workflow(工作流)功能介绍

这背后其实发生了很多事情:Workflow 应用里 Determine Equipment Service Task 得到执行,通过 HTTP POST,消费部署在 SAP BTP 上的 Business Rules Service,后者根据我们在 Start New Instance 里传入的 Sample Data,返回自动决定出的设备明细。关于这个 SAP BTP 开发工具的更多介绍,参考我的文章:SAP 新一代全栈开发工具:SAP Business Application Studio.

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 8756

[LLM Wiki理论与实践-03]OKF:LLM Wiki推荐使用的文档格式

我们在[LLM Wiki理论与实践-01:使用Obsidian来感受LLM Wiki的三层架构]中利用Obsidian定义了常规的Markdown文档作为源文件,并利用Copilot从中提取出实体、概念和原文摘要,它们都具有如下所示的类似结构。我在这篇文章中说过,LLM Wiki不是一种一个官方的工业级的**规范**,只是由Karpathy提出的一种解决传统RAG局限的一种总体方案或者模式,但是这种文档结构则是基于OKF 0.2规范

JaydenAI的博客 495

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Git 冲突解决完全指南:从三方合并原理到实战命令

本文详解Git冲突本质——三方合并中因同一区域修改导致的语义分歧。从merge base、ours/theirs原理出发,解析冲突生成机制,指导通过git status、zdiff3标记与stage编号精准定位问题。提供六步标准流程:确认范围→决策→清除标记→验证→添加→收尾,并介绍--ours/--theirs、图形工具及手工合并等实战解法,附速查表,助开发者高效解决冲突,避免误操作。

qq_28112995的博客 791

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

多存储协同架构:JPA + MyBatis + Elasticsearch + Redis 的职责分工与通用实现

本文阐述了在高并发订单系统中,通过JPA、MyBatis、Elasticsearch与Redis的多存储协同架构实现职责分离:JPA负责事务性写操作与简单查询;MyBatis处理复杂联查与报表统计;Elasticsearch承载海量数据下的多维检索与聚合;Redis用于缓存、防回滚暂存及分布式锁。各存储分工明确,通过异步同步机制联动,兼顾一致性、性能与扩展性,构建高效稳定的系统架构。

BADAO_LIUMANG_QIZHI的博客 270

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Git Bash

本文系统梳理Git核心原理与实战流程,以“四区模型”为基石,贯穿本地操作、分支协作、远程交互及问题排查全链路。通过标准流程(拉→改→提→合)与高频场景解决方案,帮助开发者规避90%常见错误,掌握从单人开发到团队协作的完整能力,实现高效、安全的Git使用。

2501_92517224的博客 357

Elasticsearch 9.x 从入门到精通(1/7):初识 Elasticsearch

官方定义(开篇):身份能力对应源码模块分布式搜索/分析引擎近实时全文检索、聚合分析index/可扩展数据存储海量文档存储、快照、生命周期cluster/向量数据库kNN 语义检索、混合检索(kNN)+x-packElastic 官方将能力组合为四类"解决方案"():Elasticsearch(搜索)、Elasticsearch Vector Database(向量/Serverless)、Observability(可观测)、Security(安全)。核心搜索能力在所有形态中共用。

Chdaring的博客 165

使用 SpiceDB 为 Elasticsearch 检索增强生成实现细粒度授权

本文介绍如何在Elasticsearch检索增强生成(RAG)流程中实现细粒度访问控制。通过SpiceDB基于关系的访问控制(ReBAC),将权限逻辑从应用代码和kNN查询中剥离,转为在关系图中管理用户与文档间的权限。利用SpiceDB在检索后过滤内容块,确保大语言模型仅接收授权数据,防止敏感信息泄露。该方案支持灵活的逐文档共享、跨部门访问及例外授权,无需重构角色或重新索引。结合LangGraph构建确定性授权节点,强制执行安全边界,抵御提示注入攻击。推荐生产部署时采用超额检索、元数据预筛选与权威数据源同步

Elastic 中国社区官方博客 262

【CRMEB 社区版】二开第一问:这个需求该进 driver,还是进 modules?

二开最贵的错误往往不是写慢了,而是写错目录:支付 SDK 塞进订单服务、秒杀价写进商品类型、注册送礼焊在登录接口里。短期能跑,升级和协作都会疼。这篇按开源项目当前仓库的约定,把「选型」拆成可执行的判定,并标出那些看起来像插件、其实过不了零侵入的坑。路径相对backend/。

evoxwht的博客 144

点过“不再询问”就要检查:Claude Code权限文件也可能存着密钥

Apiiro报告揭示带密钥的命令可能进入Claude Code权限文件。结合独立Git实验,解释local配置、忽略规则与历史泄露的区别,以及发现问题后的处理顺序。

2301_76711398的博客 205

Docker 部署 Elasticsearch 8.x 单节点教程(Debian 12・4G 小内存版)

本文基于Debian12腾讯云轻量服务器(4核4G),详述Elasticsearch 8.15.3单节点Docker部署全流程:先安装Docker,调优内核参数vm.max_map_count=262144,再通过docker-compose.yml配置JVM堆内存1G、容器内存上限2G,实现数据持久化与安全认证。重点强调目录权限授权、密码初始化及端口放行,附常见问题排查与可选Kibana可视化集成方案,适用于生产环境快速搭建。

2501_94567985的博客 232

如何用 STAROps Elasticsearch 智能助手看穿“搜索变慢”

某电商平台的商品搜索服务使用一台 6 个数据节点的 Elasticsearch 实例。周五北京时间 20:00 起,业务陆续反馈搜索变慢。业务监控中的搜索接口 P99 从平时约 200 ms 升到 2s 以上,部分请求超时。值班工程师打开控制台:集群状态为 Green,没有未分配分片,集群平均 CPU 约 40%,乍看不像资源已经吃紧。

阿里巴巴云原生的博客 349

【一次 Elasticsearch 高基数聚合慢查询的定位与优化】

当Elasticsearch聚合查询首次执行慢、后续迅速恢复正常时,问题往往不在数据量本身,而在于全局词典构建开销。通过Profile分析发现,虽聚合耗时仅几十毫秒,但首次请求整体耗时达1秒以上,表明瓶颈在初始化阶段。结合keyword字段使用Doc Values的特性,可推断为首次访问时需加载全局词典(global ordinals),导致延迟。开启eager_global_ordinals可将词典预加载至内存,显著降低首次查询延迟,尤其适用于高基数聚合场景。此案例揭示了“首次慢、后续快”问题的典型根因及

大雪冬至的博客 353

Git基本操作

Git是目前最主流的版本控制器,当我们修改了仓库中的文本文件时,如果是文本文件,修改后会新增一行git,如果是二进制文件,例如图片视频这种,我们只能知道他被修改过了,比如文件的大小从200kb变为100kb,但是具体修改了什么内容我们是没办法知道的。Git的安装我们可以使用git --version指令来查看我们本地服务器是否安装了git,如果显示出git的版本说明已经安装过某个版本的git。如果没有安装git,可以输入下面的指令这条指令会为我们下载对应的git包。

wairuigood的博客 317

向量库选型:PgVector、Elasticsearch、Milvus、Redis 八维对比与决策

向量库选型需综合考量数据规模、过滤需求、延迟与运维能力。PgVector适合已有PostgreSQL、千万级以内场景;Elasticsearch擅长关键词与语义混合检索;Milvus适用于亿级向量、独立扩缩容;Redis则适合低延迟、小规模缓存。选型非比性能,而是总拥有成本最低且满足约束。建议通过实测召回率、延迟、写入效率等指标,在真实环境评估候选方案,结合LangChain4j抽象层实现灵活切换。

weixin_43128865的博客 297
上一篇: Elastic Stack梳理:Kibana高级可视化工具深度解析之Timelion、Visual Builder与Dashboard实战指南
下一篇: Elastic Stack梳理:北京空气质量数据分析实战之从数据建模到可视化洞察与NestJS集成方案
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值