我想构建一个ElasticSearch查询,我查询多个字段,但查询中的一个字必须匹配其中一个字段。
例如,假设我查询“假日派对食物”,我希望它返回标题中至少有一个术语的所有文档,其余文件在html_source中。
如果文件有:
title: Holiday, html_source: party food => MATCH
title: Party, html_source: food holiday => MATCH
title: Food, html_source: holiday party => MATCH
title: RANDOM TITLE, html_source: holiday party food => NO MATCH.
这是我到目前为止构建的内容,它匹配包含html_source中所有术语的文档,但不在标题中,这不是我想要的。
{
"query":{
"query_string":{
"query":"holiday party food",
"default_operator":"AND",
"fields":[
"title","html_source"
]
}
},
"sort":[
{
"total_shares":"desc"
}
]
}
答案 0 :(得分:0)
这是一个我认为你想要的查询语法版本:
+(
(+title:holiday +(body:party body:food -body:holiday))
(+title:party +(body:holiday body:food -body:party)
(+title:food +(body:holiday body:party -body:food))
)
如果这不起作用,我认为它指出了正确的方向。这种查询的技巧是明确枚举所有选择。