目前的解決方案可能有一些性能問題,但它的工作原理,你應該測試它
POST stack/type1/1
{
"pkClmn": 676101388023,
"dutyCde": "RICE",
"list": [
{
"pkClmn": 67610138804,
"perInd": "IXSO"
},
{
"pkClmn": 67610138803,
"perInd": "IXSO"
},
{
"pkClmn": 67610138802,
"perInd": "IASI"
},
{
"pkClmn": 67610138801,
"perInd": "IASI"
}
]
}
POST stack/type1/2
{
"pkClmn": 676101388023,
"dutyCde": "RICE",
"list": [
{
"pkClmn": 67610138804,
"perInd": "IXSO"
},
{
"pkClmn": 67610138803,
"perInd": "IXSO"
},
{
"pkClmn": 67610138802,
"perInd": "IXSO"
},
{
"pkClmn": 67610138801,
"perInd": "IXSO"
}
]
}
POST stack/type1/_search
{
"query": {
"filtered": {
"query": {
"term": {
"list.perInd": {
"value": "ixso"
}
}
},
"filter": {
"script": {
"script": "doc['list.perInd'].value == value",
"params": {
value: "ixso"
}
}
}
}
}
}
讓我解釋一下爲什麼它的工作。 Elasticsearch使用倒排索引來存儲數據。
所以,當你的索引文檔文本標記化(同樣有許多斷詞可以是單詞,可幾句話。閱讀Elasticsearch標記生成器),在標準的令牌是一個字。因此,在倒排索引中存在術語和參考我們示例中的文檔,它需要ixso和iasi並將它們寫入倒排索引。所以,如果你有兩個術語,那麼doc [fieldname] .values將包含這兩個術語的數組,在我的情況下,我正在檢查.value屬性,因爲它將轉換爲字符串,並且如果有兩個標記字符串將與參數不同。
還有analyzed and not_analyzed映射。在我的例子中,我展示了分析結果,它只能用於一個術語perInd。例如,如果您將索引「測試字」,我的解決方案將不起作用,因爲doc ['list.perInd']。值將返回[「ixso」,「test」]。如果你使用多個詞,你必須使用not_analyzed
正如你所看到的我也使用字符串參數讓elasticsearch緩存我的過濾器性能提升。
Image from
你能否爲你的問題添加更多解釋? – Richa
那麼我刪除了我的答案,因爲我認爲我弄錯了,你能解釋你想要搜索什麼以及應該返回什麼嗎? –
還是你的意思是你想要返回的文件只有當list.perInd有所有4個IXSO? –