2017-07-28 61 views
0

我試圖從我的索引中刪除具有特定productID的文檔。DeleteByQuery ElasticSearch Golang錯誤彈性:錯誤404(未找到)

這裏的示例代碼:

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(我這樣做,只是爲了驗證如果文件存在與否)的文件。

現在刪除,我不知道什麼在地球上是錯誤的代碼或如果有什麼缺少的A​​PI或額外的東西必須添加(matchAll等),但這deleteQuery只是不刪除索引和總是給我的迴應:

error elastic: Error 404 (Not Found) 

我找遍了所有的博客/文檔/官庫的GitHub的tests箱子等,但沒有解決我的問題。儘管我已經解決了掃描/滾動和批量刪除仍然奇怪爲什麼這不起作用,如果它在官方文檔中。

這裏的映射:

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

ES版: 5.3.1

感謝。

+0

ES日誌中是否有錯誤? – Val

回答

1

問題來自於您使用elastic.v3其中targets ES 2.x

由於您使用的ES 5.3.1,你需要使用elastic.v5,所以僅僅通過

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

替換該行

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

,你應該罰款。

+0

嗯,我一直認爲elastic.v3是用於ES 5.3.1的,因此從未困擾過。我仍然無法確認是否切換到elastic.v5可以解決,因爲我無法將我的golang升級到1.7來運行elastic.v5(我有golang 1.5.1)。 Alhough不能測試它,我相信這是正確的答案。接受。謝謝。 – whitewalker

+0

很酷,如果需要請不要猶豫,回到這裏。 – Val