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

标签 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”)它给了我一些结果,但我认为这是默认结果。我想搜索我想要的特定单词。

最佳答案

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

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

如果添加刷新,可以调用刷新 API 或在索引操作中添加刷新标志,以便在文档建立索引后进行刷新。请记住,这是测试时的良好做法,但在生产中,您的代码不应手动调用刷新,只需让自动刷新每秒启动即可。

关于java - 如何使用 Elasticsearch 进行索引和搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21293985/

相关文章:

java - Hibernate 5.2,如何选择具有给定列值的行?

Java交集集合

javascript - 通过java API从orientdb调用JS函数

jquery - 如何使用 jQuery 获取表列索引?

java - 在 Java 中替换字符串忽略大小写

java - 更改图像大小

javascript - 如何判断 Google Street View Image API 是否返回 "Sorry, we have no imagery here"(is.NULL)结果?

.net - 无法使用 Azure DevOps API 获取最新版本

sql - 有什么办法可以用范围谓词停止索引搜索?

mysql - 是否可以让 MySQL 使用 1 DESC,2 ASC 的 ORDER 索引?