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

一.term与match 

  1.区别

term查询查找包含文档精确的倒排索引指定的词条。也就是精确查找(没经过分词)。
term和match的区别是:

  match是经过analyer的,也就是说,文档首先被分析器给处理了。根据不同的分析器,分析的结果也稍显不同,然后再根据分词结果进行匹配。
  term则不经过分词,它是直接去倒排索引中查找了精确的值了。
建立数据结构

PUT w1
{
  "mappings": {
    "doc": {
      "properties":{
        "t1":{
          "type": "text"
        },
        "t2": {
          "type": "keyword"
        }
      }
    }
  }
}

PUT w1/doc/1
{
  "t1": "hi single dog",
  "t2": "hi single dog"
}
GET w1/doc/_search
{
  "query": {
    "term": {
      "t1": "hi"
    }
  }
}

#能查到

GET w1/doc/_search
{
  "query": {
    "term": {
      "t2": "hi"
    }
  }
}

#查不到

GET w1/doc/_search
{
  "query": {
    "match": {
      "t2": "hi single dog"
    }
  }
}
#只能这样查询keyword的值
GET w1/doc/_search
{
  "query": {
    "match": {
      "t1": "hi"
    }
  }
}

#t1 进行了分词,可以查到

  2.查找多个精确值

①原样式

PUT w1/doc/2
{
  "t1": "20",
  "t2": "2019-4-16"
}
PUT w1/doc/3
{
  "t1": "30",
  "t2": "2019-4-17"
}

GET w1/doc/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "t1": "20"
          }
        },
        {
          "term": {
            "t1": "30"
          }
        }
      ]
    }
  }
}
②简单样式

GET w1/doc/_search
{
  "query": {
    "terms": {
      "t1": ["20", "30"]
    }
  }
}

GET w1/doc/_search
{
  "query": {
    "terms": {
      "t2": ["2019-4-16", "2019-4-17"]
    }
  }
}

二.修改器

  1.词条建议器 

  两种顺序都可以得到结果

GET c12/doc/_search
{
  "suggest": {
    "text": "appl",    #要修改词
    "my1": {            #别名

      "term": {
        "field": "title"     #对照字段
      }
    }
  }
}

    

GET c12/doc/_search
{

  "suggest": {
    "my1": {          #别名
      "text": "appl",    
      "term": {
        "field": "title"
      }
    }

  }
}

  2.词组建议器

GET s1/doc/_search
{
  "suggest": {
    "my_s1": {
      "text": "luce is coo",
      "phrase": {
        "field": "title"
      }
    }
  }
}
加高亮显示

GET s4/doc/_search
{
  "suggest": {
    "my_s4": {
      "text": "lucen elasticsearc rock",
      "phrase": {
        "field": "title",
        "highlight":{
          "pre_tag":"<em class=‘xxx‘>",
          "post_tag":"</em>"
        }
      }
    }
  }
}

三.建议器(前缀提示)

  1.基本使用

GET s8/doc/_search
{
  "suggest": {
    "s3": {
      "text": "bl",
      "completion": {
        "field": "title"
      }
    }
  }
}
修改器和建议器一起用

GET c12/doc/_search
 {
    "suggest": {
        "text": "appl",
        "s1": {
            "term": {
                "field": "title"
            }
        },
        "s2": {
            "phrase": {
                "field": "title"
            }
        },
        "s3": {
            "completion": {
                "field": "title"
            }
        }
    }
}

  2.权重

建立数据结构

PUT s8
{
  "mappings": {
    "doc":{
      "properties":{
        "title":{
          "type": "completion"
        }
      }
    }
  }
}
插入数据

PUT s8/doc/3
{
  "title": [
    {
      "input":"appel",
      "weight": 2
    },
    {
      "input":"apple",
      "weight": 3
    }
  ]
}
查询

