fix: set tag autocomplete query time range unit to day (#9053)

This commit is contained in:
Wan Kai 2022-05-12 23:36:50 +08:00 committed by GitHub
parent 4bf620045d
commit c4ebe831af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 43 deletions

View File

@ -25,7 +25,6 @@ import java.util.Map;
import java.util.Set;
import org.apache.skywalking.library.elasticsearch.requests.search.BoolQueryBuilder;
import org.apache.skywalking.library.elasticsearch.requests.search.Query;
import org.apache.skywalking.library.elasticsearch.requests.search.RangeQueryBuilder;
import org.apache.skywalking.library.elasticsearch.requests.search.Search;
import org.apache.skywalking.library.elasticsearch.requests.search.SearchBuilder;
import org.apache.skywalking.library.elasticsearch.requests.search.aggregation.Aggregation;
@ -51,7 +50,7 @@ public class TagAutoCompleteQueryDAO extends EsDAO implements ITagAutoCompleteQu
final long startSecondTB,
final long endSecondTB) throws IOException {
BoolQueryBuilder query = Query.bool();
appendTagAutocompleteCondition(tagType, startSecondTB, endSecondTB, query);
query.must(Query.term(TagAutocompleteData.TAG_TYPE, tagType.name()));
final SearchBuilder search = Search.builder().query(query);
search.aggregation(Aggregation.terms(TagAutocompleteData.TAG_KEY)
.field(TagAutocompleteData.TAG_KEY));
@ -83,7 +82,7 @@ public class TagAutoCompleteQueryDAO extends EsDAO implements ITagAutoCompleteQu
final long startSecondTB,
final long endSecondTB) throws IOException {
BoolQueryBuilder query = Query.bool().must(Query.term(TagAutocompleteData.TAG_KEY, tagKey));
appendTagAutocompleteCondition(tagType, startSecondTB, endSecondTB, query);
query.must(Query.term(TagAutocompleteData.TAG_TYPE, tagType.name()));
final SearchBuilder search = Search.builder().query(query).size(limit);
final SearchResponse response = getClient().search(
@ -101,22 +100,4 @@ public class TagAutoCompleteQueryDAO extends EsDAO implements ITagAutoCompleteQu
}
return tagValues;
}
private void appendTagAutocompleteCondition(final TagType tagType, final long startSecondTB,
final long endSecondTB,
final BoolQueryBuilder query) {
long startMinTB = startSecondTB / 100;
long endMinTB = endSecondTB / 100;
query.must(Query.term(TagAutocompleteData.TAG_TYPE, tagType.name()));
final RangeQueryBuilder rangeQuery = Query.range(TagAutocompleteData.TIME_BUCKET);
if (startMinTB > 0) {
rangeQuery.gte(startMinTB);
}
if (endMinTB > 0) {
rangeQuery.lte(endMinTB);
}
if (startMinTB > 0 || endMinTB > 0) {
query.must(rangeQuery);
}
}
}

View File

