2014-12-15 30 views
6

Arama sorgumda eksik veya hatalı endeksler olduğunu bilmediğim esnek aramayı belirtmenin bir yolu olup olmadığını bilmek istiyorum. Başka bir deyişle, 7 farklı indeksi sorgulamaya çalışan bir sorgum var ama bunlardan biri koşullara bağlı olarak eksik olabilir. Bilmek istediğim, söyleyecek bir yol varsa, bozuk olanı unutun ve bana diğer 6 endeksin sonuçlarını almalı mıyım?Elastik aramalarda eksik endeksler

SearchRequestBuilder builder = elasticsearchClient.getClient().prepareSearch(indices) 
      .setQuery(Query.buildQueryFrom(term1, term2)) 
      .addAggregation(AggregationBuilders.terms('term') 
             .field('field') 
             .shardSize(shardSize) 
             .size(size) 
             .minDocCount(minCount)); 

Yukarıdaki soruyu örnek olarak bulabilirsiniz.

cevap

1

Index Aliases kullanmayı denediniz mi?

Tek takma adlara atıfta bulunmak yerine, tek bir dizin değeri belirtebilirsiniz. Bunun arkasında birkaç dizin olabilir. İşte

ben takma adına iki indeksleri eklemeyi ve bir kırık/eksik çıkarmadan ediyorum:

curl -XPOST 'http://localhost:9200/_aliases' -d ' 
{ 
    "actions" : [ 
     { "remove" : { "index" : "bad-index", "alias" : "alias-index" } }, 
     { "add" : { "index" : "good-index1", "alias" : "alias-index" } }, 
     { "add" : { "index" : "good-index2", "alias" : "alias-index" } } 
    ] 
}' 
+0

Maalesef Olly, tam olarak ne demek istediğini anlayamadım: Burada

Aradığınız davranışı vermelidir örnek sorgu değiştirilmiş versiyonu. Bir sorguyu 7 farklı indeksle birleştirmek için bir takma ad kullanabilirim, ancak bunu zaten yapabilirim. Yapmak istediğim, başarısız olursa bu endekslerden birini göz ardı etme yeteneğidir. – ralzaul

+0

Bir endeks hiçbir sebeple başarısız olmazdı, onu kırmak için bir şeyler yapmış olmanız gerekir (ör. Eski verileri içerir). Bu durumda, hatalı dizini diğer addan tanımlayıp kaldırabilirsiniz. –

+0

no temelde herhangi bir hata/kilitlenme/yanlış davranış olmadan dizinim oluşturulmayabilir. Yani bir takma ad oluşturup takma addaki tek tek endekslerin durumunu kontrol etmemi mi söylüyorsun? – ralzaul

6

multi index syntax parçasıdır ignore_unavailable seçeneği, bir göz atın. Bu, en az 1.3 sürümünden beri mevcuttur ve arama yaparken (diğer çoklu dizin işlemleri arasında) eksik veya kapalı dizinleri göz ardı etmenize izin verir.

Java API'sinde IndicesOptions tarafından açığa çıkar. Kaynak kodunda gezinirken, örnekte kullanılan SearchRequestBuilder öğesinde bir setIndicesOptions() yöntemi bulunduğunu gördüm. IndicesOptions örneğini iletmeniz gerekir.

İstediğiniz özel seçeneklerle bir örnek oluşturmak için, İndicesOptions sınıfında çeşitli statik fabrika yöntemleri vardır. Muhtemelen setleri daha uygun lenientExpandOpen() fabrika yöntemini (veya kaldırılmış versiyonunu lenient(), sürümüne bağlı) kullanılarak yararlanacak = true ignore_unavailable, allow_no_indices = true ve expand_wildcards = açık.

SearchRequestBuilder builder = elasticsearchClient.getClient().prepareSearch(indices) 
     .setQuery(Query.buildQueryFrom(term1, term2)) 
     .addAggregation(AggregationBuilders.terms('term') 
            .field('field') 
            .shardSize(shardSize) 
            .size(size) 
            .minDocCount(minCount)) 
     .setIndicesOptions(IndicesOptions.lenientExpandOpen()); 
İlgili konular