首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Elasticsearch Node.js客户端抛出parsing_exception:[parsing_exception]原因:未知查询[查询]

Elasticsearch Node.js客户端抛出parsing_exception:[parsing_exception]原因:未知查询[查询]
EN

Stack Overflow用户
提问于 2022-08-03 00:38:06
回答 1查看 118关注 0票数 0

我正在尝试开发一个scroll例程,以便使用Node.js (特别是@elastic/elasticsearch版本8.2.1 )处理存储在Elasticsearch中的一些元素。

到目前为止,这就是我所拥有的:

代码语言:javascript
运行
复制
async function* scrollSearch(query) {
  let response = await client.search({
    index: "my.elasticsearch.index",
    query: JSON.parse(query),
    scroll: "1m",
    size: 100,
    // sort: [{ modification_date: "desc", }],
    // track_total_hits: true,
  });
  while (true) {
    const sourceHits = response.hits.hits;
    if (sourceHits.length === 0) {
      break;
    }
    for (const hit of sourceHits) {
      yield hit;
    }
    if (!response._scroll_id) {
      break;
    }
    response = await client.scroll({
      scroll_id: response._scroll_id,
      scroll: "10s",
    });
  }
}

目前我只是在调试这个函数,所以我直接调用了前面的函数:

代码语言:javascript
运行
复制
const query = `
  {
    "query": {
      "bool": {
        "must": [
          {
            "match": {
              "status": "THE_STATUS"
            }
          },
          {
            "exists": {
              "field": "object1.field1"
            }
          },
          {
            "exists": {
              "field": "object2.field1"
            }
          },
          {
            "exists": {
              "field": "object2.field2"
            }
          },
          {
            "exists": {
              "field": "object3.field1"
            }
          },
          {
            "exists": {
              "field": "object3.field2"
            }
          },
          {
            "exists": {
              "field": "object3.field3"
            }
          }
        ]
      }
    }
  }
`;
for await (const hit of scrollSearch(query)) {
  console.log(hit._source);
}

在这个查询中,我总是得到以下错误:

代码语言:javascript
运行
复制
 ResponseError: parsing_exception: [parsing_exception] Reason: unknown query [query]
  at SniffingTransport.request (node_modules/@elastic/transport/lib/Transport.js:476:27)
  at processTicksAndRejections (node:internal/process/task_queues:96:5)
  at async Client.SearchApi [as search] (node_modules/@elastic/elasticsearch/lib/api/api/search.js:65:12)
  at async scrollSearch (file:///Users/x80486/Workshop/debug-tool/src/elasticsearch.service.js:15:18)
  at async Context.<anonymous> (file:///Users/x80486/Workshop/debug-tool/test/my.test.js:132:22)

另一方面,如果我在Dev Tools接口中使用完全相同的查询,我将得到预期的结果:

代码语言:javascript
运行
复制
POST my.elasticsearch.index/_search?scroll=1m
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "status": "THE_STATUS"
          }
        },
        {
          "exists": {
            "field": "object1.field1"
          }
        },
        {
          "exists": {
            "field": "object2.field1"
          }
        },
        {
          "exists": {
            "field": "object2.field2"
          }
        },
        {
          "exists": {
            "field": "object3.field1"
          }
        },
        {
          "exists": {
            "field": "object3.field2"
          }
        },
        {
          "exists": {
            "field": "object3.field3"
          }
        }
      ]
    }
  }
}
代码语言:javascript
运行
复制
{
  "_scroll_id" : "the scroll id value",
  "took" : 266,
  "timed_out" : false,
  "_shards" : {
    "total" : 12,
    "successful" : 12,
    "skipped" : 0,
    "failed" : 0
  },
  ...
}

是否有一种方法可以知道Node.js客户端不理解查询的哪一部分,或者一般情况下无法验证这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-03 00:50:50

我只需要删除query对象/段。它必须是这样的:

代码语言:javascript
运行
复制
{
  "bool": {
    "must": [
      {
        "match": {
          "status": "THE_STATUS"
        }
      },
      {
        "exists": {
          "field": "object1.field1"
        }
      },
      {
        "exists": {
          "field": "object2.field1"
        }
      },
      {
        "exists": {
          "field": "object2.field2"
        }
      },
      {
        "exists": {
          "field": "object3.field1"
        }
      },
      {
        "exists": {
          "field": "object3.field2"
        }
      },
      {
        "exists": {
          "field": "object3.field3"
        }
      }
    ]
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73215152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档