如何实现用户关系定制的全文搜索
How to implement a full text search customized by user relations
我目前正在开发一个 laravel 应用程序,用户可以在其中添加文章等内容,并且可以通过搜索引擎搜索这些文章。我想实施现代全文搜索解决方案。
但事实是,用户可以将文章设为私人文章,使其仅供其关注者或朋友阅读。
在简单的 SQL 中使用一个简单的 where 子句在主元 table 关系上实现会很简单,但这在大型数据库上几乎没有性能。
我对弹性搜索和其他搜索引擎进行了研究和开发,但限制是所有数据集都是可搜索的,我无法根据用户定义的关系自定义过滤器。
我应该为每个用户创建一个索引而不是全局索引吗?这似乎也有很大的影响
非常感谢您对此的任何想法,在此先感谢。
你可以在 Elasticsearch 中使用我能想到的几种方法
- 最好将 document level security as it's the most secure approach, but don't use filtered aliases 与此一起使用
- 添加一个布尔值
private
字段,然后您可以根据该字段进行过滤。这远不如上面的 DLS 安全
如果您尝试过第二种方法,那么分享您所做的和无效的会有所帮助
换个角度看问题。
与其考虑某篇文章是否可以被某些用户组访问,不如考虑用户和哪些文章 she/he 可以访问。
搜索始终由特定用户执行,因此可以知道 she/he 关注了谁 (followed_user_ids
) 并且与 (friend_ids
) 成为好友。此信息可在查询构建时使用。
示例查询可能如下所示:
{
"query": {
"bool": {
"should": [
{
"term": {
"private": false
}
},
{
"bool": {
"filter": [
{
"term": {
"private": true
}
}
],
"should": [
{
"terms": {
"author_id": followed_user_ids,
}
},
{
"terms": {
"author_id": friend_ids,
}
}
],
"minimum_should_match": 1
}
}
]
}
}
}
它会找到以下文章:
- 不是私有的(对所有人可见);或
- 是私人的,但由朋友或当前用户关注的用户创作
我目前正在开发一个 laravel 应用程序,用户可以在其中添加文章等内容,并且可以通过搜索引擎搜索这些文章。我想实施现代全文搜索解决方案。 但事实是,用户可以将文章设为私人文章,使其仅供其关注者或朋友阅读。
在简单的 SQL 中使用一个简单的 where 子句在主元 table 关系上实现会很简单,但这在大型数据库上几乎没有性能。
我对弹性搜索和其他搜索引擎进行了研究和开发,但限制是所有数据集都是可搜索的,我无法根据用户定义的关系自定义过滤器。 我应该为每个用户创建一个索引而不是全局索引吗?这似乎也有很大的影响
非常感谢您对此的任何想法,在此先感谢。
你可以在 Elasticsearch 中使用我能想到的几种方法
- 最好将 document level security as it's the most secure approach, but don't use filtered aliases 与此一起使用
- 添加一个布尔值
private
字段,然后您可以根据该字段进行过滤。这远不如上面的 DLS 安全
如果您尝试过第二种方法,那么分享您所做的和无效的会有所帮助
换个角度看问题。
与其考虑某篇文章是否可以被某些用户组访问,不如考虑用户和哪些文章 she/he 可以访问。
搜索始终由特定用户执行,因此可以知道 she/he 关注了谁 (followed_user_ids
) 并且与 (friend_ids
) 成为好友。此信息可在查询构建时使用。
示例查询可能如下所示:
{
"query": {
"bool": {
"should": [
{
"term": {
"private": false
}
},
{
"bool": {
"filter": [
{
"term": {
"private": true
}
}
],
"should": [
{
"terms": {
"author_id": followed_user_ids,
}
},
{
"terms": {
"author_id": friend_ids,
}
}
],
"minimum_should_match": 1
}
}
]
}
}
}
它会找到以下文章:
- 不是私有的(对所有人可见);或
- 是私人的,但由朋友或当前用户关注的用户创作