# Search in Elasticsearch objects from non blocked user

**URL:** <https://discuss.elastic.co/t/search-in-elasticsearch-objects-from-non-blocked-user/95525>\
**Category:** Elasticsearch\
**Created:** [August 2, 2017, 12:47pm UTC](https://discuss.elastic.co/t/search-in-elasticsearch-objects-from-non-blocked-user/95525 "2017-08-02T12:47:38Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![rrader](https://avatars.discourse-cdn.com/v4/letter/r/c68b51/32.png) [@rrader](https://discuss.elastic.co/u/rrader)\
**Post date:** [August 2, 2017, 12:47pm UTC](https://discuss.elastic.co/t/search-in-elasticsearch-objects-from-non-blocked-user/95525/1 "2017-08-02T12:47:39Z")

</div>

In Elaasticsearch we have 3 collections, users, products and blocked\_users.

```
users{id, first_name, last_name, ...}
products{id, user_id, title, ...}
blocked_users{user_id, blocked_user_id}

```

I want to search products by title, but I don't want to show products oof blocked users.

How should be query?

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [August 2, 2017, 1:06pm UTC](https://discuss.elastic.co/t/search-in-elasticsearch-objects-from-non-blocked-user/95525/2 "2017-08-02T13:06:46Z")

</div>

You can't really do "joins" in elasticsearch.

You may want to look at parent/child feature but that's not may be straightforward.

I think it would be better to have a single data structure `products` like:

```auto
PUT products/doc/1
{
  "title": "Title",
  "user": {
    "first_name": "First",
    "last_name": "Last",
    "blocked": true
  } 
}

```

---

<div class="post-metadata">

**Author:** ![rrader](https://avatars.discourse-cdn.com/v4/letter/r/c68b51/32.png) [@rrader](https://discuss.elastic.co/u/rrader)\
**Post date:** [August 2, 2017, 1:42pm UTC](https://discuss.elastic.co/t/search-in-elasticsearch-objects-from-non-blocked-user/95525/3 "2017-08-02T13:42:37Z")

</div>

But for some users it can be blocked, and for others they will be not blocked, it depends if logged user blocked product's user.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [August 2, 2017, 2:28pm UTC](https://discuss.elastic.co/t/search-in-elasticsearch-objects-from-non-blocked-user/95525/4 "2017-08-02T14:28:35Z")

</div>

Can you give an example with the model you sent?

```auto
users{id, first_name, last_name, ...}
products{id, user_id, title, ...}
blocked_users{user_id, blocked_user_id}

```

---

<div class="post-metadata">

**Author:** ![rrader](https://avatars.discourse-cdn.com/v4/letter/r/c68b51/32.png) [@rrader](https://discuss.elastic.co/u/rrader)\
**Post date:** [August 2, 2017, 2:44pm UTC](https://discuss.elastic.co/t/search-in-elasticsearch-objects-from-non-blocked-user/95525/5 "2017-08-02T14:44:16Z")

</div>

user[  
{id: 1, first\_name: "John", last\_name:"Snow", ...}  
{id: 2, first\_name: "Sarah", last\_name:"Connor", ...}  
{id: 2, first\_name: "Arnold", last\_name:"Schwarzenegger", ...}  
]

products[  
{id: 1, user\_id: 3, title:"Apple"}  
]

blocked\_users[  
{user\_id: 2, blocked\_user\_id: 3} // this mean user with id 2 blocked user with id 3  
]

so, when user with id 1 search he will get a response with 1 product  
when user with id 2 search 0 products is expected, because product user id is 3, but user with id 2 blocked this user

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [August 5, 2017, 9:29pm UTC](https://discuss.elastic.co/t/search-in-elasticsearch-objects-from-non-blocked-user/95525/6 "2017-08-05T21:29:21Z")

</div>

Would that work then?

```auto
PUT products/doc/1
{
  "title": "Title",
  "user": {
    "id": "3",
    "first_name": "First",
    "last_name": "Last",
    "blocked_users": ["2"]
  } 
}

```

Which basically means that as user `2`, I won't see that product as I blocked all the products that created user `3`.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [September 2, 2017, 9:29pm UTC](https://discuss.elastic.co/t/search-in-elasticsearch-objects-from-non-blocked-user/95525/7 "2017-09-02T21:29:25Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
