Elasticsearch专栏-5.es基本用法-分词查询

这篇具有很好参考价值的文章主要介绍了Elasticsearch专栏-5.es基本用法-分词查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是分词

所谓分词,就是把一段语句,分割成一个个单词的过程。比如"717 Hendrickson Place"短语,分词后就是三个单词,即717、hendrickson、place。注意,分词后的单词默认都是小写。
分词查询,指的就是查询时,把要查询的语句(字符串)先进行分词,然后拿分词后的单词去文档集合中比对。只要包含分词后的任意一个单词,就算命中结果。

如何查看分词结果

1.查看指定短语分词结果

GET _analyze
{
  "analyzer":"standard",
  "text":"717 Hendrickson Place"
}

es 分词查询,Elasticsearch,elasticsearch
分词结果中,有几个关键字:token、start_offset、end_offset、position。它们的含义说明如下:

关键字 含义
token 分词后的单词,小写
start_offset 在整个短语字符串中的开始位置,相当于数组下标
end_offset 在整个短语字符串中的结束位置,相当于数组下标
position 单词在整个短语的位置,即第几个单词

2.查看索引下某个字段分词结果

GET /bank/_analyze
{
  "field":"address",
  "text":"717 Hendrickson Place" 
}

es 分词查询,Elasticsearch,elasticsearch

3.查看单个文档某个字段分词结果
原始文档数据

GET /bank/_doc/1

es 分词查询,Elasticsearch,elasticsearch

分词后数据

GET /bank/_doc/1/_termvectors?fields=address

es 分词查询,Elasticsearch,elasticsearch

分词涉及关键字说明

分词查询中,经常涉及几个关键字,如text、keyword、match、term。很多人都会混淆,不明白彼此间有何区别。下面就重点解释下。

text和keyword

  1. text和keyword是数据类型,针对的是数据写入,写入到磁盘上是否进行分词。
  2. text会分词,也就是说,在数据落盘时,会被分割成多个独立的单词,然后存入倒排索引中。分词查询时候,也是以单词维度进行匹配。
  3. keyword不会分词,存的的是整个短语。

match和term

  1. match和term,是两种搜索方式,针对的是数据查询,要查询的短语是否进行分词。
  2. match搜索时候,会对被搜索的内容进行分词,然后拿分词后的内容,去倒排索引中查询。
  3. term是不对被搜索内容进行分词,就是完全匹配。

举例说明

term+keyword:有结果

POST /bank/_search
{
	"query": {
		"term": {
			"address.keyword": "717 Hendrickson Place"
		}
	}
}

es 分词查询,Elasticsearch,elasticsearch
term+keyword:没有结果(这里改动了place)

POST /bank/_search
{
	"query": {
		"term": {
			"address.keyword": "717 Hendrickson Place01"
		}
	}
}

es 分词查询,Elasticsearch,elasticsearch
match+keyword:有结果

POST /bank/_search
{
	"query": {
		"match": {
			"address.keyword": "717 Hendrickson Place"
		}
	}
}

es 分词查询,Elasticsearch,elasticsearch
match+keyword:没有结果(这里改动了place)

POST /bank/_search
{
	"query": {
		"match": {
			"address.keyword": "717 Hendrickson Place01"
		}
	}
}

es 分词查询,Elasticsearch,elasticsearch
term+text:没有结果

POST /bank/_search
{
	"query": {
		"term": {
			"address": "717 Hendrickson Place"
		}
	}
}

es 分词查询,Elasticsearch,elasticsearch
match+text:有结果

POST /bank/_search
{
	"query": {
		"match": {
			"address": "717 Hendrickson Place"
		}
	}
}

es 分词查询,Elasticsearch,elasticsearch
match+text:有结果(这里改动了place)

POST /bank/_search
{
	"query": {
		"match": {
			"address": "717 Hendrickson Place01"
		}
	}
}

es 分词查询,Elasticsearch,elasticsearch
term+text:没有结果

POST /bank/_search
{
	"query": {
		"term": {
			"address": "Hendrickson"
		}
	}
}

es 分词查询,Elasticsearch,elasticsearch
term+text:有结果(Hendrickson改成小写hendrickson)

POST /bank/_search
{
	"query": {
		"term": {
			"address": "hendrickson"
		}
	}
}

es 分词查询,Elasticsearch,elasticsearch

分词查询:match_phrase

先看下例子,此时能查到结果

POST /bank/_search
{
  "query":{
    "match_phrase":{
      "address": "467 Hutchinson"
    }
  }
}

es 分词查询,Elasticsearch,elasticsearch
下面这种查不到结果(Hutchinson改为了Hutchinson01)

POST /bank/_search
{
  "query":{
    "match_phrase":{
      "address": "467 Hutchinson01"
    }
  }
}

es 分词查询,Elasticsearch,elasticsearch
同样的查询语句,此时改为match,能查到结果

POST /bank/_search
{
  "query":{
    "match":{
      "address": "467 Hutchinson01"
    }
  }
}

es 分词查询,Elasticsearch,elasticsearch

