0%

面临问题

BizCharts 中,如果原始数据的时间不联系,那么绘制的时候这些时间会缺失。

需要在 BizCharts 时间数据不足时自动补 0 确保横坐标时间连续。

data 包含 date、name、count 三个属性,最小日期取 data 的最小 date,最大日期取当天的数据,注意需要区分不同的 name 进行分组。

阅读全文 »

异常处理

出现异常

husky - Git hooks installed
Usage:
  husky install [dir] (default: .husky)
  husky uninstall
  husky set|add <file> [cmd]
npm ERR! code 2
npm ERR! path E:\code\React\hello-arco
npm ERR! command failed
npm ERR! command C:\Windows\system32\cmd.exe /d /s /c husky install && husky add .husky/pre-commit 'npm run pre-commit'

处理方式

rm -rf .git/hooks  // 删除项目路径下的 .git/hooks 文件夹
npm install

For Husky v7 or greater, do the following:

# For NPM
 npm install husky@7 --save-dev \
      && npx husky-init \
      && npm exec -- github:typicode/husky-4-to-7 --remove-v4-config

# For Yarn
 yarn add husky@7 --dev \
  && npx husky-init \
  && npm exec -- github:typicode/husky-4-to-7 --remove-v4-config
# or
 yarn add husky@7 --dev \
  && yarn dlx husky-init --yarn2 \
  && npm exec -- github:typicode/husky-4-to-7 --remove-v4-config

https://stackoverflow.com/questions/66246587/how-to-fix-error-not-found-husky-run-when-committing-new-code

嵌套查询

嵌套示例

es 的 mapping 中有如下嵌套 List 对象:

"properties": {
  "type": "nested",
  "properties": {
    "value": {
      "type": "text",
      "fields": {
        "keyword": {
          "ignore_above": 256,
          "type": "keyword"
        }
      }
    },
    "key": {
      "type": "keyword"
    }
  }
}

查询示例

存在查询

BoolQueryBuilder bool = QueryBuilders.boolQuery();
TermQueryBuilder termQuery = QueryBuilders.termQuery("properties.key", key);
BoolQueryBuilder filterBoolQuery = QueryBuilders.boolQuery().filter(termQuery);
bool.filter(QueryBuilders.nestedQuery("properties", filterBoolQuery, ScoreMode.None));

不存在查询

BoolQueryBuilder bool = QueryBuilders.boolQuery();
TermQueryBuilder termQuery = QueryBuilders.termQuery("properties.key", key);
BoolQueryBuilder filterBoolQuery = QueryBuilders.boolQuery().filter(termQuery);
NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery("properties", filterBoolQuery, ScoreMode.None);
bool.filter(QueryBuilders.boolQuery().mustNot(nestedQuery));

范围查询

如果你的时间戳是以毫秒为单位的长整型数字,并且被存储为字符串,你仍然可以使用 rangeQuery 进行范围查询。

只需要将你的时间范围也转换为相应的字符串格式即可。

BoolQueryBuilder bool = QueryBuilders.boolQuery();
bool.must(QueryBuilders.nestedQuery(
    "properties", // 嵌套字段的路径
    QueryBuilders.boolQuery()
        .must(QueryBuilders.termQuery("properties.key", "updatetime")) // 匹配key
        .must(QueryBuilders.rangeQuery("properties.value.keyword") // 对value进行范围查询
            .from(String.valueOf(startTimeMillis))
            .to(String.valueOf(endTimeMillis))),
    ScoreMode.None // 分数模式,这里不需要计算分数
));

模糊查询

BoolQueryBuilder bool = QueryBuilders.boolQuery();
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
        .filter(QueryBuilders.termQuery("properties.key", key))
        .filter(QueryBuilders.matchPhraseQuery("properties.value", value));
bool.filter(QueryBuilders.nestedQuery("properties", queryBuilder, ScoreMode.Total));

精确查询

BoolQueryBuilder bool = QueryBuilders.boolQuery();
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
        .filter(QueryBuilders.termQuery("properties.key", key))
        .filter(QueryBuilders.termQuery("properties.value.keyword", value));
bool.filter(QueryBuilders.nestedQuery("properties", queryBuilder, ScoreMode.Total));
Query boolQuery = Query.of(q2 -> q2.bool(b -> b
                                         .filter(f -> f.term(t -> t.field("properties.key").value(key)))
                                         .filter(f -> f.term(m -> m.field("properties.value.keyword").value(value)))
                                        ));
Query nestedQuery = Query.of(q -> q.nested(NestedQuery.of(n -> n.path("properties").query(boolQuery))));
queryList.add(nestedQuery);

精确多值查询

BoolQueryBuilder bool = QueryBuilders.boolQuery();
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
        .filter(QueryBuilders.termQuery("properties.key", key))
        .filter(QueryBuilders.termsQuery("properties.value.keyword", value.split(";;"))); // 注意用 termsQuer
bool.filter(QueryBuilders.nestedQuery("properties", queryBuilder, ScoreMode.Total));