【问题标题】:Set json string custom query to an elastic search request, java RestHighLevelClient将json字符串自定义查询设置为弹性搜索请求,java RestHighLevelClient
【发布时间】:2022-01-01 02:42:45
【问题描述】:

我正在使用 RestHighLevelClient,但遇到了一些麻烦。

从前端,我会收到一个这样的 json 字符串:

{"query":{"term":{"something.keyword":"something"}}} 

我需要将该字符串添加到 SearchRequest,或者更好的是,从上面的 json 创建一个 SearchRequest

如何在不创建解析器并以编程方式创建 QueryBuilder 以添加到 searchRequest 的情况下做到这一点?

编辑: 我已经尝试过包装查询,但是执行了这个查询:

{
  "query": {
    "wrapper": {
      "query": "eyJxdWVyeSI6eyJ0ZXJtIjp7ImV2ZW50LmtpbmQua2V5d29yZCI6ImV2ZW50In19fSA="
    }
  }
}

我有这样的回应:

{
  "error" : {
    "root_cause" : [
      {
        "type" : "parsing_exception",
        "reason" : "unknown query [query]",
        "line" : 1,
        "col" : 10
      }
    ],
    "type" : "parsing_exception",
    "reason" : "unknown query [query]",
    "line" : 1,
    "col" : 10,
    "caused_by" : {
      "type" : "named_object_not_found_exception",
      "reason" : "[1:10] unknown field [query]"
    }
  },
  "status" : 400
}

编辑 2:

抱歉,包装器工作得非常完美!我不得不从字符串中删除“查询”,这是我的错。

【问题讨论】:

标签: java elasticsearch


【解决方案1】:

正如 Val 所建议的,您可以这样编写 SearchRequest:

SearchRequest searchRequest = new SearchRequest("indexName");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().query(QueryBuilders.wrapperQuery("your json goes here"));
searchRequest.source(searchSourceBuilder);

【讨论】:

  • 使用包装我有一些错误:查询:字符串查询 = "{\"query\":{\"term\":{\"something.kind.keyword\":\"something\ “}}}”响应:{“错误”:{“root_cause”:[{“类型”:“解析异常”,“原因”:“未知查询[查询]”,“行”:1,“col”:10 } ],“type”:“parsing_exception”,“reason”:“未知查询 [query]”,“line”:1,“col”:10,“caused_by”:{“type”:“named_object_not_found_exception”,“reason " : "[1:10] 未知字段 [query]" } }, "status" : 400 }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 2020-10-14
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多