我正在尝试编写2部分的Elasticsearch bool查询。 我想要两个条件为“必须”,两个条件为“应该”。问题是我想只为“应该”得分。我试过“过滤器”但没有成功。
更具体地说,我所做的查询是:
{
"query": {
"bool": {
"must": [
{
"match": {
"attr1": "on"
}
},
{
"match": {
"category": "7eb84c804a8c824fd608e05f78d42f10"
}
}
],
"should": [
{
"term": {
"attr2": "on"
}
},
{
"term": {
"attr3": "on"
}
}
],
"minimum_should_match": "10%"
}
}
}
更新 这是失败的查询,我想找到错误!:
{
"query": {
"bool": {
"filter": [
{
"term": {
"attr1": "on"
}
},
{
"term": {
"category": "7eb84c804a8c824fd608e05f78d42f10"
}
}
],
"should": [
{
"term": {
"attr2": "on"
}
},
{
"term": {
"attr3": "on"
}
}
],
"minimum_should_match": "10%"
}
}
}
如何按顺序重写此查询: 1)获取attr1和类别的所有行 2)然后用
查询这些结果请问好吗?
答案 0 :(得分:3)
好像你不在Elasticsearch 2.x上。
对于Elasticsearch 1.x,请使用FilteredQuery:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html
{
"filtered": {
"query": {
"bool": {
"should": [
{
"term": {
"attr2": "on"
}
},
{
"term": {
"attr3": "on"
}
}
]
}
},
"filter": {
"bool": {
"must": [
{
"match": {
"attr1": "on"
}
},
{
"match": {
"category": "7eb84c804a8c824fd608e05f78d42f10"
}
}
]
}
}
}
}