DeleteByQuery ElasticSearch Golang错误弹性:错误404(未找到)

时间:2017-07-28 17:41:53

标签: elasticsearch go

我尝试使用特定的产品ID从我的索引中删除文档。

以下是示例代码:

package main

import (
    "encoding/json"
    "log"
    "time"
    "fmt"
    "gopkg.in/mgo.v2/bson"
    elastic "gopkg.in/olivere/elastic.v3"
)

func main() {

    client, err := elastic.NewClient(elastic.SetSniff(false), elastic.SetURL("http://localhost:9200"))
    if err != nil {
        log.Fatal("Cannot create ES client:", err)
    }
    boolQuery := elastic.NewBoolQuery().Must(elastic.NewTermQuery("productId", "1503368"))

    searchQuery := client.Search().Query(boolQuery).
        Index("magento1").Type("catalog")
    result, err := searchQuery.Do()
    for _, hit := range result.Hits.Hits {
        var data bson.M
        _ = json.Unmarshal(*hit.Source, &data)
        fmt.Println("SEARCH RESPONSE\n", data)
    }

    result2, err2 := elastic.NewDeleteByQueryService(client).
        Index("magento1").
        Type("catalog").
        Query(boolQuery).
        Do()
    fmt.Println("DELETE RESPONSE 2: \n", result2, err2)

}

SearchQuery提供了正确的响应,并使用提供的productId返回给我文档(如果文档存在与否,我只能验证。)

现在删除,我不知道代码到底有什么问题,或者API中是否有任何遗漏或者必须添加额外内容(matchAll等)但是这个deleteQuery只是不删除索引,并始终给我回复:

error elastic: Error 404 (Not Found)

我搜索了所有博客/文档/官方图书馆的GitHub tests案例等,但没有一个解决了我的问题。虽然我已经解决了扫描/滚动和批量删除问题,但仍然想知道为什么如果它在官方文档中不起作用。

这是映射:

"productId": bson.M{"type": "string", "store": true, "index": "not_analyzed"},

ES版本: 5.3.1

感谢。

1 个答案:

答案 0 :(得分:1)

问题来自于您使用elastic.v3 targets ES 2.x

的事实

由于您使用的是ES 5.3.1,因此需要使用elastic.v5,因此只需替换此行

elastic "gopkg.in/olivere/elastic.v3"

通过

elastic "gopkg.in/olivere/elastic.v5"

你应该没事。