我有一个简单的用户信息文档,其中包含一个完成字段。
映射:
"properties" : {
"fname" : { "type" : "string" },
"lname" : { "type" : "string" },
"dob" : { "type" : "string" },
"sex" : { "type" : "string" },
"autocomplete" : {
"type" : "completion"
}
}
这是我的文件的一个例子。
"person" : {
"sex" : "Male",
"dob" : "11/11/2014",
"fname" : "Julie",
"lname" : "Thomas",
"autocomplete" : "Julie Thomas"
}
完整的建议查询完美无缺。但是当我删除这个文档时,我希望删除这个文章时仍然存在“Julie Thomas”的完整建议。
有关我的错误行为的任何建议吗?
谢谢!
答案 0 :(得分:1)
我也有这个问题。根据ElasticSearch文档,需要使用Optimize command从索引中删除完成建议。这就是他们在the Completion Suggester Docs底部所说的内容。
建议数据结构可能无法反映文档上的删除 立即。您可能需要为此进行优化。你可以打电话 使用only_expunge_deletes = true进行优化以仅满足删除要求 或者调用合并操作。
......说。我这样做了:
curl -XPOST 'http://server:9200/attribute/_optimize?pretty' -d '{
"only_expunge_deletes": true
}'
并且已删除的文档仍显示在完成建议器中,即使它未显示在查询或过滤器中。
...抱歉。答案不是很多......它应该是答案,但它可能不适合你,就像它不适合我一样。
答案 1 :(得分:1)
我们可能必须转到Index-Time Search,它使用1个字符的ngram并执行普通的_search查询。
答案 2 :(得分:0)
向数据添加一个ID字段,然后对该ID字段进行引用以进行删除和更新,这对我们来说是有效的
"index":{"_index":"esIndex","_type":"document","_id":"23d68f060118fbeee699d14eff044a1f"}}
{"text":"vision zero","id":"23d68f060118fbeee699d14eff044a1f","suggest":{"input":"vision zero","payload":{"entity_id":"23d68f060118fbeee699d14eff044a1f"}},"type":"Content"}
类似于上面的批量查询数据,请注意数据中的 id 字段。如果我们不放置它,则会遇到删除文档后仍然显示在建议中的相同问题。