gpt4 book ai didi

mongodb - 如何在文档字段 MongoDB 中找到相似性?

转载 作者:可可西里 更新时间:2023-11-01 09:10:36 25 4
gpt4 key购买 nike

给定如下所示的数据:

{'_id': 'foobar1',
'about': 'similarity in comparison',
'categories': ['one', 'two', 'three']}
{'_id': 'foobar2',
'about': 'perfect similarity in comparison',
'categories': ['one']}
{'_id': 'foobar3',
'about': 'partial similarity',
'categories': ['one', 'two']}
{'_id': 'foobar4',
'about': 'none',
'categories': ['one', 'two']}

我想找到一种方法来获得单个项目与集合中所有其他项目之间的相似性,然后按相似性最高的顺序返回它们。相似度是基于共同单词的数量,已经有一个函数int similar(String one, String two)

例如:如果我想要foobar1about 字段的相似度列表,它会返回

[{'_id': 'foobar2'}, {'_id': 'foobar3'}, {'_id': 'foobar4'}]

我正在用 morphia 做这件事,但只要使用 mongoDB 实现,我就可以解决剩下的问题

最佳答案

如果您需要计算 about 字段的文本相似度,实现此目的的一种方法是使用 text index .

例如(在 mongo shell 中),如果您在 about 字段上创建文本索引:

db.collection.createIndex({about: 'text'})

您可以执行如下查询(示例取自 https://docs.mongodb.com/manual/reference/operator/query/text/#sort-by-text-search-score ):

db.collection.find({$text: {$search: 'similarity in comparison'}}, {score: {$meta: 'textScore'}}).sort({score: {$meta: 'textScore'}})

对于您的示例文档,查询应返回如下内容:

{
"_id": "foobar1",
"about": "similarity in comparison",
"score": 1.5
}
{
"_id": "foobar2",
"about": "perfect similarity in comparison",
"score": 1.3333333333333333
}
{
"_id": "foobar3",
"about": "partial similarity",
"score": 0.75
}

按相似度分数递减排序。请注意,与您的示例结果不同,文档 foobar4 不会返回,因为 foobar4 中不存在任何查询词。

文本索引在 MongoDB 中被认为是一种特殊类型的索引,因此对其使用有一些特定的规则。详情请见:

关于mongodb - 如何在文档字段 MongoDB 中找到相似性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38365414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com