es 全文文本分词查询

ES 对 TEXT 类型的分词

我们可以使用分词器来查看分词的结果,默认的分词器是 standard 如果是其他的可以指定分词器

shell 复制代码
# 标准的分词
POST _analyze
{
  "text": "Hello World!",
  "analyzer": "standard"
}

全文检索的分词概念

对目标文本做分词,分词以后做倒排索引(inverted-index)支持基于分词查询文档数据,分词的算法有很多,分词的领域也是十分的深入。es 中默认的分词打分算法 TF/IDF=>BM25,ES中的字段只支持 TEXT

ES 全文检索使用

  • match-all 全查询
  • match 标准分词

match-all

使用 match-all 可以查询索引中所有的数据

shell 复制代码
GET mine-of-index-01/_search
{
  "query": {
    "match-all": {}
  }
}

GET mine-of-index-01/_search

# 这两个使用案例的结果是一样的,本质没有任何区别

match

这个会根据分词来查询对应的数据,然后根据评分排序,评分最高的在最前面

shell 复制代码
# 默认的全文检索
GET mine-of-index-01/_search
{
  "query": {
    "match": {
      "match_filed": "NEED TERM WORD"
    }
  }
}

# 使用指定的分词器对查询的时候的目标文本做分词
GET mine-of-index-01/_search
{
  "query": {
    "match": {
      "match_filed": {
        "query": "NEED TERM WORD",
        "analyzer": "standard"
      }
    }
  }
}

# 对分词结果做操作
GET mine-of-index-01/_search
{
  "query": {
    "match": {
      "match_filed": {
        "query": "NEED TERM WORD",
        # 默认的是 or,如果是 or 匹配度会很低,可以使用 and 来提交匹配度 
        "operator": "and"
      }
    }
  }
}

# 对于提高匹配度的事情不单单 and 可以也可以使用 or 但是要配合另一个参数来完成功能
GET mine-of-index-01/_search
{
  "query": {
    "match": {
      "match_filed": {
        "query": "NEED TERM WORD",
        "operator": "or",
        # 最小分词匹配的数量,这里可以使用 _analyze 来查询有多少分词然后根据自己的业务需求来判别
        "minimum_should_match": 2
      }
    }
  }
}

# 纠错用法,如果我们输入一个单词例如 book,但是我们输入错误,bool,这个时候就不能查询到 book,但是可以使用 es 提供的纠错功能来查询到 book
GET mine-of-index-01/_search
{
  "query": {
    "match": {
      "match_filed": {
        "query": "bool",
        # 这里表示可以纠正一个字符
        "fuzziness": 1
      }
    }
  }
}

match_bool_prefix

这里使用前缀匹配模式来查询数据

shell 复制代码
# 默认的全文检索
GET mine-of-index-01/_search
{
  "query": {
    "match_bool_prefix": {
      "match_filed": "NEED TERM WORD"
    }
  }
}

match_phrase

短语匹配,要求 ES 按照目标字符来匹配,不能拆分,词语的顺序也不可以更改

shell 复制代码
# 默认的全文检索
GET mine-of-index-01/_search
{
  "query": {
    "match_phrase": {
      "match_filed": "NEED TERM WORD"
    }
  }
}

# 这个也拥有有一个类似于 match 中 fuzziness 参数的功能,slop
GET mine-of-index-01/_search
{
  "query": {
    "match_phrase": {
      "match_filed": "NEED TERM WORD",
      # 假设 es 中并不存在 need term word 这样的单词,但是存在 NEED TERM HH WORD 这样的,就可以受用 slop 表示中间允许存在一个未知词
      "slop": 1
    }
  }
}

match_phrase_prefix

短语前缀匹配

shell 复制代码
# 默认的全文检索
GET mine-of-index-01/_search
{
  "query": {
    "match_phrase_prefix": {
      "match_filed": "NEED TERM"
    }
  }
}

multi_match

多字段匹配

shell 复制代码
# 默认的全文检索
GET mine-of-index-01/_search
{
  "query": {
    "multi_match": {
      "match_filed": {
        "query": "NEED TERM",
        "fields": [
          "field_01", "field_02", "t_field_01"
        ]
      }
    }
  }
}

# 多字段通配符 * 
GET mine-of-index-01/_search
{
  "query": {
    "multi_match": {
      "match_filed": {
        "query": "NEED TERM",
        "fields": [
          # "field_01", "field_02", "t_field_01"
          # 这里就可以使用通配符
          "*field*"
        ]
      }
    }
  }
}

intervals

这个 API 可以做数据的多级匹配,比如满足 A,并且 A 的数据要满足 B,并且 B 执行以后要满足 C,如果需要可以从 ES 官网深入查询他的 DSL API 使用规范。

query_string

这个是早期的的底层的一个语法,可以使用 kql 方式来实现查询,kibana 中的 discover 中可以使用这个语法,可以深入学习一下 KQL,还是很是灵活的

shell 复制代码
GET mine-of-index-01/_search
{
  "query": {
    "query_string": {
      # 这里是要查询 字段:FILED,是 A 或者 B 的数据
      "query": "FIELD: (A or B)"
    }
  }
}

ES 查询性能分析

类似于 SQL 中的 show profiles && show profile ${num},他的分析结果就会在响应体中

shell 复制代码
GET mine-of-index-01/_search
{
  "profile" true,
  "query": {
    "match_all": {}
  }
}
相关推荐
Coder_Boy_6 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
2501_944934736 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
Gain_chance6 小时前
34-学习笔记尚硅谷数仓搭建-DWS层最近一日汇总表建表语句汇总
数据仓库·hive·笔记·学习·datagrip
九河云7 小时前
5秒开服,你的应用部署还卡在“加载中”吗?
大数据·人工智能·安全·机器学习·华为云
Gain_chance7 小时前
36-学习笔记尚硅谷数仓搭建-DWS层数据装载脚本
大数据·数据仓库·笔记·学习
每日新鲜事8 小时前
热销复盘:招商林屿缦岛203套售罄背后的客户逻辑分析
大数据·人工智能
Gain_chance8 小时前
35-学习笔记尚硅谷数仓搭建-DWS层最近n日汇总表及历史至今汇总表建表语句
数据库·数据仓库·hive·笔记·学习
AI架构全栈开发实战笔记9 小时前
Eureka 在大数据环境中的性能优化技巧
大数据·ai·eureka·性能优化
AI架构全栈开发实战笔记9 小时前
Eureka 对大数据领域服务依赖关系的梳理
大数据·ai·云原生·eureka
自挂东南枝�9 小时前
政企舆情大数据服务平台的“全域洞察中枢”
大数据