Elasticsearch:匹配查询返回错误的结果(Java API)

时间:2015-03-16 14:14:12

标签: elasticsearch java-api

我遇到以下问题:执行此命令时

curl -XGET "localhost:9200/customer/external/_search?pretty" -d @json.txt

json.txt看起来像这样:

{ "query":{ "match":{ "_id":"1" } } }

我得到以下输出(我缩短了它):

{
   "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "customer",
      "_type" : "external",
      "_id" : "1",
      "_score" : 1.0,
      "_source":{
        "name":"Jan",
        "age":99,
        "address":{
            "city":"KKKKKKK",
            "zip":"xxxx"
        }
      }
    } ]
}

现在我正在尝试使用Java API做同样的事情,但我无法完成它(我尝试了8种不同的方法)。我总是0次点击。在代码中,我现在将源文件直接设置为字符串作为源,但正如您所看到的,我也尝试使用XContentBuilderWrapperQueryBuilder版本,但没有任何效果。这是我的代码:

public void processQuery(String filePath, String index, String... types) {
    String source = convertFileToString(filePath);

    //XContentBuilder query = null;
    //try {
    //  JSONObject json = new JSONObject(source.trim());
    //  query = convertJsonToXContentBuilder(json);
    //} catch (...) {...}

    //WrapperQueryBuilder query = QueryBuilders.wrapperQuery(source);

    SearchResponse response = client.prepareSearch(index)
            .setSource(source)
    //      .setQuery(query)
            .setTypes(types)
            .get();
}

作为回应我根本没有任何点击:

{
  "hits" : {
    "total" : 0,
    "max_score" : null,
    "hits" : [ ]
  }
}

我希望有人对这个原因有所了解我已经厌倦了试图寻找解决方案:/

最好的regardes, 扬

2 个答案:

答案 0 :(得分:2)

Sry for the new" answer"但我无法编辑我的问题。所以我想出了什么,但我现在不知道如何进步。当我在调试模式下运行时它工作正常(我在JUnit测试中使用它)。所以我想也许我太早关闭连接所以我添加了Thread.sleep(5000)但它仍然失败。它仅适用于调试模式:/如果重要的是我使用TransportClient

有点尴尬,但我希望有人知道原因......

干杯, 扬

编辑:

问题解决了:因为我在单元测试中使用它并且每次都清空并重新加载数据库的内容,所以在执行请求时内容还没有准备好。我现在正在等待状态为绿色,然后开始测试。

答案 1 :(得分:0)

您应该使用POST进行搜索。 使用GET将忽略搜索主体并返回所有结果。

curl -XPOST "localhost:9200/customer/external/_search?pretty" -d @json.txt