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

什么是分词

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

如何查看分词结果

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

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

在这里插入图片描述
分词结果中,有几个关键字:token、start_offset、end_offset、position。它们的含义说明如下:

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

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

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

在这里插入图片描述

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

GET /bank/_doc/1

在这里插入图片描述

分词后数据

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

在这里插入图片描述

分词涉及关键字说明

分词查询中,经常涉及几个关键字,如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"
		}
	}
}

在这里插入图片描述
term+keyword:没有结果(这里改动了place)

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

在这里插入图片描述
match+keyword:有结果

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

在这里插入图片描述
match+keyword:没有结果(这里改动了place)

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

在这里插入图片描述
term+text:没有结果

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

在这里插入图片描述
match+text:有结果

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

在这里插入图片描述
match+text:有结果(这里改动了place)

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

在这里插入图片描述
term+text:没有结果

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

在这里插入图片描述
term+text:有结果(Hendrickson改成小写hendrickson)

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

在这里插入图片描述

分词查询:match_phrase

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

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

在这里插入图片描述
下面这种查不到结果(Hutchinson改为了Hutchinson01)

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

在这里插入图片描述
同样的查询语句,此时改为match,能查到结果

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

在这里插入图片描述

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

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

在这里插入图片描述
此时可以看到,单词顺序颠倒后,match_phrase是查不到结果的。match仍然可以。
总结:match_phrase和match查询时候,都会先分词再查询。match要求不高,只要匹配到分词后的任意一个单词,就算查到结果。而match_phrase要求严格,不仅要求,要能够匹配到分词后的所有单词,且分词后的单词顺序也要和命中结果中的顺序保持一致。这样才算查到结果

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
elasticsearch-7.12.0-py2.py3-none-any.whl 是 Elasticsearch 的 Python 客户端库的一个安装文件。Elasticsearch 是一个开源的实时分布式搜索和分析引擎,用于处理大规模数据集。它提供了一个简单可扩展的 RESTful API 接口,允许用户进行高效的数据搜索、分析以及存储。 这个安装文件的命名规则是根据 Python 的支持版本以及可运行平台来命名的。-py2.py3 表示可以同时兼容 Python 2 和 Python 3 版本的代码。-none-any 表示它是一个纯 Python 代码的库,不依赖于特定的操作系统或平台。 通过安装 elasticsearch-7.12.0-py2.py3-none-any.whl,您可以轻松地在您的 Python 环境中使用 Elasticsearch。这个库提供了许多功能,包括连接到 Elasticsearch 实例、执行索引、搜索和分析操作,以及管理和维护 Elasticsearch 的集群和节点。您可以使用这个库来构建各种应用,如全文搜索引擎、实时日志分析等。 要安装 elasticsearch-7.12.0-py2.py3-none-any.whl,您可以使用 pip 工具,在命令行中运行以下命令: ``` pip install elasticsearch-7.12.0-py2.py3-none-any.whl ``` 安装成功后,您就可以在您的 Python 代码中导入 elasticsearch 模块,并开始使用 Elasticsearch 的功能了。 总结:elasticsearch-7.12.0-py2.py3-none-any.whl 是 Elasticsearch 的 Python 客户端库的安装文件,用于连接、操作和管理 Elasticsearch 实例。通过安装这个库,您可以在您的 Python 项目中轻松使用 Elasticsearch 的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值