2013-12-22 2 views
2

나는ElasticSearch 필터가 결과를 반환하지 않습니다 ... 구문 문제?

{ 
_index: ecw 
_type: grails.gorm.tests.Person 
_id: Nb0tHzNDRtq3-rGSO3yVTw 
_score: 1 
_source: { 
firstName: Bart 
lastName: Simpson 
age: 0 
pets: [ ] 
} 
} 
{ 
_index: ecw 
_type: grails.gorm.tests.Person 
_id: RxD7mGsvR3i5LT52MAdSLA 
_score: 1 
_source: { 
firstName: Bob 
lastName: Builder 
age: 0 
pets: [ ] 
} 
} 
{ 
_index: ecw 
_type: grails.gorm.tests.Person 
_id: rJMEbBqeRcqx3K0HtfGrLg 
_score: 1 
_source: { 
firstName: Bart 
lastName: Simpson 
age: 9 
pets: [ ] 
} 
} 

을 다음과 같은 탄성 검색 문서가하지만 로컬 호스트에서 [포스트] 다음 필터를 실행할 때 : 9200/ECW/grails.gorm.tests.Person/_search 헤드를 사용하여 반환되는 값이 없습니다. 이견있는 사람?

{ 
     "filter": { 
     "and": { 
      "filters": [ 
      { 
       "term": { 
       "lastName": "Simpson" 
       } 
      } 
      ] 
     } 
     } 
    } 

답변

2

처음에는 and을 사용하는 올바른 방법이 아닙니다. 필터 목록이 직접 입력되어야합니다 (예 : {"and": [ {"term": ...} ]}). (http://www.elasticsearch.org/blog/all-about-elasticsearch-filter-bitsets/ 참조)

또한 term 필터는 텍스트 처리/분석을 수행하지 않습니다. 문서의 색인을 생성하면 Simpson이 (아마도 다른 것보다) simpson으로 소문자가되었습니다.

따라서 { "term": { "lastName": "Simpson" } }을 필터링해야합니다.

마지막으로 패싯과 조회수가 모두 필요하지만 필터가 패싯에 영향을주지 않도록하려면 검색 개체에만 filter을 사용해야합니다. 다른 모든 경우에는 filtered -query를 사용하고 싶습니다. https://www.found.no/play/gist/d608591254288783cd0d

+0

와우 정말 감사합니다, 내 필터 ES 자바 클라이언트를 통해 생성 된 다음은 실행 가능한 예입니다

{ "query": { "filtered": { "filter": { "term": { "lastName": "simpson" } } } } } 

: 요약하면

, 이것은 당신이 끝장 낸 것입니다. 성을 소문자로만 바꾸면 제대로 작동합니다! 감사 – Sap

관련 문제