Elasticsearch模糊查询、多字段in查询、时间范围查询,DSL和java API两种方式
Elasticsearch模糊查询、多字段in查询、时间范围查询,DSL和java API两种方式
项目场景:
Elasticsearch模糊查询某字段、多字段in查询、时间范围查询,通过DSL和java API两种方式
解决方案:
一、模糊查询
wildcard 通配符检索
使用wildcard相当于SQL的like,前后都可拼接*,匹配0到多个任意字符
-
{
-
"query": {
-
"wildcard": {
-
"name.keyword": "*文件*"
-
}
-
}
-
}
-
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
-
queryBuilder.must(QueryBuilders.wildcardQuery("name.keyword", "*文件*"));
fuzzy 模糊/纠错检索
使用fuzzy类似百度搜索,你输入“周杰伦”,也能查出来“周杰轮”,有纠错能力
-
{
-
"query": {
-
"fuzzy": {
-
"name.keyword": "*周杰伦*"
-
}
-
}
-
}
-
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
-
queryBuilder.must(QueryBuilders.fuzzyQuery("name.keyword", "周杰伦"));
二、多字段in查询
通过terms实现,类似SQL的in查询,多字段用集合表示
-
{
-
"query": {
-
"bool": {
-
"must": {
-
"terms": {
-
"name":[
-
"张三",
-
"李四"
-
]
-
}
-
}
-
}
-
}
-
}
-
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
-
queryBuilder.must(QueryBuilders.termsQuery("name.keyword", new ArrayList<>()));
三、时间范围查询
from、to为时间范围,include_lower、include_upper为是否包含左右边界
-
{
-
"query": {
-
"bool": {
-
"must": {
-
"range": {
-
"createTime": {
-
"from": "2022-01-01",
-
"to": "2022-03-01",
-
"include_lower": true,
-
"include_upper": true,
-
"boost": 1
-
}
-
}
-
}
-
}
-
}
-
}
-
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
-
queryBuilder.must(QueryBuilders.rangeQuery("createTime").gte("2022-01-01").lte("2022-03-01"));
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步