Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数据库中属性间的相似性_Java_Algorithm_Nearest Neighbor - Fatal编程技术网

Java 数据库中属性间的相似性

Java 数据库中属性间的相似性,java,algorithm,nearest-neighbor,Java,Algorithm,Nearest Neighbor,我正在为我的应用程序创建一个新的搜索系统。现在的想法是使用查询松弛,以便从数据库中获得更广泛的结果,然后计算它与用户的相关性。问题在于算法。我正在考虑使用类似最近邻算法的东西,但我有点不确定如何使用它 如何获得数据库中记录与用户搜索的相关性(以%为单位) 我需要在属性距离和类别中执行此操作。换句话说,当我查询DB时,距离乘以2,通过选择父类别放松类别 例如:如果用户搜索距离最远30公里的东西,类别是“足球”,我将从数据库中获得60公里的所有记录和“球类运动”(在一个树中,如:sports->fu

我正在为我的应用程序创建一个新的搜索系统。现在的想法是使用查询松弛,以便从数据库中获得更广泛的结果,然后计算它与用户的相关性。问题在于算法。我正在考虑使用类似最近邻算法的东西,但我有点不确定如何使用它

如何获得数据库中记录与用户搜索的相关性(以%为单位)

我需要在属性距离和类别中执行此操作。换句话说,当我查询DB时,距离乘以2,通过选择父类别放松类别

例如:如果用户搜索距离最远30公里的东西,类别是“足球”,我将从数据库中获得60公里的所有记录和“球类运动”(在一个树中,如:sports->fullContact->Ballsport->soccer,因此我将获得足球、橄榄球等运动)

还需要考虑到用户属性的权重来计算该百分比。如果用户认为类别比距离更重要,则在计算相关性时必须考虑到这一点

第3页的分类树和计算距离的公式示例如下:

如何将该公式应用于属性? 顺便说一句,我使用MongoDB,所以所有数据都在文档中,与其他表没有关系


谢谢

我首先假设,对于搜索结果,您使用的是经典关系数据库和表,其平面结构如下:

|类别ID |纬度|经度|父类别ID|

所以,基于父类别的放松类别可以是基于用户输入的类别的父节点的子节点的简单树搜索(假设您的树已经在内存中)。您可以在categories表上使用sql join,但根据我的经验,使用java的算法更好—更易于测试/重构,而且您可以获得各种各样的算法,具有预测的时间/空间复杂性。另一方面,Sqls可能会让您有点头疼,因为执行计划成本有时在不同的db提供程序之间会有很大的差异

如何根据距离和多类别匹配获得%与用户的相关性?如果用户输入了soccer,首先显示什么-football或ruby

好吧,这是一个非常好的问题,我不知道好的答案,但我要做的是以下一种方式使用谷歌搜索的现有数据: 假设用户输入了足球(球类运动的子项)

  • 将最高相关性分配给按距离排序的所有足球比赛(用户输入)
  • 根据单词ball sport(父类别)与子类别名称一起使用的频率,为相关类别分配相关性。
    • 对于“球类运动足球”,这将是谷歌搜索中的“599000000”结果
    • 对于“橄榄球运动”,谷歌搜索的结果将是“89200000
    • 基于以上内容,按距离排序显示所有足球比赛,然后显示所有足球比赛(谷歌排名第一),然后显示所有橄榄球比赛(谷歌排名第二)
谷歌搜索结果排名,你可以很容易地预先计算程序,或动态检索(我不会这样做,除非你计划经常改变类别动态)

作为用户,我对这个输出很满意,请告诉我您的想法:-)

编辑: 我读过这篇文章,在你们的例子中,相似性公式可以简化为计算两个单词之间的相似性

实现这一点的一种方法是为两个类别的单词gram获得谷歌排名(“足球橄榄球”将给你“199000000”,而“足球”将给你“441000000”)。看起来不错


为什么我如此痴迷于谷歌排名?这些家伙有无数的数据基于体育网站,文章和他们的数据相关的领域问题。如果是paper(Western Air Ltd.)-他们的数据特定于他们的内部域,他们必须使用他们的域来计算我们的相似性(如特征数量、每个特征的重要性权重等)

Hi!您是否想过为此使用存储过程?可能是一种方法,不是真的。请检查我的编辑。谢谢,我正在使用MongoDB,我的问题是计算属性之间距离的公式。我已经编辑了这个问题,请看一看。顺便说一句,谷歌搜索结果的方法确实非常好,订购结果:)谢谢