Elasticsearch查询以逗号拼接的字符串类型数据,类似于数据库Mysql和Oracle的find_in_set函数查询
例如ES存储库中的ids字段数据如下:
| ids |
|---|
| 1 |
| 3 |
| 1,3 |
| 2,3,4 |
| 1,2,4,5 |
入参id为3,查询期望返回结果数据为:
| result |
|---|
| 3 |
| 1,3 |
| 2,3,4 |
Mysql或Oracle实现
<sql id="bean_where_clause">
<where>
<trim prefixOverrides="AND">
……
<if test="ids != null">
AND FIND_IN_SET(id, #{ids})
</if>
</trim>
</where>
</sql>
Elasticsearch实现
1、添加逗号的自定义分词器,如comma
2、创建mappings,将字段设置为text类型
3、为该字段指定逗号分词器
{
"settings": {
"analysis": {
"analyzer": {
"comma": {
"pattern": ",",
"type": "pattern"
}
}
}
},
"mappings": {
"properties": {
"ids": {
"type": "text",
"analyzer": "comma",
"search_analyzer": "comma"
}
}
}
}
4、查询方法入参
SearchRequest request = new SearchRequest("ES库名");
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.termQuery("ids", 入参id));
request.source().query(boolQueryBuilder);
……