很多文章把match_phrase查询称为短语查询,只要结果中全部包含待查询语句即可。从现象来看,这种解释也没错,但很容易让人误以为match_phrase查询时,不对待查询语句进行分词,就是SQL中like的功能。这种是不对的。
从上面对比中可以看出来,match_phrase和match是不一样的。match是对待查询语句先分词,然后再去文档集合中查询。只要包含分词后的任意一个单词,就算是命中。但match_phrase不是这样,它也会先分词,不过查询时候必须全部包含分词后的所有单词,其单词前后顺序也要一样。
下面把上述短语中单词顺序调换下,在测试看

POST /bank/_search
{
  "query":{
    "match_phrase":{
      "address": "Hutchinson 467"
    }
  }
}

es 分词查询,Elasticsearch,elasticsearch
此时可以看到,单词顺序颠倒后,match_phrase是查不到结果的。match仍然可以。
总结:match_phrase和match查询时候,都会先分词再查询。match要求不高,只要匹配到分词后的任意一个单词,就算查到结果。而match_phrase要求严格,不仅要求,要能够匹配到分词后的所有单词,且分词后的单词顺序也要和命中结果中的顺序保持一致。这样才算查到结果文章来源地址https://www.toymoban.com/news/detail-793392.html

到了这里,关于Elasticsearch专栏-5.es基本用法-分词查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch中文分词和模糊查询

            ElasticSearch是一个一个分布式的实时文档存储,每一个字段都可以被索引与搜索,并且能支持PB级别的结构化或者非结构化数据。早期我们应用的全局搜索是简单的SQL模糊查询,为了分担数据库压力所以用了ES,选择他的原因除了以上几点外,还有其提供的API方式简单

    2024年02月03日
    浏览(52)
  • Elasticsearch专栏-8.es读写性能及优化

    服务器资源 资源 数值 服务器 华为 系统 centos7.9 cpu Intel® Core™ i5-10500 CPU @ 3.10GHz、6核12线程 mem 62G disk 机械硬盘、3.6T 单机写入性能 将es堆内存增大到20G,其余配置不做任何修改,数据单条写入。测试结果如下 线程 线程延迟时间(ms) 数据量(W) 平均响应时间(ms) QPS 300 0 5.9 338

    2023年04月12日
    浏览(43)
  • Elasticsearch分词详解:ES分词介绍、倒排索引介绍、分词器的作用、停用词

    详见:https://blog.csdn.net/weixin_40612128/article/details/123476053

    2024年02月12日
    浏览(53)
  • SpringBoot配置Elasticsearch以逗号分词查询(自定义逗号分词器)

    ①在resources目录下创建commaAnalyzer_setting.json配置文件。 ps:注意pom.xml配置扫描json文件 ②为文档类添加注解。 ③为要分词的字典添加注解属性 ④删除索引(如果已经存在索引,需要先删除索引才能重新生成带分词器的索引)。 ⑤重启项目(重新生成索引),如图就是成功生

    2024年02月17日
    浏览(43)
  • elasticsearch 基于ik分词器的分词查询和模糊匹配

    前言:elasticsearch 查询有很多,查询的条件有固定格式,返回结果提示不明确,让ES使用起来有点不方便的感觉,ES查询方式很多,简单介绍几种使用点的,实用的 此处简单梳理一下最常用的查询 模糊匹配查询 类似 mysql 语法中的 like ‘%value%’ 类似于百度的分词查询 将

    2024年02月16日
    浏览(38)
  • Elasticsearch安装分词插件[ES系列] - 第499篇

    历史文章( 文章 累计490+) 《 国内最全的Spring Boot系列之一 》 《 国内最全的Spring Boot系列之二 》 《 国内最全的Spring Boot系列之三 》 《 国内最全的Spring Boot系列之四 》 《 国内最全的Spring Boot系列之 五 》 《 国内最全的Spring Boot系列之六 》 ElasticSearch应用场景以及技术

    2024年02月02日
    浏览(43)
  • es elasticsearch 十 中文分词器ik分词器 Mysql 热更新词库

    目录 中文分词器ik分词器 介绍 安装 使用分词器 Ik分词器配置文件 Mysql 热更新词库 介绍 中文分词器按照中文进行分词,中文应用最广泛的是ik分词器 安装 官网下载对应版本zip 下载  放到  plugins 目录 新建 ik文件夹 考入解析zip 重启 es //分成小单词 使用分词器 ik_max_word分成

    2024年02月07日
    浏览(60)
  • Elasticsearch07:ES中文分词插件(es-ik)安装部署

    在中文数据检索场景中,为了提供更好的检索效果,需要在ES中集成中文分词器,因为ES默认是按照英文的分词规则进行分词的,基本上可以认为是单字分词,对中文分词效果不理想。 ES之前是没有提供中文分词器的,现在官方也提供了一些,但是在中文分词领域,IK分词器是

    2024年02月03日
    浏览(81)
  • 原生语言操作和spring data中RestHighLevelClient操作Elasticsearch,索引,文档的基本操作,es的高级查询.查询结果处理. 数据聚合.相关性系数打分

    ​ Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasti

    2024年02月05日
    浏览(86)
  • 搜索引擎elasticsearch :安装elasticsearch (包含安装组件kibana、IK分词器、部署es集群)

    kibana可以帮助我们方便地编写DSL语句,所以还要装kibana 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: 这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大,接近1G。不建议大家自己pull。 课前资料提供了镜像的tar包: 大家将

    2024年02月16日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包