Elasticsearch模糊查询、多字段in查询、时间范围查询,DSL和java API两种方式
项目场景:Elasticsearch模糊查询某字段,通过DSL和java API两种方式解决方案:wildcard 通配符检索使用wildcard相当于SQL的like,前后都可拼接*,匹配0到多个任意字符{"query": {"wildcard": {"name.keyword": "*文件*"}}}BoolQueryBuilder queryBuilder = QueryBuilde.
·
项目场景:
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"));
更多推荐
已为社区贡献2条内容
所有评论(0)