ElasticSearch 实战:full text和exact value的查询演示

本文详细介绍了Elasticsearch中的FullText查询(如match、match_phrase和multi_match)用于处理文本字段的复杂匹配,以及ExactValue查询(如term和range)用于精确匹配数值和非文本字段。通过实例演示了如何在实际场景中运用这些查询方法。
摘要由CSDN通过智能技术生成

Elasticsearch 中的查询可以分为两大类:Full Text 查询和 Exact Value 查询。这两种查询方式分别适用于不同的应用场景,下面通过示例来演示它们的使用:

Full Text 查询

Full Text 查询主要用于处理文本字段,允许对文本进行模糊匹配、短语匹配、同义词匹配等复杂的文本分析。Elasticsearch 使用分词器对文本进行分析,然后在索引中查找与查询条件匹配的词汇。常见的 Full Text 查询包括 matchmatch_phrasemulti_match 等。

示例 1:match 查询

假设有一个名为 articles 的索引,其中有一个 content 字段存储文章正文。我们想搜索包含关键词 “big data” 的文章:

GET articles/_search
{
  "query": {
    "match": {
      "content": "big data"
    }
  }
}

在这个查询中,Elasticsearch 会对 "big data" 进行分词,可能生成单个词汇 "big""data",然后查找 content 字段中包含这两个词汇的文档。由于是 Full Text 查询,它会考虑词根、同义词、近似匹配等因素,因此可能会匹配到包含 “big data analysis”、“large amounts of data” 等相关表述的文章。

示例 2:match_phrase 查询

如果要精确匹配短语 “big data” 而不是分开的两个词汇,可以使用 match_phrase 查询:

GET articles/_search
{
  "query": {
    "match_phrase": {
      "content": "big data"
    }
  }
}

此查询会确保 “big” 和 “data” 两个词汇相邻且顺序正确地出现在 content 字段中,即寻找原文中包含完整短语 “big data” 的文章。

示例 3:multi_match 查询

对于跨多个字段进行相同 Full Text 查询的情况,可以使用 multi_match

GET articles/_search
{
  "query": {
    "multi_match": {
      "query": "big data",
      "fields": ["title", "content"]
    }
  }
}

这个查询会在 titlecontent 两个字段中同时查找包含 “big data” 的文档,匹配逻辑与 match 类似。

Exact Value 查询

Exact Value 查询主要针对数值、日期、布尔值等非文本字段,或者已设置为 keyword 类型(未分词)的文本字段。这类查询要求查询条件与索引中的值完全一致,不涉及分词、同义词匹配等文本分析过程。常见的 Exact Value 查询包括 termtermsrangeexists 等。

示例 1:term 查询

假设 articles 索引有一个 category 字段,存储文章类别,值为未经分词的字符串。我们要找出类别为 “Technology” 的文章:

GET articles/_search
{
  "query": {
    "term": {
      "category.keyword": "Technology"
    }
  }
}

这里使用了 .keyword 语法来指定对 category 字段的 keyword 子字段进行查询,确保进行精确匹配。只有 category 值恰好为 “Technology”(大小写敏感)的文档会被返回。

示例 2:range 查询

对于数值或日期字段,可以使用 range 查询进行精确范围匹配。例如,查找发表日期在 2023 年 1 月 1 日至 2023 年 12 月 31 日之间的文章:

GET articles/_search
{
  "query": {
    "range": {
      "publication_date": {
        "gte": "2023-01-01",
        "lte": "2023-12-31"
      }
    }
  }
}

此查询将精确匹配 publication_date 字段位于指定日期范围内的文章。

总结

Full Text 查询和 Exact Value 查询在 Elasticsearch 中有着明确的应用场景。前者适用于需要进行文本分析、模糊匹配的文本字段查询,后者适用于对数值、日期、特定字符串进行精确匹配的非文本字段或未分词文本字段查询。实际使用时,应根据字段类型和业务需求选择合适的查询类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值