elasticsearch结构化搜索

Elasticsearch的结构化搜索(Structured Search)是指对具有明确格式和结构的数据进行搜索的过程。这类数据包括日期、时间、数字、布尔值等,它们都有精确的格式,可以进行逻辑操作,比如比较数值范围或判断值的大小。结构化数据也可以包括具有离散集合的文本字段,例如预定义的标签集合或具有固定选项的字段。

结构化搜索的关键特点:

  1. **精确匹配**:结构化搜索通常用于查找与查询条件完全匹配的项。

  2. **范围查询**:可以对数字或日期类型的字段执行范围查询。

  3. **逻辑操作**:可以对结构化字段执行逻辑操作,如等于(=)、不等于(!=)、大于(>)、小于(<)等。

  4. **无相关性评分**:结构化搜索的结果通常不涉及相关性评分,因为它们是确定性的匹配。

  5. **使用Term查询**:对于结构化数据,Elasticsearch主要使用Term查询来执行精确匹配。

结构化搜索的常见查询类型:

  • **Term Query**:用于执行精确匹配,适用于结构化字段。

  • **Terms Query**:用于查找包含任一指定值的文档。

  • **Range Query**:用于根据数值或日期范围筛选文档。

  • **Prefix Query**:用于匹配以特定前缀开始的项,适用于结构化文本字段。

  • **Wildcard Query**:用于执行通配符搜索,可以匹配任意字符或任意数量的字符。

  • **Regexp Query**:用于执行正则表达式匹配。

  • **Exists Query**:用于查找包含指定字段的文档,无论字段的值是什么。

示例:

以下是一些结构化搜索的查询示例:

**1. 布尔值查询**:

```json

GET /products/_search

{

"query": {

"term": {

"available": true

}

}

}

```

这个查询将返回所有`available`字段值为`true`的文档。

**2. 数值范围查询**:

```json

GET /products/_search

{

"query": {

"range": {

"price": {

"gte": 10,

"lte": 50

}

}

}

}

```

这个查询将返回所有`price`字段值在10到50之间的文档。

**3. 日期范围查询**:

```json

GET /products/_search

{

"query": {

"range": {

"date": {

"gte": "2020-01-01",

"lt": "2020-12-31"

}

}

}

}

```

这个查询将返回所有`date`字段值在2020年1月1日到2020年12月31日之间的文档。

结构化搜索在Elasticsearch中非常有用,特别是在需要对具有明确格式的数据执行精确匹配或范围查询的场景中。通过使用合适的查询类型,可以有效地检索和管理结构化数据。

Elasticsearch支持两种主要类型的搜索:基于词项(Term-based)的搜索和基于全文(Full-text)的搜索。这两种搜索方式适用于不同的场景和需求。

基于词项的搜索

基于词项的搜索适用于精确匹配的场景,如搜索特定的关键词或短语。这种搜索方式不会对文本进行分词处理,而是直接按照文本的原样进行匹配。

**特点**:

  • 通常用于`keyword`类型的字段。

  • 不进行文本分析,即不会应用分词器和过滤器。

  • 匹配整个词项,不区分大小写。

  • 适用于结构化数据,如ID、状态码、标签等。

**查询示例**:

```json

GET /my_index/_search

{

"query": {

"term": {

"status.keyword": {

"value": "active"

}

}

}

}

```

在这个例子中,我们使用`term`查询来搜索`status`字段中精确匹配"active"的文档。

基于全文的搜索

基于全文的搜索适用于对文本内容进行复杂查询的场景,如模糊搜索、短语搜索或相关性搜索。这种搜索方式会对文本进行分词处理,然后基于分词后的词项进行匹配。

**特点**:

  • 通常用于`text`类型的字段。

  • 应用文本分析,包括分词器和过滤器。

  • 可以进行模糊匹配、短语匹配和相关性评分。

  • 适用于非结构化数据,如文章、描述、评论等。

**查询示例**:

```json

GET /my_index/_search

{

"query": {

"match": {

"content": "Elasticsearch guide"

}

}

}

```

在这个例子中,我们使用`match`查询来搜索`content`字段中包含"Elasticsearch"和"guide"的文档。

区别和使用场景

  • **数据类型**:基于词项的搜索通常用于`keyword`类型字段,而基于全文的搜索用于`text`类型字段。

  • **文本分析**:基于词项的搜索不进行文本分析,而基于全文的搜索会应用分词器和过滤器。

  • **匹配方式**:基于词项的搜索进行精确匹配,基于全文的搜索可以进行模糊匹配和短语匹配。

  • **适用场景**:基于词项的搜索适用于需要精确匹配的场景,如状态码、枚举值等;基于全文的搜索适用于需要复杂文本分析的场景,如搜索引擎、内容推荐等。

理解这两种搜索方式的区别和适用场景对于设计和实现有效的Elasticsearch搜索策略至关重要。通过合理选择字段类型和查询方式,可以优化搜索效果和性能。

相关推荐
roman_日积跬步-终至千里4 分钟前
【大数据架构:架构思想基础】Google三篇论文开启大数据处理序章:(数据存储)分布式架构、(数据计算)并行计算、(数据管理)分片存储
大数据·分布式·架构
Elasticsearch4 分钟前
Jina Reranker v3:用于 SOTA 多语言 检索 的 0.6B 列表式 重排序器
elasticsearch
CHrisFC27 分钟前
中小型第三方环境检测实验室的数字化破局之选——江苏硕晟LIMS
大数据·运维·人工智能
小北方城市网1 小时前
GEO 智变新篇:质效双升 + 责任共生,打造 AI 时代本地商业长效增长引擎
大数据·人工智能·python·数据库架构
神算大模型APi--天枢6461 小时前
自主算力筑基,垂域模型破局:国产硬件架构下的行业大模型训练与微调服务实践
大数据·人工智能·科技·架构·硬件架构
2501_940975801 小时前
AI降重:当学术写作遇上智能算法,如何守住原创底线?
大数据·人工智能
AC赳赳老秦1 小时前
基于DeepSeek与接口文档的智能测试数据生成实践
数据库·elasticsearch·信息可视化·流程图·数据库架构·powerbi·deepseek
CNRio2 小时前
Day 55:Git的高级技巧:使用Git的worktree管理多个工作目录
大数据·git·elasticsearch
汤姆yu2 小时前
基于python大数据的地震数据可视化分析系统
大数据·python·信息可视化
阿猿收手吧!2 小时前
【Elasticsearch】定义索引结构的核心 -- Mapping
大数据·elasticsearch·搜索引擎