(一)text字段和keyword字段的区别

以下给出一个例子:

首先建立一个索引和类型,引入一个keywork的字段:

PUT my_index
{
"mappings": {
"products": {
"properties": {
"name": {
"type": "keyword"
}
}
}
}
}

然后查询是否有索引:

GET _cluster/state

可以看到已经创建成功:

添加一条数据:

POST my_index/products
{
"name":"washing machin"
}

然后查询:

GET my_index/products/_search
{
"query": {
"term": {
"name": "washing"
}
}
}

可以看到没有匹配到任何数据:

然后查询:

GET my_index/products/_search
{
"query": {
"term": {
"name": "washing machine"
}
}
}

可以看到成功匹配到了数据:

所以将字段设置成keyword的时候查询的时候已有的值不会被分词。

现在添加一个text类型的字段:

PUT my_index/_mapping/products?update_all_types
{
"properties": {
"tag": {
"type": "text"
}
}
}

可以看到添加成功:

往之前已经创建的doc之中添加tag的数据:

POST my_index/products/AWf9f66WV8yLH435XhgI
{
"name":"washing machine",
"tag":"electric household"
}

查询一下,可以看到:

然后对tag字段进行查询:

POST  /my_index/products/_search
{
"query": {
"term": {
"tag": "household"
}
}
}

可以看到虽然没有全部输入,但是已经查询到了:

现在输入全部的查询:

POST  /my_index/products/_search
{
"query": {
"term": {
"tag": "electric household"
}
}
}

发现现在已经查询不到了:

说明text类型的字段会被分词,查询的时候如果用拆开查可以查询的到,但是要是直接全部查,就是查询不到。

注意“1, 2”会被拆分成[1, 2],但是"1,2"是不拆分的,少了个空格。

(二)match和term的区别

1.term

1)term查询keyword字段。

term不会分词。而keyword字段也不分词。需要完全匹配才可。

成功。

但是如果:

则查询失败。

2)term查询text字段。

因为text字段会分词,而term不分词,所以term查询的条件必须是text字段分词后的某一个。

查询成功。

查询失败,因为现在tag已经被分词了,存储的是[he, is, silly, man]。

这样查询:

也是失败了,道理跟上面的是一样的。

2.

1)match查询keyword字段

match会被分词,而keyword不会被分词,match的需要跟keyword的完全匹配可以。

其他的不完全匹配的都是失败的。

2)match查询text字段

match分词,text也分词,只要match的分词结果和text的分词结果有相同的就匹配。

成功。如果都不相同就失败了。

3.

1)match_phrase匹配keyword字段。

这个同上必须跟keywork一致才可以。

只有这种情况才是成功的。

2)match_phrase匹配text字段。

match_phrase是分词的,text也是分词的。match_phrase的分词结果必须在text字段分词中都包含,而且顺序必须相同,而且必须都是连续的。

这是成功的。

如果不是连续的,就会失败。

4.

1)query_string查询key类型的字段,试过了,无法查询。

失败的,无法查询。

2)query_string查询text类型的字段。

和match_phrase区别的是,不需要连续,顺序还可以调换。

成功。

这样也是可以的。

