Javascript 弹性搜索中的查询
我不熟悉elasticsearch。我有两个文档,分别是JarFileData和ClassData。我已经用jarFileId字段链接了这两个文档 这是类数据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
{
"_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
}
]
}
}
}
}
}