elasticsearch,nosql,Database,Mongodb,elasticsearch,Nosql" /> elasticsearch,nosql,Database,Mongodb,elasticsearch,Nosql" />

Database 在数据库中查找类似的文档/记录

Database 在数据库中查找类似的文档/记录,database,mongodb,elasticsearch,nosql,Database,Mongodb,elasticsearch,Nosql,因此,我目前在mongodb中存储了相当多的记录,每个记录看起来都是这样的: { "_id" : ObjectId("5c38d267b87d0a05d8cd4dc2"), "tech" : "NodeJs", "packagename" : "package-name", "packageversion" : "0.0.1", "total_loc" : 474, "total_files" : 7, "tecloc" : {

因此,我目前在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
    }
}
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "tecloc.name.keyword": {
              "value": "Java"
            }
          }
        },
        {
          "term": {
            "tecloc.name.keyword": {
              "value": "Markdown"
            }
          }
        }
      ],
      "must": [
        {"range": {
          "total_loc": {
            "gte": 426,
            "lte": 521
          }
        }}
      ]
    }
  }
}
我想做的是根据记录找到类似的数据记录,例如,记录的总数约为(+/-10%)或使用一些相同的技术(tecloc)

我是否可以通过对mongodb的查询来实现这一点,或者是否有一种技术更适合我想要做的事情?我可以重新生成数据并将其存储在elastic或一些graph db中


谢谢:)

解决此问题的方法之一是使用Elasticsearch。我并不是说这是你唯一的解决办法

在高层,您需要设置Elasticsearch并为数据编制索引。有多种可能实现:,或日志存储,甚至只是从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
        }
      ]
    }
这个数据模型非常简单,显然有一些局限性,但您可以从它开始,看看它是否适合您的其他用例。稍后,您应该发现类型是更恰当地模拟数据的一种可能性

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

{
    "_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
    }
}
{
  "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的文档,这也会返回示例文档。在这种情况下,如果我的文档同时包含JavaMarkdown,则此文档的分数将更高。

因此,您希望搜索所有延迟total_loc va的文档lue 474+-10%,对吗?是的,我想添加额外的条款,例如,我想搜索每个文档的total_loc 474+-10%,并在tecloc数组中使用“JavaScript”、“Markdown”或“JSON”。理想情况下,按tecloc中的匹配数排序-因此包含所有三个“标记”的每个文档都位于顶部,以此类推。。。