我有一个应用程序,可让用户在平台上执行搜索。我有一个MongoDB数据库,其中有一个集合,用于存储所有用户的所有搜索。
搜索系统使用户可以选择最少一个过滤器和最多六个过滤器。然后,用户编写要使用的标签。
在用户选择了所有过滤器并编写了所有标签之后,我将该搜索查询保存到MongoDB集合中。我存储搜索的架构如下:
var savedSearches = new Schema({
filterA: { type : Array, default: [] },
filterB: { type : Array, default: [] },
filterC: { type : Array, default: [] },
filterD: { type : Array, default: [] },
filterE: { type : Array, default: [] },
filterF: { type : Array, default: [] },
userCountry: { type : String, default: [] },
datetime: { type : Date, default: Date.now }
});
例如:“用户A”使用过滤器A,B和D进行搜索。用户在过滤器A中写入标签“ alpha”,“ beta”和“ charlie”;在过滤器B中写入标签“ delta”,“ omega”和“ juliet”;然后在过滤器D中写入标签“ omega”,“ zulu”和“ roger”。
那么我在Mongo上发送的文档如下:
{
filterA: ["alpha","beta","charlie"],
filterB: ["delta","omega","juliet"],
filterC: [],
filterD: ["omega","zulu","roger"],
filterE: [],
filterF: [],
userCountry: "Andorra",
datetime: "2018-11-27T08:32:56.434Z"
}
我想对用户最相似的搜索进行分组,因此,如果“用户A”执行的搜索与“用户B”执行的搜索类似,则这两个搜索将位于同一组(集群)上。然后,我想使用这些组向用户建议类似的搜索。
这个想法是要建立一个统计聚类引擎,以便将这些类似的搜索分组到一个“组”中,但是我不知道如何开始。我尝试了汇总查询,但它们不满足我的要求。
我也尝试检查k-means算法,但不适用于分类数据。
关于如何执行此群集的任何想法?也许使用MCA,然后使用返回的值进行聚类?
谢谢。