2014-12-15 4 views
6

탄성 검색에 지정하는 방법이 있는지 알고 싶습니다. 내 검색 쿼리에서 누락되거나 잘못된 색인이 생길 염려가 없습니다. 다른 말로하면 나는 7 가지 다른 인덱스를 쿼리하려고하지만 그 중 하나가 상황에 따라 누락 될 수있는 쿼리가 있습니다. 제가 알고 싶은 것은 말하기위한 방법이 있다면, 깨진 것을 잊어 버리고 다른 6 가지 지표의 결과를 나에게 줄 수 있다는 것입니다.탄성 검색 처리 누락 색인

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

위 쿼리를 예로들 수 있습니다.

답변

1

Index Aliases을 사용해 보셨습니까?

개별 별칭을 참조하는 대신 단일 색인 값을 지정할 수 있습니다. 이것 뒤에 몇 가지 인덱스가있을 수 있습니다. 여기

나는 별명이 인덱스를 추가 한 깨진/누락을 제거 해요 :

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

죄송 올리가, 정확히 무슨 뜻인지 이해할 수 없었다 : 여기

당신이 찾고있는 동작을 제공한다 예를 들어 쿼리의 수정 된 버전입니다. 별칭을 사용하여 7 개의 다른 인덱스에 대한 쿼리를 결합 할 수 있지만 이미 수행 할 수 있습니다. 내가 원하는 것은 실패 할 경우 그 인덱스 중 하나를 무시하는 능력입니다. – ralzaul

+0

색인은 아무런 이유없이 실패하지 않을 것입니다. 예를 들어 오래된 데이터가 포함 된 등의 이유로 색인을 작성해야합니다. 이 경우 별명에서 실패한 색인을 식별하고 제거합니다. –

+0

기본적으로 오류/충돌/오작동이 없어도 내 색인이 생성되지 않을 수 있습니다. 따라서 별칭을 만들고 별칭에있는 개별 색인의 상태를 확인하여 제거할지 여부를 알려주고 있습니까? – ralzaul

6

multi index syntax의 일부입니다 ignore_unavailable 옵션을 살펴보십시오. 이 기능은 적어도 버전 1.3부터 ​​사용 가능하며 검색을 수행 할 때 누락되거나 닫힌 색인을 무시할 수 있습니다 (다른 색인 작업 중).

Java API에서 IndicesOptions에 의해 노출됩니다. 소스 코드를 탐색하면서 예제에 사용 된 SearchRequestBuilder에 setIndicesOptions() 메서드가 있음을 발견했습니다. 인스턴스를 IndicesOptions으로 전달해야합니다.

특정 원하는 옵션으로 인스턴스를 작성하기 위해 IndicesOptions 클래스에는 다양한 정적 팩토리 메소드가 있습니다. 당신은 아마 설정하는 편리한 lenientExpandOpen() 팩토리 메소드 (또는 사용되지 않는 버전 lenient(), 버전에 따라)를 사용하여 혜택을 누릴 것입니다 진정한 = ignore_unavailable, allow_no_indices = 사실expand_wildcards = 열립니다.

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