问题

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

代码报错

  1. {
  2. "data": {
  3. "errorCode": 500,
  4. "message": "Elasticsearch exception [type=parsing_exception, reason=[multi_match] unknown token [START_ARRAY] after [query]]"
  5. },
  6. "status": 0,
  7. "message": "Elasticsearch exception [type=parsing_exception, reason=[multi_match] unknown token [START_ARRAY] after [query]]"
  8. }

原因:

QueryBuilder queryBuilder =

  1. QueryBuilders.multiMatchQuery(deptIdList, "data.deptId", "modifiedData.deptId");

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

解决办法:

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

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