我想我已經想通了Elasticsearch,但我懷疑我沒能神交的東西,因此這個問題:我沒有從我的elasticsearch查詢中獲取任何文檔。有人能指出我的錯誤嗎?
我索引的產品,其中有場數量龐大,但有問題的是:
{
"show_in_catalogue": {
"type": "boolean",
"index": "no"
},
"prices": {
"type": "object",
"dynamic": false,
"properties": {
"site_id": {
"type": "integer",
"index": "no"
},
"currency": {
"type": "string",
"index": "not_analyzed"
},
"value": {
"type": "float"
},
"gross_tax": {
"type": "integer",
"index": "no"
}
}
}
}
我試圖返回的所有文件,其中「show_in_catalogue」是真實的,並且存在與SITE_ID 1價格:
{
"filter": {
"term": {
"prices.site_id": "1",
"show_in_catalogue": true
}
},
"query": {
"match_all": {}
}
}
這將返回結果爲零。我還嘗試了兩個單獨的術語「和」過濾器 - 沒有運氣。
的文件之一的子集返回,如果我沒有過濾器的樣子:
{
"prices": [
{
"site_id": 1,
"currency": "GBP",
"value": 595,
"gross_tax": 1
},
{
"site_id": 2,
"currency": "USD",
"value": 745,
"gross_tax": 0
}
]
}
我希望我OK省略了這麼多這裏的文件;我不相信這是偶然的,但我當然不能確定。
我錯過了一個重要的知識點,還是我做了一些終極厚實的事情?無論哪種方式,我都會感激這位專家的知識。謝謝!
編輯:
在J.T.的建議我也嘗試重新索引文件,以便prices.site_id
被索引 - 沒有變化。也嘗試了下面的布爾/必須過濾器無濟於事。
爲了澄清,我使用空查詢的原因是Web界面可能會提供查詢字符串,但使用相同的代碼來簡單地過濾所有產品。因此,我留在查詢中,但是是空的,因爲這就是Elastica似乎產生的查詢字符串。
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"term": {
"show_in_catalogue": true
}
},
{
"term": {
"prices.site_id": 1
}
}
]
}
}
}
}
}
謝謝 - 我嘗試了你的建議並澄清了我的問題。我正在玩一個空的查詢,所以一旦過濾器處理完整的結果集,我就可以填充它。仍然無法獲得任何東西,但我會繼續黑客攻擊。 – Altreus
啊哈 - 它的工作如果我索引我想過濾的所有東西。我沒有意識到你必須索引過濾器 - 我認爲它只適用於查詢搜索!如果我接受這個答案,你會澄清你的編輯來解釋這個,所以未來的讀者會發現它嗎?謝謝! – Altreus
已編輯!對不起,當我重新檢查你的問題時,我正在用手機。所以,關於索引號的編輯並不突出。 –