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的limitPOST /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);        }    }