2012-10-02 19 views
9

Bellek içi bir esnek arama örneğim var ve arama java API'sini öğrenmek için bazı keşif kodlamaları yapıyorum. Dizine belgeleri gönderebilir ve bunları GET kullanarak alabilirim, ancak basit bir arama sorgusunu denediğimde hiçbir sonuç alamıyorum.elasticsearch java API: matchAll arama sorgusu sonuçları döndürmüyor mu?

elastik arama google grubuna
@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(); 
    } 

cevap

22

Birisi yeterince nazikti:

// 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); 

Birkaç denemeden sonra, ben sorun benim Düğüm ve (bellekte) ilişkili istemci kuruyorum nasıl olduğunu düşünüyorum bana yardım et.

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

çağıran yenileme sorunu düzeltildi: bir bellek içi düğümüne bir belge gönderdikten sonra, ben endeksi yenilemeniz gerekir.

+0

Buradan gönderdiğiniz için teşekkürler! Beni kurtardı saatler! – Alebon

+0

Evet, ES neredeyse gerçek zamana yakın - geleneksel bir sql veritabanı gibi değil. – bradvido

İlgili konular