Database 在数据库中查找类似的文档/记录
因此,我目前在mongodb中存储了相当多的记录,每个记录看起来都是这样的: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" : {
{
"_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的文档,这也会返回示例文档。在这种情况下,如果我的文档同时包含Java和Markdown,则此文档的分数将更高。因此,您希望搜索所有延迟total_loc va的文档lue 474+-10%,对吗?是的,我想添加额外的条款,例如,我想搜索每个文档的total_loc 474+-10%,并在tecloc数组中使用“JavaScript”、“Markdown”或“JSON”。理想情况下,按tecloc中的匹配数排序-因此包含所有三个“标记”的每个文档都位于顶部,以此类推。。。