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?pretty -d 
‘{
  "query":{
    "term":{
        "title":"北京奥运"
    }
  }
}‘

将会得到如下结果

{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
    "total": 1,
    "max_score": 0.92055845,
    "hits": [
     {
        "_index": "index",
        "_type": "doc",
        "_id": "3",
        "_score": 0.92055845,
        "_source": {
           "content": "同一个世界同一个梦想",
           "title": "北京奥运",
           "tags": [
               "和平"
            ]
        }
      }
    ]
  }
}

match类查询

match查询会先对搜索词进行分词,分词完毕后再逐个对分词结果进行匹配,因此相比于term的精确搜索,match是分词匹配搜索,match搜索还有两个相似功能的变种,一个是match_phrase,一个是multi_match,接下来详细介绍一下

match

前面提到match搜索会先对搜索词进行分词,对于最基本的match搜索来说,只要搜索词的分词集合中的一个或多个存在于文档中即可,例如,当我们搜索中国杭州,搜索词会先分词为中国和杭州,只要文档中包含搜索和杭州任意一个词,都会被搜索到

$curl -XGET http://localhost:9200/index/doc/_search?pretty -d 
‘{
    "query": {
        "match": {
            "content": "中国杭州"
        }
    }
}‘

文档3正文中有杭州,文档2中有中国,因此搜索结果有两个,文档3中杭州出现两次,所以排在前面,结果如下:

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
      "total" : 2,
      "max_score" : 0.99999994,
      "hits" : [ {
            "_index" : "index",
            "_type" : "doc",
            "_id" : "4",
            "_score" : 0.99999994,
            "_source" : {
                 "content" : "杭州是一个美丽的城市,欢迎来到杭州",
                "title" : "宣传",
                "tags" : [ "旅游", "城市" ]
            }
       }, {
            "_index" : "index",
            "_type" : "doc",
            "_id" : "2",
            "_score" : 0.8838835,
            "_source" : {
                  "content" : "中国是世界上人口最多的国家",
                  "title" : "中国",
                  "tags" : [ "中国", "人口" ]
            }
       } ]
    }
}

原文地址:https://www.cnblogs.com/loveyouyou616/p/10364106.html

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

ES查询-term VS match (转)的相关文章

elasticsearch 查询 term和match

一.match 查询 1.match 之 match (按条件查询) GET zhifou/doc/_search { "query": { "match": { "from": "gu" } } } 2.match 之 match_all (查询全部) GET zhifou/doc/_search { "query": { "match_all": {} } } #相当于 GET zh

es查询

POST   地址/_search 普通查询 body { "query":{ "match" { "key":value }, "sort":[排序规则] } } 聚合查询 { "aggs":{ "grades_word_count":{ "min":{ "field":"word_count" } } } } 高级查询 1

Elasticsearch --- 4. term与match ,修改器,建议器

一.term与match 1.区别 term查询查找包含文档精确的倒排索引指定的词条.也就是精确查找(没经过分词). term和match的区别是: match是经过analyer的,也就是说,文档首先被分析器给处理了.根据不同的分析器,分析的结果也稍显不同,然后再根据分词结果进行匹配. term则不经过分词,它是直接去倒排索引中查找了精确的值了. 建立数据结构 PUT w1 { "mappings": { "doc": { "properties&quo

es 查询更新操作

# es 查询更新操作 # _*_ coding: utf-8 _*_ import time import datetime import pymysql from elasticsearch import Elasticsearch from urllib3.connectionpool import xrange # class EsClient(): es_host = "192.168.8.190" port = 9200 timeout = 15000 global ind

Es查询结果集默认是10000,更新设置

Es查询结果集默认是10000,结果集大小是int,最大为21亿左右 PUT _all/_settings?preserve_existing=true { "index.max_result_window" : "2000000000" } 将所有的索引结果窗口集改为20亿,这个是已经存在的索引 新建的索引还会默认是10000,需要修改模板配置 删除模板,在原模板加入"max_result_window":2000000000     然后重新

ES查询-match VS match_phrase

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

es使用term+filter查询(对type为text的查询注意点)

插入测试数据 PUT /forum/article/_bulk { "index": { "_id": 1 }} { "articleID" : "XHDK-A-1293-#fJ3", "userID" : 1, "hidden": false, "postDate": "2017-01-01" } { "index": { &

python 配合 es 查询数据

1.python脚本 [[email protected] ~]# cat python-es.py #!/usr/bin/env python3 from elasticsearch import Elasticsearch from json import dumps es = Elasticsearch( ['127.0.0.1:9200'], # 认证信息 # http_auth=('elastic', 'elastic') ) #print(es.ping()) #print(es.c

Neo4j 第九篇:查询数据(Match)

Cypher使用match子句查询数据,是Cypher最基本的查询子句.在查询数据时,使用Match子句指定搜索的模式,这是从Neo4j数据库查询数据的最主要的方法.match子句之后通常会跟着where子句,向模式中添加过滤性的谓词,用于对数据进行过滤.在查询数据时,查询语句分为多个部分,with子句用于对上一个查询部分的结果进行处理,以输出到下一个查询部分. 一,节点查询 对节点进行查询,是查询graph的基本操作,节点具有标签和属性,Match查询不仅能够按照标签对节点进行查询,还能按照属