来自2个文档

时间:2017-01-12 14:51:54

标签: elasticsearch

我是Elasticsearch的新手,我需要执行一个复杂的查询,但我需要一些帮助。

这是我的用例:

我想每天为每位用户推荐一个新的地方。 但是:

  • 这个地方必须在本周开放
  • 所选地点必须靠近用户(较近的地方得分较高)
  • 该地方不应该是用户已经/建议的最后10个地方之一(如果用户在过去10次访问中已经访问过某个地方,这个地方应该得分较低)

我的第一个猜测是有两种文件类型如下:

user_history

  • user_id
  • place_id
  • date

地方

  • place_id
  • opening_days(地点开放的工作日数组)
  • location地方的地理位置

给定位置为[lat, lon]且标识为user_1的用户,执行哪些搜索查询以检索按分数排序的X位置? (更好的分数靠近用户,而不是用户已经在最后10个位置)。

此查询似乎是基本的,但我无法弄清楚如何将user_historyplace中的数据“混合”到我想要的place

但这不是全部!

使用此查询,如果我想为每个用户归属一个地方,我需要3个步骤:

  • 检索所有用户(及其职位)
  • 为每个用户,搜索最佳位置
  • 我有了这个地方后,将其添加到user_history

这似乎非常耗时。是否可以使用较少的Elasticsearch查询来简化它?

例如,有这样的事情:

  • 为每个用户检索他最好的位置(使用1个查询,搜索所有用户并找到最佳位置)
  • 将地点添加到历史记录

或更好的事件:

  • 为每个用户检索他最好的位置并将其添加到历史记录中(使用1个查询,执行上述所有3个任务)

我不知道是否可以创建复杂的查询。这就是为什么我需要你的帮助来告诉我它是否可能以及如何实现。

0 个答案:

没有答案