@ -104,13 +104,13 @@ public class TagAutoCompleteQueryDAO implements ITagAutoCompleteQueryDAO {
final WhereQueryImpl<SelectQueryImpl> query) {
query.and(eq(TagAutocompleteData.TAG_TYPE, tagType.name()));
long startMinTB = startSecondTB / 100;
long endMinTB = endSecondTB / 100;
if (startMinTB > 0) {
query.and(gte(TagAutocompleteData.TIME_BUCKET, startMinTB));
long startTB = startSecondTB / 1000000 * 10000;
long endTB = endSecondTB / 1000000 * 10000 + 9999;
if (startTB > 0) {
query.and(gte(TagAutocompleteData.TIME_BUCKET, startTB));
}
if (endMinTB > 0) {
query.and(lte(TagAutocompleteData.TIME_BUCKET, endMinTB));
if (endTB > 0) {
query.and(lte(TagAutocompleteData.TIME_BUCKET, endTB));
}
}
}

View File

@ -54,7 +54,7 @@ public class IoTDBTagAutoCompleteQueryDAO implements ITagAutoCompleteQueryDAO {
Map<String, String> indexAndValueMap = new HashMap<>();
indexAndValueMap.put(IoTDBIndexes.AUTOCOMPLETE_TAG_TYPE, tagType.name());
IoTDBUtils.addQueryIndexValue(TagAutocompleteData.INDEX_NAME, query, indexAndValueMap);
appendTagAutocompleteCondition(tagType, startSecondTB, endSecondTB, query);
appendTagAutocompleteCondition(startSecondTB, endSecondTB, query);
query.append(IoTDBClient.ALIGN_BY_DEVICE);
SessionPool sessionPool = client.getSessionPool();
@ -93,7 +93,7 @@ public class IoTDBTagAutoCompleteQueryDAO implements ITagAutoCompleteQueryDAO {
indexAndValueMap.put(IoTDBIndexes.AUTOCOMPLETE_TAG_KEY, tagKey);
indexAndValueMap.put(IoTDBIndexes.AUTOCOMPLETE_TAG_TYPE, tagType.name());
IoTDBUtils.addQueryIndexValue(TagAutocompleteData.INDEX_NAME, query, indexAndValueMap);
appendTagAutocompleteCondition(tagType, startSecondTB, endSecondTB, query);
appendTagAutocompleteCondition(startSecondTB, endSecondTB, query);
query.append(" limit ").append(limit).append(IoTDBClient.ALIGN_BY_DEVICE);
List<? super StorageData> storageDataList = client.filterQuery(TagAutocompleteData.INDEX_NAME,
query.toString(),
@ -109,22 +109,21 @@ public class IoTDBTagAutoCompleteQueryDAO implements ITagAutoCompleteQueryDAO {
return tagValues;
}
private void appendTagAutocompleteCondition(final TagType tagType,
final long startSecondTB,
private void appendTagAutocompleteCondition(final long startSecondTB,
final long endSecondTB,
final StringBuilder query) {
long startMinTB = startSecondTB / 100;
long endMinTB = endSecondTB / 100;
long startTB = startSecondTB / 1000000 * 10000;
long endTB = endSecondTB / 1000000 * 10000 + 9999;
StringBuilder where = new StringBuilder();
if (startMinTB > 0) {
where.append(IoTDBClient.TIME).append(" >= ").append(TimeBucket.getTimestamp(startMinTB));
if (startTB > 0) {
where.append(IoTDBClient.TIME).append(" >= ").append(TimeBucket.getTimestamp(startTB));
}
if (endMinTB > 0) {
if (endTB > 0) {
if (where.length() > 0) {
where.append(" and ");
}
where.append(IoTDBClient.TIME).append(" <= ").append(TimeBucket.getTimestamp(endMinTB));
where.append(IoTDBClient.TIME).append(" <= ").append(TimeBucket.getTimestamp(endTB));
}
if (where.length() > 0) {
query.append(" where ").append(where);

View File

@ -94,17 +94,17 @@ public class H2TagAutoCompleteQueryDAO implements ITagAutoCompleteQueryDAO {
sql.append(TagAutocompleteData.TAG_TYPE).append(" = ?");
condition.add(tagType.name());
long startMinTB = startSecondTB / 100;
long endMinTB = endSecondTB / 100;
if (startMinTB > 0) {
long startTB = startSecondTB / 1000000 * 10000;
long endTB = endSecondTB / 1000000 * 10000 + 9999;
if (startTB > 0) {
sql.append(" and ");
sql.append(TagAutocompleteData.TIME_BUCKET).append(">=?");
condition.add(startMinTB);
condition.add(startTB);
}
if (endMinTB > 0) {
if (endTB > 0) {
sql.append(" and ");
sql.append(TagAutocompleteData.TIME_BUCKET).append("<=?");
condition.add(endMinTB);
condition.add(endTB);
}
}
}