es match和term的区别

(一)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类型的字段会被分词,查询的时候如果用拆开查可以查询的到,但是要是直接全部查,就是查询不到。

(二)match和term的区别

term是对查询条件里的词不做分词。

match是对查询条件里的词做分词,然后目标有包含即可其中一个即可。

match_phrase是对查询条件里的词做分词,然后必须包含所有的词。

原文地址:https://www.cnblogs.com/chenmz1995/p/10199147.html

时间: 2024-10-11 06:38:01

es match和term的区别的相关文章

5.Python里面match()和search()的区别?

Python里面match()和search()的区别? '''match()从第一个字符开始找,如果第一个就不匹配,会直接返回None,不继续匹配.主要用于匹配开头''' #coding=utf-8 import re result = re.match("www","www.cn") result.group() >>'www' # 否则返回None '''search()会在整个字符串中查找,知道找到一个匹配的''' #coding=utf-8 i

Elasticsearch查询match、term和bool区别

es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL).由于DSL查询更为直观也更为简易,所以大都使用这种方式.DSL查询是POST过去一个json,由于post的请求是json格式的,所以存在很多灵活性,也有很多形式.这里有一个地方注意的是官方文档里面给的例子的json结构只是一部分,并不是可以直接黏贴复制进去使用的.一般要在外面加个query为key的机构. match最简单的一个match例子: 查询和"我的宝马多少马力"这个

ES查询-term VS match (转)

原文地址:https://blog.csdn.net/sxf_123456/article/details/78845437 elasticsearch 中term与match区别 term是精确查询 match是模糊查询 term查询 term是代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词,所以我们的搜索词必须是文档分词集合中的一个.比如说我们要找标题为北京奥运的所有文档 $curl -XGET http://localhost:9200/index/doc/_search?pr

(转)Elasticsearch查询规则------match和term

es种有两种查询模式,一种是像传递URL参数一样去传递查询语句,被称为简单搜索或查询字符串(query string)搜索,比如 GET /megacorp/employee/_search //查询全部员工 GET /megacorp/employee/_search?q=last_name:Smith //查询last_name为Smith的员工 另外一种是通过DSL语句来进行查询,被称为DSL查询(Query DSL),DSL是Elasticsearch提供的一种丰富且灵活的查询语言,该语

python正则表达式函数match()和search()的区别详解

match()和search()都是python中的正则匹配函数,那这两个函数有何区别呢? match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none 例如: #! /usr/bin/env python # -*- coding=utf-8 -*- import re text = 'pythontab' m = re.ma

python学习:python中的正则表达式函数match和search()的区别

match函数 binary_re='[01]*' pattern = re.compile(binary_re) m=re.match(binary_re,destStr) if m:      print m.group(0) else:     print 'not match' match函数是从字符串起始位置开始进行匹配,匹配失败返回None,匹配成功的话, m.group(0)为匹配的结果 2.search函数 binary_re='[01]*' pattern = re.compi

正则表达式match和group的区别 具有相同模式的字符串使用组的提取案例

Match类 示例:查找出字符串中包含的url string text = "FirstUrl: http://www.sohu.com ,SecondUrl: http://www.baidu.com "; string pattern = @"\b(\S+)://(\S+)\b"; //匹配URL的模式 MatchCollection mc = Regex.Matches(text, pattern); //满足pattern的匹配集合 Console.Writ

ES查询-match VS match_phrase

我们以一个查询的示例开始,我们在student这个type中存储了一些学生的基本信息,我们分别使用match和match_phrase进行查询. 首先,使用match进行检索,关键字是"He is": GET /test/student/_search { "query": { "match": { "description": "He is" } } } 执行这条查询,得到的结果如下: { "t

match、search、sub、findall、compile区别

摘自网络,综合自己的理解: 函数名 原型 详解 返回类型 注意事项 re.match import re re.match(pattern,string,flags) pattern:正则表达式,匹配成功,返回一个Match,否则返回一个None string:要匹配的字符串 flags:标志位,用于控制正则表达式的匹配方式,如是否区分大小写,多行匹配等等 返回一个_sre.SRE_Match对象,其有两个方法:group() groups() 他只会去从字符串的开始与正则表达式做匹配: 并不会