我想查看包含media_url == '' || media_url == null
的文档。我有一个问题:
{
"engagements": [
"blah"
],
"query": {
"from": 0,
"size": 2,
"sort": [
{
"bookmarked": {
"order": "desc"
}
},
{
"created_at": {
"order": "desc"
}
}
],
"facets": {},
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"term": {
"car_id": "78778"
}
},
{
"range": {
"created_at": {
"gte": "2015-04-12T04:00:00.000Z",
"lte": "2015-05-13T03:59:59.999Z"
}
}
},
{
"term": {
"media_url": ""
}
}
],
"should": [
{
"term": {
"bookmarked": false
}
}
]
}
}
}
},
"aggregations": {
"word_frequencies": {
"terms": {
"field": "text",
"size": 150
}
}
},
"highlight": {
"fields": {
"text": {
"fragment_size": 1500
}
}
}
},
"api": "_search"
}
但是,如果我按上述方法执行操作,则不会返回设置为null的记录。如何返回带有''或null作为media_url值的记录?
答案 0 :(得分:4)
也许您可以尝试使用“或”过滤器。 http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-or-filter.html
{
"or": [
{
"term": {
"media_url": ""
}
},
{
"term": {
"media_url": null
}
}
]
}
编辑:这是完整的查询(未经测试,因为我没有示例文档/索引模板)
{
"engagements": [
"blah"
],
"query": {
"from": 0,
"size": 2,
"sort": [
{
"bookmarked": {
"order": "desc"
}
},
{
"created_at": {
"order": "desc"
}
}
],
"facets": {},
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"term": {
"car_id": "78778"
}
},
{
"range": {
"created_at": {
"gte": "2015-04-12T04:00:00.000Z",
"lte": "2015-05-13T03:59:59.999Z"
}
}
},
{
"or": [
{
"term": {
"media_url": ""
}
},
{
"term": {
"media_url": null
}
}
]
}
],
"should": [
{
"term": {
"bookmarked": false
}
}
]
}
}
}
},
"aggregations": {
"word_frequencies": {
"terms": {
"field": "text",
"size": 150
}
}
},
"highlight": {
"fields": {
"text": {
"fragment_size": 1500
}
}
}
},
"api": "_search"
}
答案 1 :(得分:3)
您可以使用missing filter来处理空值或字段本身丢失。您可以将它与空字符串术语结合使用,以达到您想要的效果。
{
"or": [
{
"term": {
"media_url": ""
}
},
{
"missing": {
"field": "media_url"
}
}
]
}
使用上述内容代替" media_url"的单一术语查询在布尔过滤器的must子句中。