首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从Amplify - AppSync - ElasticSearch - DynamoDB堆栈中获取看不见的附近文档?

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

Stack Overflow用户
提问于 2019-06-03 23:03:51
回答 1查看 242关注 0票数 0

问题:使用亚马逊网络服务的Amplify.js。一个类似Tinder的应用程序。在这里你可以在附近找到工作。这些可能只会出现一次。我们应该保存用户喜欢和不喜欢的内容。

我已经做到了:

我有个计划:

代码语言:javascript
复制
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所有已经见过这个工作的用户id。因为到目前为止大约有1000个用户,所以这是可以的。

这是我的es查询:

代码语言:javascript
复制
"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,所以我查看了数组,看看用户是否在那里。如果是-跳过。

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

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

代码语言:javascript
复制
type Jobinteract @model {
  id: ID!
  user: User! @connection(name: "interactsuser")
  job: Job! @connection(name: "interactjob")
  decision: Int
  createdAt: String
  updatedAt: String
}

现在的问题是。如果我现在有表(Jobinteract)。我是不是也应该把它设为可搜索的?

然后我还有ElasticSearch格式的数据。但我如何才能将它们结合在一起呢?然后是来自不同索引的数据。

我在ES中读过hasChild。但是,如果这是正确的方式,你不知道它到底应该如何工作?!

我目前还在测试是否可以通过lambda访问ES,所以我会调用附近的所有工作,并亲自比较它们。但这可能不是最好的选择。从Elasticsearch从附近获取100个工作,将其与下表进行比较。如果还剩50个,把他们送到前台,如果没有,再取100个。用户喜欢的越多,这个调用持续的时间就越长。

EN

回答 1

Stack Overflow用户

发布于 2019-06-11 03:21:29

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

在编写本文时,@ separate指令将不同的@models存储在单独的索引中,因此您需要编写一个自定义解析器,将"Interaction“子记录放入指定用户何时与作业交互的相同索引中,然后您将需要更新ES索引映射,以便它使用连接数据类型,以便您可以使用hasChild查询。有关详细信息,请参阅https://www.elastic.co/guide/en/elasticsearch/reference/current/parent-join.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56430019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档