in oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/LogQueryEsDAO.java [64:182]
public Logs queryLogs(final String serviceId,
final String serviceInstanceId,
final String endpointId,
final TraceScopeCondition relatedTrace,
final Order queryOrder,
final int from,
final int limit,
final Duration duration,
final List<Tag> tags,
final List<String> keywordsOfContent,
final List<String> excludingKeywordsOfContent) throws IOException {
long startSecondTB = 0;
long endSecondTB = 0;
if (nonNull(duration)) {
startSecondTB = duration.getStartTimeBucketInSec();
endSecondTB = duration.getEndTimeBucketInSec();
}
final BoolQueryBuilder query = Query.bool();
if (IndexController.LogicIndicesRegister.isMergedTable(LogRecord.INDEX_NAME)) {
query.must(Query.term(IndexController.LogicIndicesRegister.RECORD_TABLE_NAME, LogRecord.INDEX_NAME));
}
if (startSecondTB != 0 && endSecondTB != 0) {
query.must(Query.range(Record.TIME_BUCKET).gte(startSecondTB).lte(endSecondTB));
}
if (isNotEmpty(serviceId)) {
query.must(Query.term(AbstractLogRecord.SERVICE_ID, serviceId));
}
if (isNotEmpty(serviceInstanceId)) {
query.must(Query.term(AbstractLogRecord.SERVICE_INSTANCE_ID, serviceInstanceId));
}
if (isNotEmpty(endpointId)) {
query.must(Query.term(AbstractLogRecord.ENDPOINT_ID, endpointId));
}
if (nonNull(relatedTrace)) {
if (isNotEmpty(relatedTrace.getTraceId())) {
query.must(Query.term(AbstractLogRecord.TRACE_ID, relatedTrace.getTraceId()));
}
if (isNotEmpty(relatedTrace.getSegmentId())) {
query.must(
Query.term(AbstractLogRecord.TRACE_SEGMENT_ID, relatedTrace.getSegmentId()));
}
if (nonNull(relatedTrace.getSpanId())) {
query.must(Query.term(AbstractLogRecord.SPAN_ID, relatedTrace.getSpanId()));
}
}
if (CollectionUtils.isNotEmpty(tags)) {
tags.forEach(tag -> query.must(Query.term(AbstractLogRecord.TAGS, tag.toString())));
}
if (CollectionUtils.isNotEmpty(keywordsOfContent)) {
keywordsOfContent.forEach(
content ->
query.must(
Query.matchPhrase(
MatchCNameBuilder.INSTANCE.build(AbstractLogRecord.CONTENT),
content
)
)
);
}
if (CollectionUtils.isNotEmpty(excludingKeywordsOfContent)) {
excludingKeywordsOfContent.forEach(
content ->
query.mustNot(
Query.matchPhrase(
MatchCNameBuilder.INSTANCE.build(AbstractLogRecord.CONTENT),
content
)
)
);
}
final SearchBuilder search =
Search.builder().query(query)
.sort(
LogRecord.TIMESTAMP,
Order.DES.equals(queryOrder) ?
Sort.Order.DESC : Sort.Order.ASC
)
.size(limit)
.from(from);
SearchResponse response = searchDebuggable(new TimeRangeIndexNameGenerator(
IndexController.LogicIndicesRegister.getPhysicalTableName(LogRecord.INDEX_NAME),
startSecondTB,
endSecondTB
), search.build());
Logs logs = new Logs();
for (SearchHit searchHit : response.getHits().getHits()) {
Log log = new Log();
log.setServiceId((String) searchHit.getSource().get(AbstractLogRecord.SERVICE_ID));
log.setServiceInstanceId((String) searchHit.getSource()
.get(AbstractLogRecord.SERVICE_INSTANCE_ID));
log.setEndpointId(
(String) searchHit.getSource().get(AbstractLogRecord.ENDPOINT_ID));
if (log.getEndpointId() != null) {
log.setEndpointName(
IDManager.EndpointID.analysisId(log.getEndpointId()).getEndpointName());
}
log.setTraceId((String) searchHit.getSource().get(AbstractLogRecord.TRACE_ID));
log.setTimestamp(
((Number) searchHit.getSource().get(AbstractLogRecord.TIMESTAMP)).longValue());
log.setContentType(ContentType.instanceOf(
((Number) searchHit.getSource()
.get(AbstractLogRecord.CONTENT_TYPE)).intValue()));
log.setContent((String) searchHit.getSource().get(AbstractLogRecord.CONTENT));
String dataBinaryBase64 =
(String) searchHit.getSource().get(AbstractLogRecord.TAGS_RAW_DATA);
if (!Strings.isNullOrEmpty(dataBinaryBase64)) {
parserDataBinary(dataBinaryBase64, log.getTags());
}
logs.getLogs().add(log);
}
return logs;
}