如何使用Elasticsearch进行索引和搜索

时间:2014-01-22 21:06:04

标签: java api indexing elasticsearch response

IndexResponse response = client.prepareIndex("face", "book","1")
                .setSource(jsonBuilder()
                        .startObject()
                        .field("name", "kimchy")
                        .field("postDate", "2010-03-01")
                        .field("message", "trying out Elastic Search")
                        .endObject()
                )
                .execute()
                .actionGet();
String index = response.getIndex(); // index : "face"

SearchResponse r = client.prepareSearch("face")
    .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
    .setQuery(QueryBuilders.termQuery("name","kimchy"))
    .setFrom(0).setSize(60).setExplain(true)
    .execute()
    .actionGet();
      System.out.println(r);
      SearchHit[] hits = r.getHits().getHits();
      System.out.println(hits.length); // 0 Hits
      for (SearchHit searchHit : hits) {
      // no hits no data
      }

我该如何解决这个问题,问题出在哪里?我的每次尝试都给出了0次点击。我尝试了一切,但我无法解决。如果有人帮我修复此代码,我会很高兴。如果我写了prepareIndex(“twitter”,“tweet”,“1”)和client.prepareIndex (“twitter”,“tweet”,“1”)它给了我一些结果,但我认为这是默认结果。我想搜索我想要的特定单词。

2 个答案:

答案 0 :(得分:1)

问题在于搜索几乎是实时的,这意味着在索引文档以使其可用于搜索之后需要进行刷新。

默认情况下每秒刷新一次,但在测试中,您需要手动调用刷新以确保找到文档,或者切换到使用实时工作的get api,以确保文件存在,通过id获取它。

如果您添加刷新,您可以调用refresh api或将刷新标志添加到索引操作,以便在索引文档后进行刷新。请记住,这是测试时的好习惯,但在生产中,您的代码不应该手动调用刷新,只需每秒自动刷新一次。

答案 1 :(得分:0)

尝试添加

.setRefresh(true)

到你的client.prepareIndex电话