EDITED包括本terms
條件預計非分析場(每文檔here)的索引映射
鑑於討論,我建議你確認你的指數有一個映射,它明確地指定它如此。例如:
{"mappings" : {
"your_doc_type" : {
"items" : {
"type" : "nested",
"properties" : {
"product" : {"type" : "string", "index" : "not_analyzed"},
...
... Other properties of the nested object
...
}
},
...
... Mappings for the other fields in your document type
...
}
}
這應該使terms
做,他們都應該檢查items.product
時候做什麼。
我早懷疑是有別的東西在你的查詢(min_score
也許)是基於得分過濾掉的結果,而且門檻淘汰由於匹配items.product
條件的文件,但不apply
條件潛在的Lucene評分模型。換句話說,如果所有其他事物對於僅滿足should
查詢中的一個項目的文檔而言是相等的,那麼滿足"apply":"2"
條件的文檔將高於items.product
爲1或2的文檔。這是我的經驗觀察,用您的查詢的小測試數據集。
測試數據集:
{"active":1, "apply":"2", "items" : [{"product": "3"}]}
{"active":0, "apply":"2", "items" : [{"product": "3"}]}
{"active":1, "apply":"3", "items" : [{"product": "3"}]}
{"active":1, "apply":"3", "items" : [{"product": "1"}]}
{"active":1, "apply":"3", "items" : [{"product": "2"}]}
根據您查詢的條件,我們應該看到三個文件返回 - 第一,第四和第五的文件。
"hits" : [ {
"_index" : "test",
"_type" : "test",
"_id" : "AUtrND1rIJ0nixSnh_cG",
"_score" : 0.731233,
"_source":{"active":1, "apply":"2", "items" : [{"product": "3"}]}
}, {
"_index" : "test",
"_type" : "test",
"_id" : "AUtrND1sIJ0nixSnh_cK",
"_score" : 0.4601705,
"_source":{"active":1, "apply":"3", "items" : [{"product": "2"}]}
}, {
"_index" : "test",
"_type" : "test",
"_id" : "AUtrND1sIJ0nixSnh_cJ",
"_score" : 0.35959372,
"_source":{"active":1, "apply":"3", "items" : [{"product": "1"}]}
} ]
預期的文件回來,但你可以看到第一個文檔(這apply
是2,滿足should
查詢的第一準則)得分高得多。
如果您的意圖是針對這些條件不會影響文檔的評分,而是將它們用作簡單的包含/排除條件,則可能需要切換到過濾的查詢。喜歡的東西:
{
"query" : {"filtered" : {
"query" : {"match_all" : {}},
"filter" : {"bool" : {
"must" : [
{"term" : {"active" : 1}}
],
"should" : [
{"term" : {"apply" : "2"}},
{"nested" : {
"path": "items",
"query" : {
"terms" : {"items.product" : ["1", "2"]}
}
}}
]
}}
}}
}
既然你現在指定的過濾器來代替,這些條件應該不會影響到返回的文檔的得分,而是隻確定文檔是否符合在所有的結果集(當時的計算分數獨立於上述條件)。使用這種過濾查詢,從我啞數據集的結果是:
"hits" : [ {
"_index" : "test",
"_type" : "test",
"_id" : "AUtrND1rIJ0nixSnh_cG",
"_score" : 1.0,
"_source":{"active":1, "apply":"2", "items" : [{"product": "3"}]}
}, {
"_index" : "test",
"_type" : "test",
"_id" : "AUtrND1sIJ0nixSnh_cK",
"_score" : 1.0,
"_source":{"active":1, "apply":"3", "items" : [{"product": "2"}]}
}, {
"_index" : "test",
"_type" : "test",
"_id" : "AUtrND1sIJ0nixSnh_cJ",
"_score" : 1.0,
"_source":{"active":1, "apply":"3", "items" : [{"product": "1"}]}
} ]
的分數是現在所有相同返回文檔,而無需考慮爲其should
的部分很滿意。
請注意,上面的query
屬性爲match_all
- 如果您的查詢中有其他條件未在原始問題中表示,那麼您需要相應地修改該條款。
查詢中是否存在任何基於分數執行過濾的內容? – rchang 2015-02-08 20:45:49
不,這是整個查詢。這就是我一度認爲的,但事實並非如此。 – aamirl 2015-02-08 23:43:22
'items.product'字段是否僅包含一個整數(以字符串表示形式),還是字段中還有其他字符數據? – rchang 2015-02-09 15:19:31