弹性搜索结构和/ EXISTS

时间:2014-07-03 21:38:36

标签: elasticsearch

我是Elasticsearch的新手,这让我发疯了。这些文档非常无益,因此大约6个小时后我来到了令人惊叹的SO社区。

我有一个查询,它在一个大型的95%完成的网站上实现,所以我不能在这一点上重写。

我需要添加一项检查以确保userID不为null。在SQL中,这需要几秒钟,但我有一个非常大的查询,它给了我疯狂无益的错误消息或不工作。我尝试过重组,将“存在”转移到现有的“和”中,它根本不起作用。

这就是我所拥有的:

GET _search
{
"from": 0,
"size": 30,
"query": {
    "filtered": {
        "query": {
            "match_all": {}
        }, 
        "filter": {
            "and": [
            {
            "bool": {
                "must": [
                   {
                        "exists" : { "field" : "userID" }
                   }
                ]
            }
            },{
                "term": {
                    "property.rental": false
                }
            }, {
                "term": {
                    "property.status": 100
                }
            }, {
                "term": {
                    "property.showOnHomepage": true
                }
            } 
         ]
       }
    }
},
"sort": {
    "_script": {
        "script": "Math.random()",
        "type": "number",
        "params": {},
        "order": "asc"
    }
},
"aggregations": {
    "min_price": {
        "min": {
            "field": "basePrice"
        }
    },
    "max_price": {
        "max": {
            "field": "basePrice"
        }
    },
    "avg_price": {
        "avg": {
            "field": "basePrice"
        }
    }
},
"filter": {
    "range": {
        "property.price": {
            "lte": 1000000000
        }
    }
}
}

这给出了以下结果:

{
"took": 7,
"timed_out": false,
"_shards": {
  "total": 5,
  "successful": 5,
  "failed": 0
},
"hits": {
  "total": 0,
  "max_score": null,
  "hits": []
},
"aggregations": {
  "min_price": {
     "value": null
  },
  "max_price": {
     "value": null
  },
  "avg_price": {
     "value": null
  }
}
}

我根本不明白将

放在哪里
 "exists" : { "field" : "userID" }

为了过滤掉userID的null属性。

任何帮助都会很棒。

0 个答案:

没有答案