当前位置: 首页 > news >正文

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)

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

关键命令速查

# 创建索引
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": [...] } }

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

http://www.dtcms.com/a/121798.html

相关文章:

  • Spring Boot应用中可能出现的Full GC问题
  • 滑动窗口(2)—最⼤连续1的个数III
  • git 查看某一文件夹下所有文件 修改记录
  • 深度学习总结(4)
  • LVGL开发指南
  • 如何构建并优化提示词?
  • 【LeetCode 热题100】73:矩阵置零(详细解析)(Go语言版)
  • 调用百度api实现黑白图像上色
  • Prompt_Engineering提示词工程(一)
  • Python脚本:批量修改文件修改时间2.0(带UI界面+随机时间偏移)
  • Java面试黄金宝典43
  • Apache Parquet Java 库 反序列化漏洞 CVE-2025-30065
  • 分布式文件存储系统FastDFS
  • Linux 入门指令(1)
  • spring boot 中 WebClient 与 RestTemplate 的对比总结
  • Unity中基于2.5D的碰撞系统
  • 数据库中的事务
  • 柑橘病虫害图像分类数据集OrangeFruitDaatset-8600
  • 开发一个环保回收小程序需要哪些功能?环保回收小程序
  • Java程序的基本规则
  • PS教学记录
  • Java 常用安全框架的 授权模型 对比分析,涵盖 RBAC、ABAC、ACL、基于权限/角色 等模型,结合框架实现方式、适用场景和优缺点进行详细说明
  • 信用卡欺诈检测实战教程:从数据预处理到模型优化全解析
  • 什么是声波,声波的传播距离受哪些因素影响?
  • 【RL系列】StepFun之Open-Reasoner-Zero
  • 机器学习 Day09 KNN算法
  • 大数据专业学习路线
  • 某团某点评mtgsig1.2 H5guard加密算法剖析
  • 深入解析Java中的栈:从JVM原理到开发实践
  • 基于IDEA+SpringBoot+Mave+Thymeleaf的系统实现