Elasticsearch中的基本全文搜索和过滤

Elasticsearch中的基本全文搜索和过滤

知识点参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/full-text-filter-tutorial.html#full-text-filter-tutorial-range-query


1. 索引设计与映射

  • 多字段类型(Multi-Fields) :

    • 文本字段默认映射为text(全文搜索)和keyword(精确过滤)子字段。
    • 示例:title字段同时支持全文搜索(title)和精确过滤(title.keyword)。
    • 作用:兼顾灵活搜索与高效过滤。
  • 字段类型选择:

    • text:用于全文检索(如标题、描述)。
    • keyword:用于精确匹配或聚合(如分类、标签)。
    • date:日期类型(指定格式yyyy-MM-dd)。
    • float:浮点数(如评分rating)。
  • 分析器(Analyzer) :

    • 默认使用standard分析器(分词、转小写、去停用词)。
    • 影响索引和搜索时的文本处理逻辑。

2. 全文搜索技术

  • **match​查询**:

    • 基础全文搜索,默认OR​逻辑匹配分词后的词项。

    • 支持参数:

      • operator:切换AND逻辑(需所有词项匹配)。
      • minimum_should_match:控制最少匹配词项数(如2/3)。
  • **multi_match​查询**:

    • 跨多字段搜索(如同时搜索title、description、tags)。
    • 字段加权 :通过^符号提升字段权重(如title^3)。
    • 示例:优先匹配标题中的关键词。

3. 精确过滤方法

  • **term​查询**:

    • 精确匹配未经分析的字段值(必须使用.keyword子字段)。
    • 示例:{"term": {"category.keyword": "Breakfast"}}。
  • **range​查询**:

    • 数值或日期范围过滤。
    • 参数:gte(≥)、lte(≤)、gt(>)、lt(<)。
    • 示例:过滤评分≥4.5的食谱。

4. 组合查询(Bool Query)

  • 逻辑子句:

    • must:所有条件必须满足(贡献相关性得分)。
    • should:至少满足一个条件(提升得分)。
    • must_not:排除匹配条件(不贡献得分)。
    • filter:过滤条件(不计算得分,性能优化)。
  • 典型场景:

    • 必须包含vegetarian标签 + 评分≥4.5 + 非甜点类别。
    • 示例:复合过滤与搜索条件组合。

5. 性能优化与最佳实践

  • 过滤优于查询:

    • 使用filter上下文避免相关性计算,提升性能。
  • 字段设计规范:

    • ignore_above:限制keyword字段长度(默认256字符)。
    • 避免长文本使用keyword类型(节省存储)。
  • 分析器选择:

    • 根据业务需求定制(如中文需ik分词器)。

6. 高级应用方向

  • 相关性调优:

    • 使用function_score自定义评分公式。
    • 字段长度归一化(norms参数)。
  • 近似匹配:

    • match_phrase(短语匹配)。
    • fuzzy查询(容错拼写)。
  • 聚合分析(Aggregations) :

    • 统计分类分布、评分分布等。

关键命令速查

bash 复制代码
# 创建索引
PUT /cooking_blog

# 批量导入数据
POST /cooking_blog/_bulk?refresh=wait_for

# 基本全文搜索
GET /_search { "match": { "description": "fluffy pancakes" } }

# 多字段加权搜索
GET /_search { "multi_match": { "query": "curry", "fields": ["title^3", "description"] } }

# 复合布尔查询
GET /_search { "bool": { "must": [...], "should": [...] } }

掌握这些知识点可快速实现 精准搜索+高效过滤 的复杂需求,适用于电商、内容平台、日志分析等场景.

相关推荐
诚丞成12 小时前
ELK日志分析:Elasticsearch索引、Logstash接入与Kibana可视化
elk·elasticsearch·jenkins
新鲜势力呀1 天前
PHP 日志系统实战:从排查线上故障困难到 ELK日志分析 + 链路追踪 + 实时监控完整架构方案
elk·架构·php
SelectDB技术团队9 天前
Agent Trace 数据底座建设:宽表建模、全文检索与成本聚合的配置与验证步骤
大数据·python·clickhouse·elk·elasticsearch·全文检索·复杂查询
谢亮_vipxieliang10 天前
容器日志收集与管理:从 stdout 规范到 ELK/Loki 落地
运维·网络·人工智能·elk·docker·容器
SelectDB技术团队11 天前
ELK 太占磁盘、ES 总报写入拒绝:从归因到可执行的优化清单
大数据·clickhouse·elk·elasticsearch·全文检索·复杂查询·实时更新
yunqiz24 天前
ELK Stack生产环境部署指南:Filebeat + Elasticsearch + Logstash + Kibana
elk·elasticsearch
LIXIUPING20141 个月前
微服务分布式日志环境完整搭建实战|从服务改造到 ELK 集群部署、全流程可落地
elk·elasticsearch·logstash·filebeat·分布式日志
LlmCraft|大模型工程实践1 个月前
12. Docker 日志管理与监控:ELK 日志收集 + Prometheus 性能监控
elk·docker·prometheus
2401_834636991 个月前
ELK 全栈深度实战|从集群部署到日志可视化完整落地
elk
飞火流星020271 个月前
ELK(Elasticsearch+Logstash+Kibana)传统日志采集架构与ELFKK(Elasticsearch+Logstash+Kibana+Filebeat+Kafka)对比
elk·elfkk·传统elk日志采集·elk增加filebeat·elk增加kafka