2013-12-22 66 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" } }

最後,如果您想要facet和hits,但不希望過濾器影響facet,則只應在搜索對象上使用filter。在所有其他情況下,您想要使用filtered查詢。

總之,這是你到底是什麼了:

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

這裏是一個可運行的例子:https://www.found.no/play/gist/d608591254288783cd0d

+0

哇太感謝你了,我的過濾器,通過ES Java客戶端創建。只有將姓氏縮減爲小寫才能工作!謝謝 – Sap