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搜索策略至关重要。通过合理选择字段类型和查询方式,可以优化搜索效果和性能。

相关推荐
Qyr994 小时前
2026-2032直接芯片液冷板市场爆发式增长:AI算力浪潮下的热管理核心赛道
大数据·人工智能
蓝色的风-20264 小时前
国产算力双雄对决:曙光8000十万卡集群 vs 华为昇腾950超节点深度解析
大数据·人工智能·自然语言处理
泛联新安5 小时前
软件定义汽车时代,如何让AI研发“可信”?——泛联新安构建汽车企业级可信AI体系的落地路径
大数据·人工智能·安全·网络安全·汽车·漏洞挖掘·代码安全
杨云龙UP6 小时前
TDengine 3.4.2.8 Community 三节点三副本生产集群部署实战(DNode/MNode/taosAdapter/Explorer)
大数据·linux·运维·数据库·tdengine·时序库
SelectDB技术团队7 小时前
一条日志两套引擎的账:把 Elasticsearch 检索与分析合并到同一份数据的落地写法
大数据·数据库·elasticsearch·搜索引擎·全文检索·日志·apache doris
大大大大晴天7 小时前
每天认识一个组件:远端数据服务Apache Celeborn
大数据
幂律智能8 小时前
海外业务不同,合同系统该怎么建?
大数据·人工智能
Leo.yuan8 小时前
数据开发即质量检测:FineDataLink 5.0 在生产数据链路中的一体化实践
大数据
哲霖软件8 小时前
非标机械设备公司怎么做信息化?破解通用ERP水土不服难题
大数据·运维
IT毕设梦工厂8 小时前
计算机毕业设计选题推荐:基于大数据的杭州亚运会社交媒体互动数据可视化分析|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hadoop·信息可视化·数据挖掘·数据分析·课程设计·数据分析数据可视化