我有下面的查询,通常在字段中返回 ['hits'] ['total']
点击率比我指定的要高 size
.
例如:
query_body = {
"from": 0,
"size": 40,
"query": {
"bool": {
"must": [
{
"multi_match":{
"query": 'caderno preto',
"fields":[
"DescricaoSEO",
"TermoBusca",
"Fabricante"
],
"minimum_should_match":"100%",
}
}
]
}
}
}
我的查询返回前40次点击,但当我打印总点击数时:
print(retornoES['hits']['total'])
{'value': 426, 'relation': 'eq'}
有没有办法返回一个字段,查询中所有426都保持前40个字段的大小?
这是我的Map:
{
"mappings": {
"_doc": {
"properties": {
"Ativo": {
"type": "boolean"
},
"BlackFriday": {
"type": "boolean"
},
"CD_Classificacao": {
"type": "long"
},
"CD_Grupo": {
"type": "long"
},
"CD_Subgrupo": {
"type": "long"
},
"CD_TipoProduto": {
"type": "long"
},
"CampoPesquisa": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"Codigo": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"CurvaABC": {
"type": "float"
},
"DS_Classificacao": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"DS_Grupo": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"DS_Parcelamento": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"DePor": {
"type": "float"
},
"Descontinuado": {
"type": "boolean"
},
"Descricao": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"DescricaoSEO": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"Download": {
"type": "boolean"
},
"Estoque": {
"type": "long"
},
"ExclusivoParceiro": {
"type": "boolean"
},
"Fabricante": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"Garantia": {
"type": "boolean"
},
"Imagem": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"Link": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"LinkProduto": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"NM_Produto": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"Parcelamento": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"PrecoCusto": {
"type": "float"
},
"PrecoDesconto": {
"type": "float"
},
"PrecoOriginal": {
"type": "float"
},
"PrecoVenda": {
"type": "float"
},
"PrecoVendaAssinatura": {
"type": "float"
},
"Prioridade": {
"type": "long"
},
"Selo": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"TemEstoque": {
"type": "long"
},
"TermoBusca": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"VL_PrecoVenda": {
"type": "float"
}
}
}
}
}
2条答案
按热度按时间wgxvkvu91#
如果我理解正确,您希望为所有匹配的文档指定一个特定字段(在您的示例中为426),同时保持大小为40,如果是这种情况,则不可能。
total
表示索引中与查询匹配的文档总数size
用于返回顶部based on size
索引中的文档(基于分数)。您可以在搜索响应中使用源筛选或检索的特定字段,但必须为size param提供一个较高的值(出于性能原因,默认值为10)。
lnlaulya2#
为了只返回40次命中,但返回给定字段的所有426次(例如。
Codigo
),您可以这样做:你只会得到40次点击,但是426次
Codigo
在aggregations.occurrences.hits
.您可能需要更改索引的设置才能使其正常工作,因为默认情况下,一次搜索只返回100次命中
top_hits
聚合:如果
Codigo
在所有文档中都是唯一的,那么上面的查询将满足您的需要,但是,如果Codigo
不是唯一的,你最好使用terms
聚合(由es ninja建议)