elasticseach 6 滚动,第二次获取不可能

hom*_*own 1 scroll elasticsearch

我使用es 6.3.2。我想使用scroll来获取文档。使用postman来测试:首先,我创建一个索引:

PUT /person4 HTTP/1.1
Host: localhost:9200
Cache-Control: no-cache
Postman-Token: 6d98c502-d37b-4798-adc8-2fb1f31f228f
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Run Code Online (Sandbox Code Playgroud)

然后插入一些文档:

POST /person4/type1 HTTP/1.1
Host: localhost:9200
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 70f2167e-280f-444c-b588-d034c8a55a5c

{
    "lastname":"alex"
}
Run Code Online (Sandbox Code Playgroud)

多次重复这篇文章。

按照以下说明操作:web 然后第一次使用滚动 api:

 POST /person4/_search?scroll=1s HTTP/1.1
Host: localhost:9200
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 6d92fbb8-c861-434f-bf31-3023ff1fb282

{
    "size": 1,
    "query": {
        "match" : {
            "lastname" : "alex"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后得到 1 个文档和滚动 id

最后,第二次获取:

POST /person4/_search/scroll HTTP/1.1
Host: localhost:9200
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 14238262-6125-4f60-8025-d0d2854b8dd6

{
    "scroll" : "1s", 
    "scroll_id" : "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAABIFklhQmdpTWVOUTVxbkFTM1l6U1dpRHcAAAAAAAAAShZJYUJnaU1lTlE1cW5BUzNZelNXaUR3AAAAAAAAAEkWSWFCZ2lNZU5RNXFuQVMzWXpTV2lEdwAAAAAAAABHFklhQmdpTWVOUTVxbkFTM1l6U1dpRHcAAAAAAAAASxZJYUJnaU1lTlE1cW5BUzNZelNXaUR3" 
}
Run Code Online (Sandbox Code Playgroud)

然后得到一个错误:

{
    "error": {
        "root_cause": [
            {
                "type": "invalid_type_name_exception",
                "reason": "Document mapping type name can't start with '_', found: [_search]"
            }
        ],
        "type": "invalid_type_name_exception",
        "reason": "Document mapping type name can't start with '_', found: [_search]"
    },
    "status": 400
}
Run Code Online (Sandbox Code Playgroud)

所以我必须添加类型:

POST /person4/_search/type1/scroll HTTP/1.1
Host: localhost:9200
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 43c8052f-76c9-41b9-a0a6-637eb5fee30b

{
    "scroll" : "1s", 
    "scroll_id" : "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAABIFklhQmdpTWVOUTVxbkFTM1l6U1dpRHcAAAAAAAAAShZJYUJnaU1lTlE1cW5BUzNZelNXaUR3AAAAAAAAAEkWSWFCZ2lNZU5RNXFuQVMzWXpTV2lEdwAAAAAAAABHFklhQmdpTWVOUTVxbkFTM1l6U1dpRHcAAAAAAAAASxZJYUJnaU1lTlE1cW5BUzNZelNXaUR3" 
}
Run Code Online (Sandbox Code Playgroud)

然后我得到了一个新的错误:

{
    "error": "no handler found for uri [/person4/_search/type1/scroll] and method [POST]"
}
Run Code Online (Sandbox Code Playgroud)

那么如何获取更多的文档呢?只能获取一次吗?

Tec*_*Sid 6

问题是您的第二次提取在请求 URL 中有索引名称。URL 不应包含索引或类型名称\xe2\x80\x89\xe2\x80\x94\xe2\x80\x89,这些是在原始搜索请求中指定的。

\n\n

而不是这个:

\n\n
POST /person4/_search/scroll HTTP/1.1\nHost: localhost:9200\nContent-Type: application/json\nCache-Control: no-cache\nPostman-Token: 14238262-6125-4f60-8025-d0d2854b8dd6\n\n{\n    "scroll" : "1s", \n    "scroll_id" : "Whatever scroll id you\'ve got" \n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

用这个:

\n\n
POST /_search/scroll HTTP/1.1\nHost: localhost:9200\nContent-Type: application/json\nCache-Control: no-cache\nPostman-Token: 14238262-6125-4f60-8025-d0d2854b8dd6\n\n{\n    "scroll" : "1s", \n    "scroll_id" : "Whatever scroll id you\'ve got" \n}\n
Run Code Online (Sandbox Code Playgroud)\n