在 Lucene 6.6.0 及更高版本中,不推荐使用字段级索引时间提升。该文件指出:
不推荐使用索引时间提升,请将索引时间评分因素索引到文档值字段中,并在查询时使用例如将它们与分数组合。函数分数查询。
以前会在索引时提升一个字段,如下所示:
Field title = new Field(PaperDAO.LUCENE_FIELD_TITLE, titleStr, fieldType);
title.setBoost(3.00f);
document.add(title);
Field authors = new Field(PaperDAO.LUCENE_FIELD_AUTHOR, StringEscapeUtils.unescapeHtml4(this.getAuthorsForLucene()), fieldType);
authors.setBoost(10.00f);
document.add(authors);
Run Code Online (Sandbox Code Playgroud)
我不明白建议的 FunctionScoreQuery 如何是字段级别提升的合适替代品,因为只有一个现有的 Query 和一个 DoubleValuesSource 表示可能许多字段中的一个的提升值,因此构造了一个 FunctionScoreQuery :
// INDEX TIME
Field title = new Field(PaperDAO.LUCENE_FIELD_TITLE, titleStr, fieldType);
document.add(title);
document.add(new FloatDocValuesField(PaperDAO.LUCENE_FIELD_TITLE + "_boost", 3.00f));
// QUERY TIME
new FunctionScoreQuery(query, DoubleValuesSource.fromFloatField(PaperDAO.LUCENE_FIELD_TITLE + "_boost"))
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下 Lucene >= 6.6.0 中 Field#setBoost @ index time 的适当替换吗?我们是否应该在查询时枚举所有可能的字段并应用相关的提升?如果是这样,该查询是如何构造的?
我想在预定的上下文中运行一个或多个作业,因此使用特定的规则来声明它。问题是管道既不会由我的计划配置触发,也不会在我通过计划管道 UI 手动触发时触发。我根本没有看到任何触发的预定管道。
亚特实验室版本:12.9.2
gitlab-ci.yml(部分):
workflow:
rules:
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH
non-scheduled-job:
...
rules:
- if: '$CI_PIPELINE_SOURCE != "schedule"'
scheduled-job:
...
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: always
- if: '$CI_PIPELINE_SOURCE != "schedule"'
when: never
Run Code Online (Sandbox Code Playgroud)
我知道不需要调度作业的第二条规则,但即使没有这个规则,管道也无法正常运行。