我使用下面的匹配查询搜索elasticsearch,这不会给我完全匹配,而是提供更多不可靠的匹配。
我正在使用elasticsearch 6.2.3
请在下面找到我的问题
get items/_search
{
"query" : {
"match" : {
"code" : "7000-8900"
}
}
}
请从match
查询
7000-8900
7000-8002-WK
7000-8002-W
答案 0 :(得分:5)
而不是match
您必须使用term
查询,如文档所述:
术语查询查找包含反向索引
中指定的确切术语的文档
所以你必须改变你的查询如下:
get items/_search
{
"query" : {
"term" : {
"code.keyword" : "7000-8900"
}
}
}
如果您没有得到任何结果,有两种可能性:
注意:如果映射正确并且代码是术语字段,则可以使用"代码"。如果映射是自动的,并且映射将其识别为文本,则需要使用" code.keyword"
答案 1 :(得分:0)
您可以尝试此方法。此查询返回完全匹配记录。
exports.sumsensor = functions.database.ref('sensor/{id}').onWrite((change,context)=>{
let val = +change.after.val()
//compute code in here
return admin.database().ref().child('sensorSum').transaction(function(currentTotal) {
return currentTotal + val;
});
});
答案 2 :(得分:0)
我在比赛中遇到了同样的问题,因此我尝试使用term。但这是一个坏习惯。 ES说,我们不应该使用term来进行字符串匹配。
如果您将该字段指定为关键字,则匹配项将始终进行完全匹配。
如果您尚未将字段定义为关键字,仍然可以执行以下查询:
get items/_search
{
"query" : {
"match" : {
"code.keyword" : "7000-8900"
}
}
}