ES--termterms查询
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ES--termterms查询
2.1、term&terms查询
2.1.1、term查询
参考:
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);
}
}。