使用Firebase,Elasticsearch和Flashlight匹配具有相似兴趣标签的用户

时间:2017-06-04 00:33:28

标签: firebase elasticsearch firebase-realtime-database flashlight

使用elasticsearch使用以下设置(或修改设置)使用标签匹配文档的最佳方法是什么?

我的用户在firebase数据库中,他们有相关的标签来定义他们的兴趣:

"users" : {
"bruce" : {
  "martial art" : "Jeet Kune Do",
  "name" : "Bruce Lee",
  "nick" : "Little Phoenix",
  "tags" : {
    "android" : true,
    "ios" : true
  }
},
"chan" : {
  "account_type" : "contractor",
  "martial art" : "Kung Fu",
  "name" : "Jackie Chan",
  "nick" : "Cannonball",
  "tags" : {
    "ios" : true
  }
},
"chuck" : {
  "martial art" : "Chun Kuk Do",
  "name" : "Carlos Ray Norris",
  "nick" : "Chuck"
}}

使用Flashlight + Firebase管理SDK我在Bonsai / heroku上保持最新的索引,据说可以帮助我匹配具有相似兴趣或相关产品的用户。

"firebase": {
"aliases": {},
"mappings": {
  "user": {
    "properties": {
      "name": {
        "type": "string"
      },
      "tags": {
        "properties": {
          "android": {
            "type": "boolean"
          },
          "ios": {
            "type": "boolean"
          }
        }
      }
    }
  }
}...

现在,我可以使用某些标签组合查询用户:

{
"query": {
"bool": {
  "must" : {

    "type" : {
        "value" : "user"
    }
  },
  "should": [
             {
                "term": {
                  "tags.ios": true
                }
              },

               {
                "term": {
                  "tags.android": true
                }
              }


   ],
    "minimum_should_match" : 1
}}}

这很棒,但我正在寻找的方法是:

  1. 鉴于用户ID,找到具有由_score订购的类似标签的其他用户。
  2. 除了使用标签的“用户”之外还有其他_type,例如产品,因此在共享某些标签时将产品与用户匹配也很棒。
  3. 我觉得因为我在弹性搜索方面是新手,所以我的目标是错误的。也许数据建模的方式?

    问题是firebase有点限制了这一点,例如我不能拥有数组,所以这使得标签建模有点奇怪,结尾甚至更奇怪的索引数据...也许一种方法可能是操纵数据之前将它插入索引?

0 个答案:

没有答案