elasticsearch SonarQube使用不正确的(?)ElasticSearch查询获取ScmAccountToUser
我在带有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查询,即:
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
{
"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的行结束-我可以发送你