elasticsearch SonarQube使用不正确的(?)ElasticSearch查询获取ScmAccountToUser,elasticsearch,sonarqube,sonarqube5.3,sonarqube-ops,elasticsearch,Sonarqube,Sonarqube5.3,Sonarqube Ops" /> elasticsearch SonarQube使用不正确的(?)ElasticSearch查询获取ScmAccountToUser,elasticsearch,sonarqube,sonarqube5.3,sonarqube-ops,elasticsearch,Sonarqube,Sonarqube5.3,Sonarqube Ops" />

elasticsearch SonarQube使用不正确的(?)ElasticSearch查询获取ScmAccountToUser

elasticsearch SonarQube使用不正确的(?)ElasticSearch查询获取ScmAccountToUser,elasticsearch,sonarqube,sonarqube5.3,sonarqube-ops,elasticsearch,Sonarqube,Sonarqube5.3,Sonarqube Ops,我在带有MSSQL后端的Windows上运行SonarQube 5.3 在创建新问题时,SonarQube查询其ElasticSearch用户索引,以获得作者登录名,获取问题行的“git Dull”信息 在/server/sonar server/src/main/java/org/sonar/server/computation/issue/IssueAssigner.java中发生以下情况: =>在我的示例中,“git bull”信息返回受影响行的作者(匿名): =>此值在ScmAccoun

我在带有MSSQL后端的Windows上运行SonarQube 5.3

在创建新问题时,SonarQube查询其ElasticSearch用户索引,以获得作者登录名,获取问题行的“git Dull”信息

在/server/sonar server/src/main/java/org/sonar/server/computation/issue/IssueAssigner.java中发生以下情况:

=>在我的示例中,“git bull”信息返回受影响行的作者(匿名):

=>此值在ScmAccountToUser中查找,该程序惰性地查询ElasticSearch索引“users”。我添加了一些调试输出以打印ES查询,即:

{
  "size": 3,
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "bool": {
          "must": {
            "term": {
              "active": true
            }
          },
          "should": [
            {
              "term": {
                "login": "steve smith@ca5553f7-9c36-c34d-916b-b330600317e9"
              }
            },
            {
              "term": {
                "email": "steve smith@ca5553f7-9c36-c34d-916b-b330600317e9"
              }
            },
            {
              "term": {
                "scmAccounts": "steve smith@ca5553f7-9c36-c34d-916b-b330600317e9"
              }
            }
          ]
        }
      }
    }
  }
}
此查询返回0个结果

相比之下,当我枚举整个索引时,我得到的命中率通常应该与此用户匹配:

{ -
  "took": 4,
  "timed_out": false,
  "_shards": { -
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": { -
    "total": 39,
    "max_score": 1,
    "hits": [ -
      { -
        // snip
      },
      // snip
      { -
        "_index": "users",
        "_type": "user",
        "_id": "steve.smith",
        "_score": 1,
        "_source": { -
          "createdAt": 1442988141642,
          "name": "Steve Smith",
          "active": true,
          "login": "steve.smith",
          "scmAccounts": [ -
            "
",
            "steve smith@ca5553f7-9c36-c34d-916b-b330600317e9
",
            "steve.smith@ca5553f7-9c36-c34d-916b-b330600317e9
"
          ],
          "email": "steve.smith@globodex.ch",
          "updatedAt": 1450088380632
        }
      },
      // snip
    ]
  }
}
此问题当前阻止我的SonarQube实例自动分配许多问题。我正在弄清楚这是什么时候/如何发生的,因为一些自动分配以前已经成功了


这是查询中的错误还是数据中的错误?我可以设法解决这个问题吗?

事实证明,问题是由于“scmAccounts”字段条目中的换行符造成的

通过在SonarQube UI中手动重新添加SCM帐户,这些字段更新为

"scmAccounts": 
[ -
            "steve smith@ca5553f7-9c36-c34d-916b-b330600317e9",
            "steve.smith@ca5553f7-9c36-c34d-916b-b330600317e9"
],
,之后查询成功,出库分配成功


