2015-01-13 5 views
4

elasticsearch에서 배열의 인덱스를 기준으로 쿼리/필터링을 수행하려면 어떻게합니까?배열 인덱스의 탄성 검색 쿼리

나는 문서를 같이 가지고있다 -

나는 LIN [0]는 "UP"인 경우 검색 할
PUT /edi832/record/1 
{ 
    "LIN": [ "UP", "123456789" ] 
} 

가와 LIN [1]가 존재한다.

감사합니다.

답변

3

이것은 해킹처럼 보일 수 있지만 확실히 작동합니다. 먼저 멀티 필드와 함께 토큰 카운트 유형을 적용하여 토큰 수를 필드로 캡처합니다. 그래서 매핑은 다음과 같을 것입니다 -

{ 
    "record" : { 
     "properties" : { 
      "LIN" : { 
       "type" : "string", 
       "fields" : { 
        "word_count": { 
         "type" : "token_count", 
         "store" : "yes", 
         "analyzer" : "standard" 
        } 
       } 
      } 
     } 
    } 
} 

LINK - 두 번째 필드가 존재하는 경우이 필드의 값이 2 보다 더 많거나 같은 경우 그래서

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html#token_count 검사로, 그 쉬운을 확인 다음으로 토큰 필터를 사용하여 "up"토큰이 0 위치에 있는지 확인할 수 있습니다.스크립트 필터를 사용하여이를 확인할 수 있습니다. 은 따라서 다음과 같은 쿼리가 작동합니다 -

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "range": { 
      "LIN.word_count": { 
      "gte": 2 
      } 
     } 
     }, 
     "filter": { 
     "script": { 
      "script": "for(pos : _index['LIN'].get('up',_POSITIONS)){ if(pos.position == 0) { return true}};return false;" 
     } 
     } 
    } 
    } 
} 

고급 스크립팅 - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-advanced-scripting.html

스크립트 필터 - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-script-filter.html

+0

이 좋아 보인다. 그러나 게시물 작성자가 색인의 매핑을 변경하는 데 아무런 문제가 없다면 접근 방식에 bool 쿼리를 더한 것이 더 효율적이라고 말할 수 있습니다. –

+0

추천 한 접근 방식에서 '위로'토큰이 먼저 오는 것을 어떻게 확인할 수 있습니까? –

+0

고마워요 @Vineeth Mohan. 나는이 대답을 받아 들였다. 이것에 대한 충분한 조언을 제공합니다. – Thanigs