function queryDataIndex(data, payload) {
    if (payload.dataIndexInside != null) {
        return payload.dataIndexInside;
    }
    else if (payload.dataIndex != null) {
        return isArray(payload.dataIndex)
            ? map(payload.dataIndex, function (value) {
                return data.indexOfRawIndex(value);
            })
            : data.indexOfRawIndex(payload.dataIndex);
    }
    else if (payload.name != null) {
        return isArray(payload.name)
            ? map(payload.name, function (value) {
                return data.indexOfName(value);
            })
            : data.indexOfName(payload.name);
    }
}
@param {module:echarts/model/Global} ecModel
@param {string|Object} finder
       If string, e.g., 'geo', means {geoIndex: 0}.
       If Object, could contain some of these properties below:
       {
           seriesIndex, seriesId, seriesName,
           geoIndex, geoId, geoName,
           bmapIndex, bmapId, bmapName,
           xAxisIndex, xAxisId, xAxisName,
           yAxisIndex, yAxisId, yAxisName,
           gridIndex, gridId, gridName,
           ... (can be extended)
       }
       Each properties can be number|string|Array.<number>|Array.<string>
       For example, a finder could be
       {
           seriesIndex: 3,
           geoId: ['aa', 'cc'],
           gridName: ['xx', 'rr']
       }
       xxxIndex can be set as 'all' (means all xxx) or 'none' (means not specify)
       If nothing or null/undefined specified, return nothing.
@param {Object} [opt]
@param {string} [opt.defaultMainType]
@param {Array.<string>} [opt.includeMainTypes]
@return {Object} result like:
       {
           seriesModels: [seriesModel1, seriesModel2],
           seriesModel: seriesModel1, // The first model
           geoModels: [geoModel1, geoModel2],
           geoModel: geoModel1, // The first model
           ...
       }