Elasticsearch | 对文本实现模糊、精确、分词搜索

Elasticsearch | 对文本实现模糊、精确、分词搜索对文本搜索一般可以分为三种类型:模糊搜索、精确搜索、分词搜索。在Elasticsearch中,term、match、match_phrase、keyword,对文本实现模糊、精确、分词搜索

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎,它具有强大的搜索功能。

对文本搜索一般可以分为三种类型:模糊搜索、精确搜索、分词搜索。

  • 模糊搜索:如sql中的like查询语句,匹配包含搜索关键字的内容。

  • 精确搜索:文本内容与搜索关键字一致。

  • 分词搜索:将文本先进行分词,包括搜索关键字分词和搜索内容进行分词,再匹配相关内容。

用一个例子说明:

我们有一串文本「我正在学习数据结构和算法」,

如果是模糊搜索,用「学习」、「数据结构」、「算法」等关键词就能搜索出结果

如果是精确搜索,搜索关键词一定为「我正在学习数据结构和算法」才能搜出结果

如果是分词搜索,「算法之美」关键词就能搜索出结果,因为分词搜索,只需要将关键字的分词匹配上就可以了。而使用模糊搜索,是不能正确搜索出结果的。

在Elasticsearch中,使用“term”,“match”,“match_phrase”,“keyword”进行相关搜索。接下来我们用实验演示不同的搜索效果。

相关准备:

索引base-product-spu-info中有一条数据:

{
"spuName" : "【市场价2532】HUAWEI WATCH 2 Pro 4G智能手表 移动支付"
}

对「【市场价2532】HUAWEI WATCH 2 Pro 4G智能手表 移动支付」分词(默认分词器,单个字分词)

GET base-product-spu-info/_analyze
{
"analyzer": "standard",
  "text":  "【市场价2532】HUAWEI WATCH 2 Pro 4G智能手表 移动支付"
}
// 分词结果:市|场|价|2532|huawei|watch|2|pro|4g|智|能|手|表|移|动|支|付

term 搜索

term搜索是对搜索词不进行分词搜索,但对搜索的字段还是会分词,而加keyword属性,则是不分词的精准搜索

  1. 关键字「智」搜索
GET base-product-spu-info/_search
{
  "query": {
    "term": {
      "spuName": {
        "value": "智"
      }
    }
  }
}
// 结果:搜索出数据
  1. 关键字「智能」搜索
GET base-product-spu-info/_search
{
  "query": {
    "term": {
      "spuName": {
        "value": "智能"
      }
    }
  }
}
// 结果:不能搜索出数据
  1. 关键字「Pro」搜索
GET base-product-spu-info/_search
{
  "query": {
    "term": {
      "spuName": {
        "value": "Pro"
      }
    }
  }
}
// 结果:不能搜索出数据
  1. 关键字「pro」搜索(小写)
GET base-product-spu-info/_search
{
  "query": {
    "term": {
      "spuName": {
        "value": "pro"
      }
    }
  }
}
// 结果:搜索出数据
  1. 关键字「【市场价2532】HUAWEI WATCH 2 Pro 4G智能手表 移动支付」搜索
GET base-product-spu-info/_search
{
  "query": {
    "term": {
      "spuName": {
        "value": "【市场价2532】HUAWEI WATCH 2 Pro 4G智能手表 移动支付"
      }
    }
  }
}
// 结果:不能搜索出数据
  1. 关键字「【市场价2532】HUAWEI WATCH 2 Pro 4G智能手表 移动支付」搜索(增加keyword关键字
GET base-product-spu-info/_search
{
  "query": {
    "term": {
      "spuName.keyword": {
        "value": "【市场价2532】HUAWEI WATCH 2 Pro 4G智能手表 移动支付"
      }
    }
  }
}
// 结果:搜索出数据

match搜索 (分词搜索)

先对搜索词进行分词,再进行分词搜索

GET base-product-spu-info/_search
{
  "query": {
    "match": {
      "spuName": "手机"
    }
  }
}
// 结果:搜索出数据

match_phrase 搜索(模糊搜索)

短语搜索, 要求所有的分词必须同时出现在文档中,同时位置必须紧邻一致**

GET base-product-spu-info/_search
{
  "query": {
    "match_phrase": {
      "spuName": "智能手表"
    }
  }
}
// 结果:搜索出数据

GET base-product-spu-info/_search
{
  "query": {
    "match_phrase": {
      "spuName": "智能手表1"
    }
  }
}
// 结果:不能搜索出数据

今天的文章Elasticsearch | 对文本实现模糊、精确、分词搜索分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/13884.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注