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”)它给了我一些结果,但我认为这是默认结果。我想搜索我想要的特定单词。
答案 0 :(得分:1)
问题在于搜索几乎是实时的,这意味着在索引文档以使其可用于搜索之后需要进行刷新。
默认情况下每秒刷新一次,但在测试中,您需要手动调用刷新以确保找到文档,或者切换到使用实时工作的get api,以确保文件存在,通过id获取它。
如果您添加刷新,您可以调用refresh api或将刷新标志添加到索引操作,以便在索引文档后进行刷新。请记住,这是测试时的好习惯,但在生产中,您的代码不应该手动调用刷新,只需每秒自动刷新一次。
答案 1 :(得分:0)
尝试添加
.setRefresh(true)
到你的client.prepareIndex电话