Проблема: используйте Amplify.js из AWS.Tinder похожее приложение.Здесь вы можете найти работу рядом.Их можно увидеть только один раз.Мы должны сохранить то, что пользователю нравится и не нравится.
То, что я уже успел:
У меня есть схема:
type Query {
nearbyJobs(location: LocationInput!, km: Int): ModelJobConnection
}
type User @model {
id: ID!
name: String
interacts: [Jobinteract] @connection(name: "interactsuser")
createdAt: String
updatedAt: String
}
type Job @model @searchable {
id: ID!
name: String
location: Location
is_swiped_by: AWSJSON
interacts: [Jobinteract] @connection(name: "interactjob")
createdAt: String
updatedAt: String
}
С @searchable я установилподключение к ElasticSearch.Так как это, кажется, единственный способ поиска работы поблизости.
Теперь становится сложно.
В данный момент я сохраняю в поле: is_seen_from_user всех идентификаторов пользователей, которые уже видели эту работу.Пока было около 1000 пользователей, это было нормально.
Это был мой запрос es:
"body": {
"size": 30,
"sort": [
{
"createdAt": {
"order": "desc"
}
}
],
"query": {
"bool": {
"must": [
{
"range": {
"createdAt": {
"gte": "now-30d/d"
}
}
}
],
"must_not": {
"match_phrase": {
"is_swiped_by.user": "$ctx.identity.sub"
}
},
"filter": {
"geo_distance": {
"distance" : "${distance}km",
"location" : $util.toJson($ctx.args.location)
}
}
}
}
is_swiped_by.user Итак, я посмотрел в массив, чтобы увидеть, был ли там пользователь.если да - пропустите.
Но сейчас у меня скорее проблема в том, что может быть больше пользователей.
Это означает, что я больше не могу сохранить его в поле.Вероятно, должен быть новый стол.
type Jobinteract @model {
id: ID!
user: User! @connection(name: "interactsuser")
job: Job! @connection(name: "interactjob")
decision: Int
createdAt: String
updatedAt: String
}
Вопрос сейчас такой.Если у меня есть таблица (Jobinteract) сейчас.Должен ли я сделать это @searchable тоже?
Тогда у меня также есть данные в ElasticSearch.Но как я могу собрать их вместе?Это тогда данные из разных индексов.
Я прочитал hasChild в ES.Но не понимаю, как именно это должно работать, если это правильный путь?!
В настоящее время я также проверяю, могу ли я получить доступ к ES через лямбду, поэтому я бы просто позвонилсобери все работы поблизости и сравни их сам.Но это, вероятно, не самый лучший вариант.Получите 100 рабочих мест от Elasticsearch, сравните его с таблицей ниже.Если осталось 50, отправьте их на внешний интерфейс, если нет, получите 100 снова.Чем больше нравится пользователю, тем дольше будет длиться этот звонок.