You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@s2graph.apache.org by "DOYUNG YOON (JIRA)" <ji...@apache.org> on 2018/04/02 16:16:00 UTC

[jira] [Commented] (S2GRAPH-199) Changing query more intuitively by using `columnName` instead of `from/to` in label field name

    [ https://issues.apache.org/jira/browse/S2GRAPH-199?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16422693#comment-16422693 ] 

DOYUNG YOON commented on S2GRAPH-199:
-------------------------------------

[~daewon] Thanks for the great suggestion. 
Quick question is how we are going to deal with the case when sourceServiceColumn and targetServiceColumn is same.

for example, let's say we have following the extra label.
{noformat}
Label(name: friends, sourceServiceColumn: userColumn, targetServiceColumn: userColumn)
{noformat}
How the query would look like if user wants to get "find movies that my friends liked"?

> Changing query more intuitively by using `columnName` instead of `from/to` in label field name
> ----------------------------------------------------------------------------------------------
>
>                 Key: S2GRAPH-199
>                 URL: https://issues.apache.org/jira/browse/S2GRAPH-199
>             Project: S2Graph
>          Issue Type: Improvement
>          Components: s2graphql
>            Reporter: Daewon Jeong
>            Assignee: Daewon Jeong
>            Priority: Major
>              Labels: usability
>
> h1. Changing query more intuitively by using `columnName` instead of `from/to` in label field name
> When fetching a Label Associated with a ServiceColumn, `from/to` Is used as the Label field. 
>  This indirectly represents the `source/target Column` in the Label.
> You can also query the next step based on the corresponding `from/to`.
> ColumnName defined in the Label schema to create a more intuitive query than using `from/to`.
> For example, suppose you have the following Services, ServiceColumns, and Label.
> {noformat}
> service = Service(name: kakao)
> userColumn = ServiceColumn(serviceName: kakao, name: user)
> movieColumn = ServiceColumn(serviceName: kakao, name: movie)
> Label(name: like, sourceServiceColumn: userColumn, targetServiceColumn: movieColumn)
> {noformat}
> h2. Let's take an example of a query that comes from a user who likes movies that user 'daewon' likes.
> As is
> {noformat}
> query {
>   kakao {
>     user(id: "daewon") {
>       like(direction: out) { # By Label(like) shcmea, direction is fixed in `out`
>         score
>         to { # `to` Represents the targetServiceColumn (movie) of `like` label.
>           id
>           like(direction: in) { # By Label(like) shcmea, direction is fixed in `in`
>             score
>             from { # In the case of the in direction, it is confused because the directions `from` and `to` are relatively determined.
>               id
>               age
>             }
>           }
>         }
>       }
>     }
>   }
> }
> {noformat}
> To be
> {noformat}
> query {
>   kakao {  
>     user(id: "daewon") {      
>       like { # For a Label(like) started with serviceColumn(user), the direction is fixed to `out`.
>         score            
>         movie { 
>           id         
>           like { # For a Label(like) started with serviceColumn(movie), the direction is fixed to `in`.
>             score              
>             user { 
>               id
>               age
>             }      
>           }  
>         }
>       }
>     }
>   }
> }
> {noformat}
> As you can see in the example above, we can know in advance how to query `like` label according to the starting column(user/movie), and also use field name instead of `from/to` to use columnName.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)