换行首先进入字段,因为我从备份SQL INSERT脚本手动还原了SQL server上的表“users”。

事实证明,问题是由于“scmAccounts”字段条目中的换行

通过在SonarQube UI中手动重新添加SCM帐户,这些字段更新为

"scmAccounts": 
[ -
            "steve smith@ca5553f7-9c36-c34d-916b-b330600317e9",
            "steve.smith@ca5553f7-9c36-c34d-916b-b330600317e9"
],
,之后查询成功,出库分配成功


新行首先进入字段,因为我从备份SQL插入脚本手动还原了SQL server上的表“users”。

scmAccounts字段的映射是什么?如果它不是
未分析的
字符串字段,则这就是原因。映射确实指定://。。。“scmAccounts”:{-“索引”:“未分析”,“类型”:“字符串”},//。。。这与其他字段不同,例如登录:“登录”:{-“索引”:“未分析”,“类型”:“字符串”,“字段”:{-“搜索分析程序”:{-“搜索分析程序”:“搜索分析程序”,“索引分析程序”:“索引分析程序”,“类型”:“字符串”}},这是映射的错误配置吗?我已经完全恢复了索引,所以问题不断出现。根本原因似乎是scm帐户中的空白。你确认了吗?@SimonBrandhof SonarSource问题似乎是scmAccounts开头和结尾的新行。我删除并重新添加了“steve”smith@...“scm帐户在SonarQube GUI中,现在ES数据不再包含这些换行符,查询成功。我在users表中复制了运行5.2的SonarQube的前一个实例-这可能是一个兼容性问题。我将尝试为所有用户手动重新添加SCM帐户,并将报告结果。这也解释了为什么10%的分配成功-这些分配者已经手动添加了SCM帐户。@SimonBrandhof SonarSource删除换行符解决了这个问题。我将添加一个答案。
scmAccounts
字段的映射是什么?如果它不是
未分析的
字符串字段,则这就是原因。映射确实指定://。。。“scmAccounts”:{-“索引”:“未分析”,“类型”:“字符串”},//。。。这与其他字段不同,例如登录:“登录”:{-“索引”:“未分析”,“类型”:“字符串”,“字段”:{-“搜索分析程序”:{-“搜索分析程序”:“搜索分析程序”,“索引分析程序”:“索引分析程序”,“类型”:“字符串”}},这是映射的错误配置吗?我已经完全恢复了索引,所以问题不断出现。根本原因似乎是scm帐户中的空白。你确认了吗?@SimonBrandhof SonarSource问题似乎是scmAccounts开头和结尾的新行。我删除并重新添加了“steve”smith@...“scm帐户在SonarQube GUI中,现在ES数据不再包含这些换行符,查询成功。我在users表中复制了运行5.2的SonarQube的前一个实例-这可能是一个兼容性问题。我将尝试为所有用户手动重新添加SCM帐户,并将报告结果。这也解释了为什么10%的分配成功-这些分配者已经手动添加了SCM帐户。@SimonBrandhof SonarSource删除换行符解决了这个问题。我会补充一个答案。很高兴知道。谁介绍了新线?您还是SQLServer备份工具?在后一种情况下,SonarQube应涵盖这一情况,并在索引到Elasticsearch时清理SCM帐户。@SimonBrandhof SonarSource我执行了数据库到.sql插入脚本的表式导出(使用MSSQL Server 2012),该脚本导出了换行符。由于windows行结尾可能会出现问题-我可以向您发送一个users.sql的(经过审查的)文件来重现该问题。请联系。谢谢,但很容易复制。由于问题是数据库备份,SonarQube中不需要修复任何东西。很高兴知道。谁介绍了新线?您还是SQLServer备份工具?在后一种情况下,SonarQube应涵盖这一情况,并在索引到Elasticsearch时清理SCM帐户。@SimonBrandhof SonarSource我执行了数据库到.sql插入脚本的表式导出(使用MSSQL Server 2012),该脚本导出了换行符。可能有一个问题,因为windows的行结束-我可以发送你