ElasticSearch-使用元数据排除命中



我使用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

最新更新