2016-12-28 1 views
0

매핑을 배열 값과 일치하는 필터, 내가 어디에 "애니메이션"입력 것이라고 - 그것은 나를 장르로 애니메이션을 가지고있는 모든 항목을 반환합니다. 내가 "인덱스"내 데이터베이스를 매핑하고 둘 필요가 볼보다 내가 읽을 때,Elasticsearch 필터는 분석 인덱스의 필터를 만들려고 노력 메신저 필드

GET /test/_search 
{ 
"query": { 
    "bool": { 
    "filter": { 
     "terms": { 
     "genres": [ 
      "Animation", 
      "History" 
      ] 

     } 
     } 
    } 
    } 
} 
} 

이 항목이없는 결과 : - 다음은 반환 "not_analyzed"

용어를 사용하여 시도 일부 항목.

그러나, 나는 이런 식으로 뭔가를 사용하여 필터를 사용하지 않음으로써 이러한 결과를 얻을 수 있습니다 :

GET /tmdb/_search 
{ 
"query": { 
    "bool": { 
     "must" : [ 
     { 
      "match": { 
      "genres": "history" 
      } 
     }, 
     { 
      "match": { 
      "genres": "animation" 
      } 
     }   
     ] 

    } 
} 
} 

이 나에게 어떤 결과를 제공 않지만, 그것은 단지 "애니메이션"와 "역사"모두가 값을 반환 그들의 장르로.

내 질문 - 내 데이터베이스를 다시 매핑하고 "인덱스"를 추가해야합니까 : "not_analyzed"를 필터를 사용할 열에 추가하거나 두 번째 옵션 (필터를 사용하지 않음) .

편집 :이 같은 생각 뭔가 작동합니다,하지만 내가 예상대로 작동하지 않는 연산자 (나를 위해 작동하지 않는 것) :

GET /test/_search 
{ 
"query": { 

    "match": { 
    "genres": { 
     "query": "animation", 
     "query": "history", 
     "operator": "and" 
    } 

    } 
} 
} 

답변

0

첫 번째 쿼리가 거의 정확합니다. 당신이 genres 필드 (예 : 분석) 쿼리 할 경우 (즉, 분석되지 않음) 다음은 terms 쿼리

POST /test/_search 
{ 
"query": { 
    "bool": { 
    "filter": { 
     "terms": { 
     "genres.keyword": [ 
      "Animation", 
      "History" 
      ] 

     } 
     } 
    } 
    } 
} 
} 

주를 사용할 수 genres.keyword 필드를 조회 할 경우 당신은 match 쿼리 대신

POST /test/_search 
{ 
"query": { 
    "bool": { 
    "should": [{ 
     "match": { 
     "genres": "Animation" 
     } 
     } 
    },{ 
     "match": { 
     "genres": "History" 
     } 
     } 
    }] 
    } 
} 
} 

를 사용한다 : not_analyzed은 ES 2.x 및 이전 버전에서 사용되었으며, ES 5부터는 keyword 유형 사용은 동일합니다.

+0

나는 답을 찾지 못해 좌절감을 느끼고 있었고, 이것은 내 문제를 해결합니다. 감사! – Edgar

+0

도움이 되니 기쁩니다! – Val

관련 문제