Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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
Javascript 弹性搜索中的查询_Javascript_Node.js_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Javascript,Node.js,elasticsearch" /> elasticsearch,Javascript,Node.js,elasticsearch" />

Javascript 弹性搜索中的查询

Javascript 弹性搜索中的查询,javascript,node.js,elasticsearch,Javascript,Node.js,elasticsearch,我不熟悉elasticsearch。我有两个文档,分别是JarFileData和ClassData。我已经用jarFileId字段链接了这两个文档 这是类数据 { "_id" : ObjectId("59881021e950041f0c6fa1fa"), "ClassName" : "Exception", "jarFileId" : "JAR-0001", "dependencies" : [ { "dependedntClass" : "java/lang/Runt

我不熟悉elasticsearch。我有两个文档,分别是JarFileData和ClassData。我已经用jarFileId字段链接了这两个文档

这是类数据

{
"_id" : ObjectId("59881021e950041f0c6fa1fa"),
"ClassName" : "Exception",
"jarFileId" : "JAR-0001",
"dependencies" : [ 
    {
        "dependedntClass" : "java/lang/RuntimeException",
        "methodSignature" : "<init>"
    }, 
    {
    {
        "dependedntClass" : "java/awt/EventQueue",
        "methodSignature" : "isDispatchThread"
    }, 
    {
        "dependedntClass" : "Exception",
        "methodSignature" : "setStackTrace"
    }
]
}
我想给出一个目录,获取该目录中的所有jar文件,并使用它查找这些jar文件的ClassData类型中的依赖类

这是我在node.js中用于检索给定目录的jarFileData类型的函数

const test = function test() {
let body = {
  size: 20,
  from: 0,
  {
   query: {
     match: {
       directory: 'C:\\Projects\\Test\\Application'
        }
      }
    }
  };
}
我试图使用上面查询的结果集来查询classData类型。
我被困在这一部分很长时间,不知道如何在弹性搜索。任何帮助都将不胜感激

在继续之前,需要完成两个步骤:

  • jarFileId
    dependedntClass
    字段应映射为
    关键字
    类型(如果这是一个问题,您可以使用
    关键字
    类型,并在查询中使用它们)
  • 依赖项
    应为
查看您的数据,这两类文档之间的连接元素是
jarFileId
field。如果您的现有查询为您提供了结果,例如此JAR列表:

{[{"jarFileId": "JAR-0001"},{"jarFileId": "JAR-0002"}]}
有了这些信息,您可以使用以下查询:

{
   "size":0,
   "query":{
      "constant_score":{
         "filter":{
            "terms":{ "jarFileId":["JAR-0001","JAR-0002"] }
         }
      }
   },
   "aggs":{
      "filtered":{
         "filter":{
            "constant_score":{
               "filter":{
                   "terms":{ "jarFileId":["JAR-0001","JAR-0002"] }
               }
            }
         },
         "aggs":{
            "dependent":{
               "nested":{
                  "path":"dependencies"
               },
               "aggs":{
                  "classes":{
                     "terms":{
                        "field":"dependencies.dependedntClass"
                     }
                  }
               }
            }
         }
      }
   }
}
因此,您将获得:

{
    ...,
    "aggregations": {
        "filtered": {
            "doc_count": 1,
            "dependent": {
                "doc_count": 3,
                "classes": {
                    "doc_count_error_upper_bound": 0,
                    "sum_other_doc_count": 0,
                    "buckets": [
                        {
                            "key": "core/internal/TrackingEventQueue$TrackingException",
                            "doc_count": 1
                        },
                        {
                            "key": "java/awt/EventQueue",
                            "doc_count": 1
                        },
                        {
                            "key": "java/lang/RuntimeException",
                            "doc_count": 1
                        }
                    ]
                }
            }
        }
    }
}

对于您当前的模型,不可能只使用一个查询就完成此操作-elsticsearch没有连接机制。单个文档应具有所有必要的信息,以便elasticsearch能够确定它是否与查询匹配。这是很好的描述。因此,要么你选择(与链接下的例子类似),要么搜索性能是这里的核心问题。我知道唯一的内置“连接机制”是,但它只允许在
id
字段上操作。

您尝试了什么?还可能注意到,这里的mongodb查询尝试实际上是从“shell”运行的。您的elasticsearch查询需要从您想要在其中实现的实际语言环境中运行。所以它至少可以帮助你展示你在尝试什么,这样你的问题就可以在你使用的实际环境中得到回答。这将不是mongodb shell。我正在尝试使用node.js查询弹性搜索。我已经尝试过简单的查询,并且成功了,但是我不能做我需要做的复杂的查询。是的,我们可以阅读。您被要求提供的是“一些代码,显示您试图这样做”。如果没有它,这将成为一个“为我编写代码”的问题,许多人将选择忽略这个问题。显示一个“尝试”,人们通常很乐意在“更正/使用”等方面提供帮助。非常感谢,问题是我想在第二个查询中使用第一个查询的结果集。我已经设法分开做了,就像你在上面做的那样。但是我无法在第二个查询中使用第一个查询的结果集。再次感谢你。这就是我一直在寻找的,我会尝试更新我的模型并做到这一点。非常感谢你。
{
    ...,
    "aggregations": {
        "filtered": {
            "doc_count": 1,
            "dependent": {
                "doc_count": 3,
                "classes": {
                    "doc_count_error_upper_bound": 0,
                    "sum_other_doc_count": 0,
                    "buckets": [
                        {
                            "key": "core/internal/TrackingEventQueue$TrackingException",
                            "doc_count": 1
                        },
                        {
                            "key": "java/awt/EventQueue",
                            "doc_count": 1
                        },
                        {
                            "key": "java/lang/RuntimeException",
                            "doc_count": 1
                        }
                    ]
                }
            }
        }
    }
}