gpt4 book ai didi

database - 在数据库中查找相似的文档/记录

转载 作者:搜寻专家 更新时间:2023-10-30 23:27:46 25 4
gpt4 key购买 nike

我目前在 mongodb 中存储了大量记录,每条记录看起来都像这样:

{
"_id" : ObjectId("5c38d267b87d0a05d8cd4dc2"),
"tech" : "NodeJs",
"packagename" : "package-name",
"packageversion" : "0.0.1",
"total_loc" : 474,
"total_files" : 7,
"tecloc" : {
"JavaScript" : 316,
"Markdown" : 116,
"JSON" : 42
}
}

我想做的是根据例如具有大约 (+/-10%) total_loc 数量的记录或使用一些相同的技术 (tecloc) 来查找相似的数据记录。

我能否以某种方式通过针对 mongodb 的查询来执行此操作,或者是否有一种技术更适合我想要执行的操作?我可以重新生成数据并将其存储在弹性或某些图形数据库中。

谢谢

最佳答案

解决这个问题的一种可能性是使用 Elasticsearch。我并不是说这是您拥有的唯一解决方案。

在较高级别 - 您需要设置 Elasticsearch 并为您的数据编制索引。有多种实现的可能性:mongo-connector ,或 Logstash 和 JDBC input plugin甚至只是从 MongoDB 中转储数据并手动放置。做这项工作没有限制。

我最初建议的区别是通过将 { 替换为 [,并添加一些其他字段,使字段 tecloc - 多值字段对于代码行,例如:

   {
"tech": "NodeJs",
"packagename": "package-name",
"packageversion": "0.0.1",
"total_loc": 474,
"total_files": 7,
"tecloc": [
{
"name": "JavaScript",
"loc": 316
},
{
"name": "Markdown",
"loc": 116
},
{
"name": "JSON",
"loc": 42
}
]
}

此数据模型非常简单,显然有一些局限性,但您已经可以开始使用它并了解它与您的其他用例的匹配程度。稍后你应该发现 nested键入作为更正确地模拟您的数据的可能性之一。

关于您的确切搜索场景 - 您可以使用如下查询搜索此类文档:

{
"query": {
"bool": {
"should": [
{
"term": {
"tecloc.name.keyword": {
"value": "Java"
}
}
},
{
"term": {
"tecloc.name.keyword": {
"value": "Markdown"
}
}
}
],
"must": [
{"range": {
"total_loc": {
"gte": 426,
"lte": 521
}
}}
]
}
}
}

不幸的是,不支持 +-10% 的语法,所以这应该在客户端计算。

另一方面,我指定我们正在搜索应该具有 Java 或 Markdown 的文档,它们也会返回示例文档。在这种情况下,如果我的文档同时包含 Java Markdown,则该文档的分数会更高。

关于database - 在数据库中查找相似的文档/记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54164138/

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