问题

QueryBuilder queryBuilder = 
     QueryBuilders.multiMatchQuery(deptIdList, "data.deptId", "modifiedData.deptId");

代码报错

{
	"data": {
		"errorCode": 500,
		"message": "Elasticsearch exception [type=parsing_exception, reason=[multi_match] unknown token [START_ARRAY] after [query]]"
	},
	"status": 0,
	"message": "Elasticsearch exception [type=parsing_exception, reason=[multi_match] unknown token [START_ARRAY] after [query]]"
}

原因:

QueryBuilder queryBuilder =
QueryBuilders.multiMatchQuery(deptIdList, “data.deptId”, “modifiedData.deptId”);

multiMatchQuery这个API,第一个参数不支持List类型, 虽然传List没报错, 但是往ES发送查询请求的时候就会抛异常出来

解决办法:

传一个字段, 如果你想多字段in查询,就用类似下面这样写法就可以了.

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        for (String deptId : stringList) {
            boolQueryBuilder.should(QueryBuilders.multiMatchQuery(deptId, fieldNames));
        }