【问题标题】:how do i issue a raw query using the java client in elasticsearch?如何在 elasticsearch 中使用 java 客户端发出原始查询?
【发布时间】:2014-06-11 08:17:00
【问题描述】:

我在Random order & pagination Elasticsearch 找到了一篇关于如何从 ElasticSearch 获取随机记录的 SO 帖子。

curl -XGET 'localhost:9200/_search' -d '{
  "query": {
    "function_score": {
      "query": {
        "match_all": {}
      },
      "random_score": {}
    }
  }
}'

我已将此文件存储为资源并按如下方式加载。

String query = ResourceUtil.getResource("path/to/json/query");
SearchRequestBuilder srb = getSafeClient()
    .prepareSearch("myindex")
    .setTypes("mytype")
    .setQuery(query);
_logger.debug("search = {}", srb.toString());

但是,我不断遇到解析失败。当我记录 SearchRequestBuilder 时,我注意到逗号不断被添加如下。

search = {,
  "query": 
    "function_score": {
      "query": {
        "match_all": {}
      },
      "random_score": {}
    }
}

我看到的 QueryParsingException 如下所示。

QueryParsingException[[myindex] [_na] query malformed, must start with start_object

关于我做错了什么有什么想法吗?是否可以纯粹使用 Java 客户端 API 来表达随机查询?我正在使用 ElasticSearch v1.1。

【问题讨论】:

    标签: java elasticsearch


    【解决方案1】:

    没关系,我修改并找到了如何以编程方式表达查询。如果有人感兴趣,代码 sn-p 如下。

    FunctionScoreQueryBuilder fsqb = new FunctionScoreQueryBuilder(QueryBuilders.matchAllQuery());
    fsqb.add(ScoreFunctionBuilders.randomFunction((new Date()).getTime()));
    SearchRequestBuilder srb = getSafeClient()
     .prepareSearch("myindex")
     .setTypes("mytype")
     .setQuery(fsqb);
    

    【讨论】:

      猜你喜欢
      • 2011-12-12
      • 2017-12-13
      • 2020-04-10
      • 2016-07-20
      • 1970-01-01
      • 2020-03-14
      • 2021-01-03
      • 2014-09-02
      • 2014-09-13
      相关资源
      最近更新 更多