好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Elasticsearch查询之Term Query示例解析

Term Query

Term Query是一种最基本的查询方式,它用于在Elasticsearch中查询一个字段中包含指定关键词的文档,与MySQL中的等值查询类似。使用Term Query时,可以对字段进行完全匹配,且区分大小写。

基本语法

?

1

2

3

4

5

6

7

8

GET /{index}/_search

{

     "query" : {

         "term" : {

             "{field}" : "{value}"

         }

     }

}

其中,{index}表示查询的索引名称,{field}表示需要查询的字段,{value}表示需要匹配的值。

Java代码写法

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

// TODO 省略导入包

import java.io.IOException;

public class TermQueryExample {

     public static void main(String[] args) throws IOException {

         RestHighLevelClient client = new RestHighLevelClient(

                 RestClient.builder(

                         new HttpHost( "localhost" , 9200 , "http" )));

         SearchRequest searchRequest = new SearchRequest( "my_index" );

         // 这里的searchSourceBuilder 相当于 query:{}

         SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

         // query:{term:{"field_name":"field_value"}}

         searchSourceBuilder.query(QueryBuilders.termQuery( "field_name" , "field_value" ));

         searchSourceBuilder.timeout( new TimeValue( 60 , TimeUnit.SECONDS));

         searchRequest.source(searchSourceBuilder);

         // 执行查询

         SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

         // TODO: 解析搜索结果

         client.close();

     }

}

Terms-匹配多个值

term 查询只能用于匹配该属性的单个值,若想匹配多个值,可以用terms查询

基本语法

?

1

2

3

4

5

6

7

8

9

10

11

12

GET /{index}/_search

{

     "query" : {

         "terms" : {

             "{field}" : [

                 "{value1}" ,

                 "{value2}" ,

                 "{value3}"

             ]

         }

     }

}

Java写法

?

1

2

3

4

5

6

7

SearchRequest searchRequest = new SearchRequest( "index" );

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

// 注意这里是使用termsQuery("field",value1,value2)

TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery( "field" , "value1" , "value2" , "value3" );

searchSourceBuilder.query(termsQueryBuilder);

searchRequest.source(searchSourceBuilder);

SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

Term查询可配置的其他参数

Term Query还有其他的一些设置参数,比如:

boost参数:可以为查询结果设置权重,提高或降低查询结果的得分,影响查询结果的排名。 case_insensitive参数:设置是否对查询进行大小写不敏感的匹配。 rewrite参数:控制查询的rewrite策略,主要用于控制查询性能,缓存占用等方面。 index参数:控制是否在查询时使用倒排索引,以及使用哪些倒排索引进行查询。

总结

使用Term Query时需要注意以下几点:

仅匹配完全匹配的关键字。 字段必须是不分词的。 通常情况下,不需要将关键字转换为小写字母,因为Term Query不会将关键字转换为小写字母。

总之,Term Query非常适合用于对某个字段进行精确匹配的场景。如果您想进行模糊匹配或全文搜索,请考虑使用Match Query。

以上就是Elasticsearch查询之Term Query示例解析的详细内容,更多关于Elasticsearch Term查询的资料请关注其它相关文章!

原文链接:https://juejin.cn/post/7224428335006105637

查看更多关于Elasticsearch查询之Term Query示例解析的详细内容...

  阅读:28次