GET s8/doc/_search
{
  "suggest": {
    "my_s8": {
      "text": "app",
      "completion": {
        "field": "title"
      }
    }
  }
}

  3. size参数(返回数据量,默认是5)

GET s8/doc/_search
{
  "suggest": {
    "completion_suggest": {
      "prefix": "app",
      "completion": {
        "field": "title",
        "size": 1
      }
    }
  },
  "_source": "title"

  4.skip_duplicates(过滤重复)

GET s8/doc/_search
{
  "suggest": {
    "completion_suggest": {
      "prefix": "app",
      "completion": {
        "field": "title",
        "size": 5,
        "skip_duplicates":true
      }
    }
  },
  "_source": "title"
}

四.解决 size 最大10000的问题

进行修改

PUT s18/_settings
{
  "index":{
    "max_result_window": "11000"
  }
}
这样就可以返回10000以上的数据量了

GET s18/doc/_search
{
  "size": 11000,
  "query": {
    "match_all": {}
  }
}

原文地址:https://www.cnblogs.com/sc-1067178406/p/10920414.html

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

Elasticsearch --- 4. term与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查询-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

《Python cookbook》 “定义一个属性可由用户修改的装饰器” 笔记

看<Python cookbook>的时候,第9.5部分,"定义一个属性可由用户修改的装饰器",有个装饰器理解起来花了一些时间,做个笔记免得二刷这本书的时候忘了 完整代码:https://github.com/blackmatrix7/python-learning/blob/master/python_cookbook/chapter_9/section_5/attach_wrapper.py 书中的装饰器(书中称之为访问器函数) def attach_wrapper(o

python进阶之装饰器之2.定义一个可接受参数的装饰器、如何定义一个属性可由用户修改的装饰器、定义一个能接受可选参数的装饰器

2.1.定义一个接受参数的装饰器 前言:在理解上一篇文章的基础上理解定义一个接受参数的装饰器 思路:在装饰器函数的外层再定义一个接受参数的函数,让他返回装饰器函数,在装饰器函数中进行相关参数的进行操作 代码解析如下: from functools import wrapsimport logging# 定义外层函数logged,使用return decorate返回装饰器函数def logged(level, name=None, message=None): """ Add

Python - 三大器 迭代器,生层器,装饰器

目录 Python - 三大器 迭代器,生层器,装饰器 一. 容器 二. 可迭代对象(iterable) 三. 迭代器 四. 生成器 五. 装饰器 1. 定义 六. 闭包 Python - 三大器 迭代器,生层器,装饰器 在介绍三大器之前先来了解一下容器和可迭代对象... 一. 容器 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中.通常这类数据结构把所有的元素存储在内存中(也有一些特例,并不是所有的元素都放在内存

Qt之Dialog\widget\ mainwindow的区别和布局管理器 &amp; 分裂器的区别

1.Dialog\widget\ mainwindow的区别 注意mainwindow和widget的区别,mainwindow都工具栏和菜单栏 Dialog and mainwinodws 都是继承与 Widget. 布局管理器 & 分裂器的区别 左边为布局管理器,右边为分裂器 布局管理器中的btn的上下宽度是不随主窗口的调整而变化的. 分裂器中的btn的上下宽度是随主窗口的调整而变化的. 各个btn的左右宽度,在这2中方式中都会变化.

spring--处理器拦截器详解——跟着开涛学SpringMVC

5.1.处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器) 类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.   5.1.1.常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 2.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面: 3.性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时

flash视频器播放器代码

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <meta name="Copyright" content=/" /> <meta name="keywords" content="" /> <meta nam

(21)ElasticSearch java项目中match、multimath、term、terms以及范围、前缀、通配符、模糊、类型、ids等查询示例

1.查询index1中content字段包含工厂的文档 @Test public void testMatch() throws IOException, InterruptedException, ExecutionException { //指定集群 Settings settings = Settings.builder().put("cluster.name","my-application").build(); //创建客户端 TransportClien