在下面考虑停止字段是时间戳字段。
我想过滤以下条件的数据:
我知道,我应该使用must_not但不知道如何。
我想对子类型进行一些评分,并使用此分数对父级进行排序,然后使用停止字段过滤掉父级。
GET indexName/parentType/_search
{
"query": {
"bool": {
"must": [
{
"has_child": {
"type": "child-type",
"score_mode": "max",
"query": {
"function_score": {
"functions": [
{
"script_score": {
"script": {
"file": "score-analytics",
"lang": "expression"
}
}
}
]
}
}
}
},
{
"bool": {
"should": [
{
"range": {
"stop": {
"gte": "now"
}
}
}
]
}
}
]
}
}
}
答案 0 :(得分:0)
您需要使用现有过滤器:
"bool":
{ "should":[
{ "range":
{ "stop":
{ "gte": "now" }
}
},
{ "query":
{ "exists" :
{ "field" : "stop" }
}
}
] }
答案 1 :(得分:0)
如果您使用must_not
bool
条件来过滤该字段不存在,该怎么办?您的查询可能如下所示:
"query": {
"filtered": {
"filter": {
"bool": {
"must_not": [
{
"exists": {
"field": "stop" <-- give the field which shouldn't exist
}
}
]
}
}
}
}
以上是一个示例,以便您可以重现。对于第二个条件,似乎正如您所做的那样使用range查询。我几乎无法确保获得时间戳range
的更好方法。希望它有所帮助!