【发布时间】:2017-07-29 12:10:43
【问题描述】:
我正在尝试从我的索引中删除具有特定产品 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
谢谢。
【问题讨论】:
-
ES 日志中是否也有错误?
标签: elasticsearch go