因此,我有一个约60GB数据的索引,基本上我想进行查询,以检索1个特定的产品的基础上,其参考编号。
下面是我疑问:
GET myindex/_search
{
"_source": [
"product.ref",
"product.urls.*",
"product.i18ns.*.title",
"product_sale_elements.quantity",
"product_sale_elements.prices.*.price",
"product_sale_elements.listen_price.*",
"product.images.image_url",
"product.image_count",
"product.images.visible",
"product.images.position"
],
"size": "6",
"from": "0",
"query": {
"function_score": {
"functions": [
{
"field_value_factor": {
"field": "product.sales_count",
"missing": 0,
"modifier": "log1p"
}
},
{
"field_value_factor": {
"field": "product.image_count",
"missing": 0,
"modifier": "log1p"
}
},
{
"field_value_factor": {
"field": "featureCount",
"missing": 0,
"modifier": "log1p"
}
}
],
"query": {
"bool": {
"filter": [
{
"term": {
"product.is_visible": true
}
}
],
"should": [
{
"query_string": {
"default_field": "product.ref",
"query": "13141000",
"boost": 2
}
}
]
}
}
}
},
"aggs": {
"by_categories": {
"terms": {
"field": "categories.i18ns.de_DE.title.raw",
"size": 100
}
}
}
}
因此,我的问题是,为什么这个查询给予了10k个结果,而我只需要具有该参考编号的1个产品。
如果我这样做:
GET my-index/_search
{
"query": {
"match": {
"product.ref": "13141000"
}
}
}
should
与普通的match
查询有什么不同?
2条答案
按热度按时间dtcbnfnu1#
如果您有
must
或filter
子句,那么任何不匹配must
或filter
的内容都不必匹配您的should
子句,因为它被认为是“可选的”您可以将
should
子句中的query_string
移动到filter
,也可以将minimum_should_match
设置为1,如下所示mcdcgff02#
必须-条件必须相符。
Should -如果条件匹配,则将提高非筛选器上下文中的分数。(如果未显式声明minimum_should_match)
正如你所看到的,must和filter类似,但也提供评分。Filter将不提供任何评分。
您可以将此子句放在新的must子句中:
如果您将上述内容放在filter子句中,则Boost不会影响评分。
阅读有关布尔查询的更多信息here