我正在将ES 2.x迁移到ES 6.4,对于其中一个查询,我得到了不同的结果(查询和解释均来自ES 6.4)
这是我的查询的一部分:
"multi_match": {
"query": "nike xl",
"type": "cross_fields",
"fields": [
"name^10",
"variants.params^10",
"*desc^5",
"manufacturer",
"categories"
],
"operator": "and",
"minimum_should_match": 1
}
以下是此multi_match
爆炸方式的说明:
"explanation" : {
"value" : 0.0,
"description" : "Failure to meet condition(s) of required/prohibited clause(s)",
"details" : [
{
"value" : 0.0,
"description" : "no match on required clause (((variants.code:*NIKE XL*)^15.0 (((+((shortdesc:nik)^5.0 | (name:nik)^10.0 | categories:nik | (variants.params:nik)^10.0 | (longdesc:nik)^5.0) +((shortdesc:xl)^5.0 | (name:xl)^10.0 | categories:xl | (variants.params:xl)^10.0 | (longdesc:xl)^5.0))~1) | manufacturer:nike xl) (name_na:*xl*)^10.0 #type:product)~1)",
注意一件事。查询中来自fields
的所有字段都在nik
上搜索,然后也在xl
上搜索。但是制造商没有,它在那里寻找nike xl
。我相信这就是找不到该文件的原因。有人知道为什么吗?
答案 0 :(得分:0)
我发现是operator
提示引起的问题。我在文档中的任何地方都找不到operator
在type=cross_fields
上下文中的含义。文档说:
In other words, all terms must be present in at least one field for a document to match.
对我来说,operator
在这里并不是真正需要的。当我删除它时,我开始获得预期的结果。请注意,在ES 2.4中,这的行为有所不同(好像operator
被忽略了)