我正在使用ES 6.6,并且正在搜索早于当前日期的文档。只有2个文档,但是我得到了3个项目。现有的2个文档和第三个是设置和映射。我只想得到两个文件。
我试图添加一个带有“ exists”的过滤器,但是ES没有返回任何文档:
GET _search
{
"query": {
"bool": {
"filter": [
{
"exists": {
"field": "products"
}
},
{
"range": {
"happening_at": {
"gte": "now"
}
}
}
]
}
}
}
当我仅搜索范围时,我会收到2个正确的文档,但是带有额外的“匹配”,而没有文档,仅包含设置和映射。
答案 0 :(得分:1)
欢迎来到艾德里安。
由于您未指定任何索引名称,因此正在_search
索引之间触发all
。请尝试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"
}
}
}
]
}
}
}
答案 1 :(得分:0)
您必须发布查询:)。如果您想赚钱,请不要忘记/。
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html