为了账号安全,请及时绑定邮箱和手机立即绑定

我可以将 Elasticsearch 与需要身份验证才能查看的数据一起使用吗(例如,仅限登录用户)

我可以将 Elasticsearch 与需要身份验证才能查看的数据一起使用吗(例如,仅限登录用户)

Go
哔哔one 2022-06-01 11:35:10
我想在我的网站上实现搜索。用户应该能够搜索他们在他们的商店中拥有的产品。显然,返回的产品应该只是他们的,如果客户在他们的网站上搜索也是一样的。我如何用 Elasticsearch 实现这个?显然,我将让我的后端而不是前端进行查询,但是我将如何将搜索结果限制为仅适用于一个用户。是否只能通过使用我自己的代码进行过滤。它是否有类似 WHERE from sql 的内容?我是不是走错了路?如果我使用 PostgreSQL 的全文搜索会更好。我正在使用 GO 顺便说一句。此致更新:我的用例按要求:用户与一个 ID 配对。他在他的仪表板中搜索他在他的商店中拥有的产品。他的请求通过会话令牌 cookie,我在我的服务器上获取他的 ID。然后我需要获取与他的查询匹配的产品而且只有他的。例如,在 SQLSELECT * FROM products WHERE shop_id=ID中。Elasticsearch 有可能吗?与其在 PostgreSQL 上实现全文搜索相比,它更麻烦吗?
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

使用 Elasticsearch 可以轻松实现,您应该将其定义shop_id为关键字字段,然后在查询的过滤上下文中使用它,以确保您仅搜索属于特定的产品shop_id。


在过滤器上下文中使用shop_id还可以显着提高搜索性能,因为这些默认缓存在 Elasticsearch 中,如官方文档中所述


在过滤器上下文中,查询子句回答“此文档是否匹配此查询子句?”的问题。答案很简单,是或否——不计算分数。过滤上下文主要用于过滤结构化数据,例如


状态字段是否设置为“已发布”?


Elasticsearch 会自动缓存常用的过滤器,以提高性能。


根据您的要求进行示例映射和查询:


索引映射


{

    "mappings" :{

        "properties" : {

            "product" : {

                "type" : "text"

            },

            "shop_id" :{

                "type" : "keyword"

            }

        }

    }

}

2 个差异商店 ID 的索引示例文档


{

    "product" : "foo",

    "shop_id" : "stackoverflow"

}


{

    "product" : "foo",

    "shop_id" : "opster"

}

搜索fooshop_id 所在的产品stackoverflow


{

    "query": {

        "bool": {

            "must": [

                {

                    "match": {

                        "product": "foo"

                    }

                }

            ],

            "filter": [

                {

                    "term": {

                        "shop_id": "stackoverflow"

                    }

                }

            ]

        }

    }

}

搜索结果


 "hits": [

            {

                "_index": "productshop",

                "_type": "_doc",

                "_id": "2",

                "_score": 0.18232156,

                "_source": {.  --> note only foo belong to `stackoverflow` returned

                    "product": "foo",

                    "shop_id": "stackoverflow"

                }

            }

        ]


查看完整回答
反对 回复 2022-06-01
  • 1 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信