9

Elastic Searchのメモリ内インスタンスを実行し、検索JavaAPIを学習するための探索的コーディングを行っています。GETを使用してドキュメントをインデックスに送信して取得することはできますが、単純な検索クエリを実行しても結果が得られません。

// first, try a get request, to make sure there is something in the index
GetResponse results = client.prepareGet(INDEX_NAME, INDEX_TYPE, testID)
        .execute()
        .actionGet();
// this assertion succeeds, as we expect it to.
assertThat(results.getId()).isEqualTo(testID);

// next, try the simplest possible search
SearchResponse s1 = client.prepareSearch(INDEX_NAME).setQuery(matchAllQuery())
        .execute()
        .actionGet();
// this assertion fails. why? answer: when we have an in-memory node, we have to 
// manually call refresh on the indexing, after submitting a document.
assertThat(s1.getHits().totalHits()).isGreaterThanOrEqualTo(1);

いくつかのテストの後、問題はノードと関連するクライアント(メモリ内)をどのように設定しているかにあると思います。

@BeforeMethod
    public void setup() {
        // set up elastic search to run locally. since the transaction
        // log needs a filesystem, we can't run it as purely in memory,
        // but we can set the data directories into "target", so that maven will
        // clean up after the fact: http://bit.ly/OTN7Qf
        Settings settings = ImmutableSettings.settingsBuilder()
                .put("node.http.enabled", true)
                .put("path.logs","target/elasticsearch/logs")
                .put("path.data","target/elasticsearch/data")
                .put("gateway.type", "none")
                .put("index.store.type", "memory")
                .put("index.number_of_shards", 1)
                .put("index.number_of_replicas", 1).build();

        node = NodeBuilder.nodeBuilder().local(true).settings(settings).node();
        client = node.client();
    }
4

1 に答える 1

23

Elastic Search googleグループの誰かが、ここで私を助けてくれました。ドキュメントをメモリ内ノードに送信した後、インデックスを更新する必要があります。

        node.client().admin().indices().prepareRefresh().execute().actionGet();

refreshを呼び出すと、問題が修正されました。

于 2012-10-02T18:02:42.013 に答える