在 Easysearch Java SDK 2.0.x 使用指南(一) 中,我们介绍了 Easysearch Java SDK 2.0.2 的基本使用和批量操作功能。
在 Easysearch Java SDK 2.0.x 使用指南(二) 中,则详细介绍了索引管理相关的功能,包括索引的创建、删除、开关、刷新、滚动等操作,以及新版 SDK 提供的同步和异步两种调用方式。
本篇文章将继续向大家介绍 Easysearch Java SDK 2.0.2 的 Query 的使用。
1. QueryString:灵活的全文检索
QueryString 查询允许开发者以类似 Easysearch Query DSL 的语法执行全文检索,非常适合处理用户输入的复杂搜索条件。
基本概念
fields:指定要检索的字段列表。query:查询字符串,支持布尔操作符(如 AND、OR、NOT)。default_operator:当查询字符串中未明确操作符时使用的默认逻辑操作符。analyze_wildcard:是否对通配符查询进行分析。
代码示例
以下示例展示了如何通过新版 Java 客户端构建一个 QueryString 查询,用于检索标题和内容中同时包含 easysearch 和 java 的文档:
@Test
public void testQueryString() {
// 定义 JSON 查询字符串
String jsonQuery = "{\n" +
" \"query_string\": {\n" +
" \"fields\": [\"title\", \"content\"],\n" +
" \"query\": \"easysearch AND java\",\n" +
" \"default_operator\": \"AND\",\n" +
" \"analyze_wildcard\": true\n" +
" }\n" +
"}";
// 使用 JacksonJsonpMapper 解析 JSON 字符串
JacksonJsonpMapper mapper = new JacksonJsonpMapper();
JsonParser parser = mapper.jsonProvider().createParser(new StringReader(jsonQuery));
Query query = Query._DESERIALIZER.deserialize(parser, mapper);
// 提取 QueryStringQuery 并构建最终查询
QueryStringQuery queryStringQuery = query.queryString();
Query finalQuery = Query.of(q -> q.queryString(queryStringQuery));
// 输出最终查询对象
System.out.println(finalQuery);
}
代码解析
- 构建 JSON 查询字符串:定义了
query_string查询的核心参数,包括字段列表和查询条件。 - 解析 JSON:使用
JacksonJsonpMapper将 JSON 字符串解析为 Java 对象。 - 提取 QueryStringQuery:从解析后的
Query对象中获取QueryStringQuery。 - 封装最终查询:通过
Query.of方法将QueryStringQuery封装为最终的Query对象。
使用场景
- 用户输入的搜索条件需要支持布尔逻辑。
- 需要在多个字段中进行全文检索。
- 支持模糊搜索(如通配符)的场景。
2. Bool Query:构建复杂的多条件查询
Bool Query 可以将多个查询子句组合成一个高级查询。这些子句通过布尔逻辑组合在一起,用于查找结果中返回的匹配文档。
Bool Query 的核心子句
| 子句 | 行为 |
|---|---|
must |
逻辑"与"运算符。结果必须匹配此子句中的所有查询。 |
must_not |
逻辑"非"运算符。所有匹配此子句中查询的文档都会从结果中排除。 |
should |
逻辑"或"运算符。结果必须匹配至少一个查询。匹配的 should 子句越多,文档的相关性得分越高。你可以使用 minimum_should_match< |

最低0.47元/天 解锁文章
1054

被折叠的 条评论
为什么被折叠?



