1. match:模糊匹配,需要指定字段名在指定字段上进行搜索,并且会对输入的查询字符串进行分词,依据分词的结果进行查询。Java API使用如下
// 构建查询条件
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
// 添加基本的分词查询
queryBuilder.withQuery(QueryBuilders.matchQuery("title", "小米"));
// 执行搜索,获取结果
Page<Item> items = this.itemRepository.search(queryBuilder.build());
2. term:不分词查询,该查询与match查询的区别就是不会对查询字符串进行分词处理,但同样需要指定查询字段。比如检索“华为手机”,就不会分为“华为”和“手机”两个条件进行检索,而是直接检索“华为手机”。使用API如下
// 构建查询条件
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
// 添加基本的分词查询
queryBuilder.withQuery(QueryBuilders.termQuery("category", "手机"));
3. query_string:和match类似,但是match需要指定字段名,query_string不需要指定字段名,是在所有字段中搜索,范围更广泛。
// 构建查询条件
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
// 添加基本的分词查询
queryBuilder.withQuery(QueryBuilders.queryStringQuery("手机"));