作为登录用户,如果我执行相同的搜索,我希望能够隐藏我再也不想看到的单个记录。 ElasticSearch可以实现吗?
我已经阅读了有关多租户和过滤器的信息,但我不太清楚顶级实现的外观如何。
我的一个想法是,我在RDB中存储对不需要的记录的一些引用,然后将这些引用添加到过滤器查询中,但我不确定使用什么引用,因为弹性搜索会生成它#s; s当重新索引发生时,自己的ID可能不会保持不变。
答案 0 :(得分:1)
这取决于。如果你没有太多的用户而没有太大的文档,你可以在文档中使用字段,添加字段 dismissedBy ,并在使用时将写入更新写入文档
POST test/type1/1/_update
{
"script" : {
"inline": "ctx._source.dismissedBy.add(params.userId)",
"lang": "painless",
"params" : {
"userId" : "1"
}
}
}
并查询:
POST /index/documents/_search
{
"query": {
"bool": {
"must_not": {
"term": {
"dismissedBy": 1
}
}
}
}
}
使用这种方法的问题是,如果您重新索引文档,所有设置都将被覆盖,因此您也必须在其他地方保留副本。
其他选项如果文档很大或者您有很多用户,那么我会选择parent/child approach
如果用户点击关闭,则应将其编入索引
PUT /indexname/dissmisses/1?parent=dismissforid
{
"userId": 1
}
然后当你搜索时
POST /index/documents/_search
{
"query": {
"bool": {
"must_not": {
"has_child": {
"type": "dissmiss",
"query": {
"term": {
"userId": 1
}
}
}
}
}
}
}