我使用ES 6.6,正在搜索比当前日期更早的文档。只有2份文件,但我收到了3件退货。现有的2个文档和第三个文档是设置和映射。我只想拿到那两份文件。
我试图添加一个"存在"的过滤器,但ES没有返回任何文档:
GET _search
{
"query": {
"bool": {
"filter": [
{
"exists": {
"field": "products"
}
},
{
"range": {
"happening_at": {
"gte": "now"
}
}
}
]
}
}
}
当我只搜索范围时,我会收到2个正确的文档,但会有额外的"命中",没有文档,只有设置和映射。
欢迎来到SO,Adrián。
由于未指定任何索引名称,因此您正在all
索引中激发_search
。请尝试GET <your_index_name>/_search { ... request body ...}
。
此外,"gte": "now"
几乎不会返回任何记录,因为它意味着日期greater than or equal to current date
。在您的情况下,您希望记录older
而不是当前日期。因此,您可以使用lt:now
或更好的lt:now/d
,因为now/d
在性能方面很好,并且允许缓存。
尝试以下操作:
GET <your_index_name>/_search
{
"query": {
"bool": {
"filter": [
{
"exists": {
"field": "products"
}
},
{
"range": {
"happening_at": {
"lt": "now/d"
}
}
}
]
}
}
}
您必须POST您的查询:(。如果你想成功,请不要忘记/。
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html