es match、match_phrase、query_string和term的区别的更多相关文章

  1. ES match match_phrase term willcard的查询原理

    比如:要求实现SQL中like “%xxxx%”的匹配效果. wildcard通配 这种效果在ES中最匹配的做法是用wildcard query通配,这种情况不会对query分词,而是直接遍历倒排索引 ...

  2. java操作elasticsearch实现条件查询(match、multiMatch、term、terms、reange)

    1.条件match query查询 //条件查询match query @Test public void test10() throws UnknownHostException { //1.指定e ...

  3. GLSL ES 3.0 和 2.0 的区别

    GLSL ES 3.0 和 2.0 的区别 语法区别 attribute和varying. 取而代之的是 in和out 头文件多了个#version 300 es 纹理 texture2D 和 tex ...

  4. ElasticSearch match, match_phrase, term区别

    1.term结构化字段查询,匹配一个值,且输入的值不会被分词器分词. 比如查询条件是: { "query":{ "term":{ "foo" ...

  5. es 基于match_phrase的模糊匹配原理及使用

    [版权声明]:本文章由danvid发布于http://danvid.cnblogs.com/,如需转载或部分使用请注明出处 在业务中经常会遇到类似数据库的"like"的模糊匹配需求 ...

  6. 【ES】match_phrase与regexp

    刚开始接触es,由于弄不清楚match_phrase和regexp导致很多查询结果与预想的不同.在这整理一下. regexp:针对的是单个词项 match_phrase:针对的是多个词项的相对位置 它 ...

  7. 志强处理器结尾的ES、QS、正式版的区别

    CPU的推出过程大概分这几个步骤:ES1:测试架构和工艺制程ES2:修正大量BUG 这个时候的U已经能用了 但还存在隐患ES3(QS):质量认证样品 型号确定 在电脑上能显示型号和规格 可能存在或不存 ...

  8. ES 中的 POST 和 PUT 的区别

    0.什么是Restful架构 比较难说清楚,这部分大雾状态,引ruanyf 理解RESTful架构 的几句总结吧: Fielding将他对互联网软件的架构原则,定名为REST,即Representat ...

  9. ElasticSearch(ES)和solr的关系和区别

    可以参考这篇文章:http://www.cnblogs.com/chowmin/articles/4629220.html Solr 2004年诞生(当时是Solar). ElasticSearch ...

随机推荐

  1. JavaScript Promise迷你书(中文版)

    最近,发现了一个很不错的关于Promise介绍的迷你电子版书,分享给大家: http://liubin.org/promises-book/#chapter4-advanced-promise (篇幅 ...

  2. 在wepy里面使用redux

    wepy 框架本身是支持 Redux 的,我们在构建项目的时候,将 是否安装 Redux 选择 y 就好了,会自动安装依赖,运行项目后看官方给的 demo 确实是可以做到的,但是官方文档里却对这一块只 ...

  3. Eclipse警告:The serializable class XXX does not declare a static final serialVersionUID field of type long

    serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性. 在Eclipse中可以自动生成,有两种生成方式: 一个是默认的1L,比如:privat ...

  4. hadoop集群操作常用命令

    一.HDFS相关 1.启动NameNode sbin/hadoop-daemon.sh start namenode 2.启动DataNode sbin/hadoop-<span style=& ...

  5. QT开发之旅四邮件发送工具

    终于有了一个晚上安静的写写程序,最近一直忙着公司商务上的事情,一直想用QT实现一个调用最底层socket通信来实现的邮件发送程序,以前用C#写过,微软都封装好的,不知道底层是如何实现的,只知道调用方法 ...

  6. 原生js--HTTP进度事件

    1.HTTP进度事件属于XHR2规范定义的系列事件 2.事件模型中会触发不同的事件,所以不再需要检查readyState事件 3.当调用send()时,触发loadstart事件 4.当正在加载服务器 ...

  7. Android 编译时:m、mm、mmm、mma、mmma的区别

    m:编译整个安卓系统 makes from the top of the tree mm:编译当前目录下的模块,当前目录下需要有Android.mk这个makefile文件,否则就往上找最近的Andr ...

  8. sencha touch 压缩js,css遇到的问题

    在使用工具压缩css和jss时,我遇到了以下问题 1. showBtn: { tap: function (t, value) { this.redirectTo(t.config.goto); } ...

  9. openvpn 负载均衡方案

    这些方案的前提是,vpnserver的key都是一样的.方案1在openvpn客户端设两个配置文件,我们自己手动去连接去选择方案2在openvpn 的配置文件里面加个随机参数remote 8.8.8. ...

  10. cocos2d-x学习之旅(五):1.5 使用eclipse编译cocos2d-x示例项目,创建cocos2d-x android项目并部署到真机

    今天将cocos2d-x的示例项目tests编译到android真机运行,以及如何创建cocos2d-x的android项目. 打开cocos2d-x的tests项目,路径为:D:\cocos2d-x ...