我有这样的疑问:
{
"query": {
"bool": {
"must": [
{
"match": {
"egyik": {
"query": "piros alma"
}
}
},
{
"match": {
"masik": {
"query": "piros alma"
}
}
}
]
}
}
}
它不是很漂亮,因为查询参数出现了两次,因此我尝试用multi_match语法重写它:
{
"query": {
"bool": {
"must": {
"multi_match": {
"query": "piros alma",
"fields": [
"egyik",
"masik"
]
}
}
}
}
}
但它返回的点击量比第一个更多。我尝试了operator,minimum_should_match修饰符,但没有帮助。如何用multi_match解决同样的问题?
发布于 2020-03-27 19:16:05
据我所知,当提供的query
与列出的field
中的任何一个匹配时,所有类型的多匹配查询都会返回命中(参见Elastic docs)。因此,multi_match
之所以有更多的hists,是因为您不能在第一个查询中强制执行相同的布尔条件。也就是说,我不认为将同一个查询参数重复两次有什么错。如果您想稍微推广一下,您可能需要考虑使用Search Templates
发布于 2020-03-27 19:17:49
默认情况下使用operator
OR,这意味着查询术语可以出现在任何字段中,如果您希望查询术语出现在所有字段中,那么您可以显式地定义具有AND
值的operator
字段。
{
"query": {
"bool": {
"must": {
"multi_match": {
"query": "piros alma",
"fields": [
"egyik",
"masik"
],
"operator":"and"
}
}
}
}
}
要了解更多信息,请访问this
发布于 2020-03-27 20:29:11
与此同时,我找到了解决方案:
{
"query": {
"bool": {
"must": {
"multi_match": {
"query": "piros alma",
"fields": [
"egyik",
"masik"
],
"type": "cross_fields",
"operator": "and"
}
}
}
}
}
需要同时使用类型和运算符。
https://stackoverflow.com/questions/60883706
复制相似问题