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

我想在我的网站上实现搜索。用户应该能够搜索他们在他们的商店中拥有的产品。显然,返回的产品应该只是他们的,如果客户在他们的网站上搜索也是一样的。我如何用 Elasticsearch 实现这个?显然,我将让我的后端而不是前端进行查询,但是我将如何将搜索结果限制为仅适用于一个用户。是否只能通过使用我自己的代码进行过滤。它是否有类似 WHERE from sql 的内容?我是不是走错了路?如果我使用 PostgreSQL 的全文搜索会更好。

我正在使用 GO 顺便说一句。

此致

更新:我的用例按要求:

用户与一个 ID 配对。他在他的仪表板中搜索他在他的商店中拥有的产品。他的请求通过会话令牌 cookie,我在我的服务器上获取他的 ID。然后我需要获取与他的查询匹配的产品而且只有他的。

例如,在 SQLSELECT * FROM products WHERE shop_id=ID中。Elasticsearch 有可能吗?与其在 PostgreSQL 上实现全文搜索相比,它更麻烦吗?


哔哔one
浏览 134回答 1
1回答

小唯快跑啊

使用 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"                }            }        ]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go