zoukankan      html  css  js  c++  java
  • ES--term&terms查询

    2.1、term&terms查询

    2.1.1、term查询

      参考: Elasticsearch Reference [7.10] » Query DSL » Term-level queries » Term query
      term的查询是代表完全匹配,搜索之前不会对你搜索的关键字进行分词,如关键字手机,不会分成手和机;再根据关键字去文档分词库中去匹配内容。
    类似于MySQL库的 where province = ?

    2.1.1.1、命令

    # from size类似于mysql的limit
    POST /sms-logs-index/_search
    {
      "from": 0,
      "size": 10, 
      "query": {
        "term": {
          "province": {
            "value": "北京"
          }
        }
      }
    }
    

    在这里插入图片描述

    2.1.1.2、java代码

        @Test
        public void termQuery() throws IOException {
            //1。创建request对象,查询用的对象一般都是SearchRequest对象
            SearchRequest mySearchRequest = new SearchRequest(index);
    
            //2,指定查询条件,依赖查询条件的对象SearchSourceBuilder的对象
            SearchSourceBuilder builder = new SearchSourceBuilder();
            builder.from(0).size(10).query(QueryBuilders.termQuery("province", "北京")); //指定term查新条件
    
            mySearchRequest.source(builder);
            //3. 执行查询
            SearchResponse search = client.search(mySearchRequest, RequestOptions.DEFAULT);
    
            //4. 获取到_source中的数据,并展示
            //注意RESTFUL风格上是两个hits,所以这里要两次getHits()
            for (SearchHit hit : search.getHits().getHits()) {
                Map<String, Object> result = hit.getSourceAsMap();
                System.out.println(result);
            }
        }
    
    

    2.1.2、terms 查询

    terms和terms的查询机制是一样的,都不会将指定的查询关键字进行分词,直接去分词库中匹配,找到相应的文档内容。
    terms:是针对一个字段包含多个值时使用。
    换句话说:

    • term类似于MySQL的 where province=?
    • terms类似于MySQL中的 where province in (?, ? ,?)

       注意:term和terms只是说不会对关键字进行分词,并不是说只能用于keyword类型的字段查询,如假设文档中有个字段是text类型,采用了ik分词器,里面的值是奋斗的时代,通过网上在线ik分词器,我们知道会分解成奋斗,奋,斗,时代,如图4,但是如果你用该字段的term或者terms查询,输入的关键字是奋斗的时代,因为输入的关键字不会分词,反而查不到该记录,如果你输入的关键字是奋斗就是可以的。

    在这里插入图片描述

    2.1.2.1、命令

    POST /sms-logs-index/_search
    {
      "from": 0,
      "size": 20,
      "query": {
        "terms": {
          "province": [
            "北京",
            "上海",
            "杭州"
          ]
        }
      }
    }
    

    2.1.2.2、java代码

        @Test
        public void termsQuery() throws IOException {
            //1。创建request对象,查询用的对象一般都是SearchRequest对象
            SearchRequest mySearchRequest = new SearchRequest(index);
    
            //2,指定查询条件,依赖查询条件的对象SearchSourceBuilder的对象
            SearchSourceBuilder builder = new SearchSourceBuilder();
            builder.from(0).size(10).query(QueryBuilders.termsQuery("province", "北京", "上海", "杭州")); //指定term查新条件
    		
    		// 注意将条件放入Request对象中
            mySearchRequest.source(builder);
            
            //3. 执行查询
            SearchResponse search = client.search(mySearchRequest, RequestOptions.DEFAULT);
    
            //4. 获取到_source中的数据,并展示
            //注意RESTFUL风格上是两个hits,所以这里要两次getHits()
            for (SearchHit hit : search.getHits().getHits()) {
                Map<String, Object> result = hit.getSourceAsMap();
                System.out.println(result);
            }
        }
    
  • 相关阅读:
    因浮动使得容器失去高度的四种处理对策
    推荐一些国内的Jquery CDN免费服务
    layer.js 贤心制作的弹出层插件-不仅仅是弹层
    jquery 页面滚动到底部自动加载插件集合
    JQ应用第3款:返回顶部、底部、微信、反馈我们共存
    jquery.nicescroll.js可全屏可改滚动条颜色的滚动条插件-推荐
    jquery-fullpage-js制作页全屏滚动插件
    headroom.js –在不需要页头时将其隐藏
    Vue中删除重复上传的文件
    面向对象设计原则
  • 原文地址:https://www.cnblogs.com/chengbao/p/14974148.html
Copyright © 2011-2022 走看看