elasticsearch 如何从Amplify-AppSync-ElasticSearch-DynamoDB堆栈中获取附近看不见的文档?,elasticsearch,amazon-dynamodb,aws-amplify,aws-appsync,amplifyjs,elasticsearch,Amazon Dynamodb,Aws Amplify,Aws Appsync,Amplifyjs" /> elasticsearch 如何从Amplify-AppSync-ElasticSearch-DynamoDB堆栈中获取附近看不见的文档?,elasticsearch,amazon-dynamodb,aws-amplify,aws-appsync,amplifyjs,elasticsearch,Amazon Dynamodb,Aws Amplify,Aws Appsync,Amplifyjs" />

elasticsearch 如何从Amplify-AppSync-ElasticSearch-DynamoDB堆栈中获取附近看不见的文档?

elasticsearch 如何从Amplify-AppSync-ElasticSearch-DynamoDB堆栈中获取附近看不见的文档?,elasticsearch,amazon-dynamodb,aws-amplify,aws-appsync,amplifyjs,elasticsearch,Amazon Dynamodb,Aws Amplify,Aws Appsync,Amplifyjs,问题: 使用AWS中的Amplify.js。 类似的Tinder应用程序。 在这里你可以在附近找到工作。 这些可能只会出现一次。 我们应该保存用户喜欢和不喜欢的东西 我已经做到了: 我有以下计划: type Query { nearbyJobs(location: LocationInput!, km: Int): ModelJobConnection } type User @model { id: ID! name: String interacts: [Jobinte

问题: 使用AWS中的Amplify.js。 类似的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的连接。因为这似乎是在附近找工作的唯一方法

现在变得很棘手

现在我保存在字段中:是从用户那里看到的所有已经看到此作业的用户id。因为到目前为止大约有1000个用户,这还可以

这是我的问题:

"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)
              }
            }
          }
        }
是否由用户刷卡 所以我查看了数组,看看用户是否在那里。 如果是-跳过

但现在我有一个问题,那就是可能会有更多的用户

这意味着,我不能再将其保存到字段中。 可能需要一张新桌子

type Jobinteract @model {
  id: ID!
  user: User! @connection(name: "interactsuser")
  job: Job! @connection(name: "interactjob")
  decision: Int
  createdAt: String
  updatedAt: String
}
现在的问题是。如果我现在有桌子(Jobinteract)。我应该让它也“可搜索”吗

然后我也有ElasticSearch中的数据。但是我怎样才能把它们结合在一起呢? 然后是来自不同索引的数据

我读的是《哈撒尔德的故事》。但我不明白这到底是怎么回事,如果这是正确的方法


我目前也在测试是否可以通过lambda访问ES,所以我只需要调用附近的所有作业,自己比较它们。 但这可能不是最好的选择。 从Elasticsearch附近获得100份工作,将其与下表进行比较。如果还剩50个,将其发送到前端,如果没有,则再次获取100个。
用户越喜欢,调用的时间就越长。

当前@searchable指令不支持现成的自定义ElasticSearch映射,因此您需要为ElasticSearch群集执行一些自定义设置。您应该能够使用诸如hasChild之类的联接查询来查找在同一索引中没有关联子记录的所有位置,该索引指示用户以前与作业进行过交互


在撰写本文时,@searchable指令将不同的@model存储在不同的索引中,因此您需要编写一个自定义解析器来放置“交互”同一索引中的子记录,指定用户何时与作业交互,然后需要更新ES索引映射,使其使用联接数据类型,以便可以使用hasChild查询。有关更多信息,请参阅。

未回答您的问题?可能与的重复不完全相同。在这个答案中,我们忽略了可能会有新用户。它不是在dynamodb中分类的。所以如果我保存了被看到的用户的数量,那么我可能有一个新的不在那里?!这不是一个重复的问题,更像是一个关于我当前堆栈的老问题。因为我必须使用elasticsearch