![](/img/trans.png)
[英]Elasticsearch 5.4: Use normal and nested fields in same Painless script query?
[英]Elasticsearch: script fields in nested query
有沒有一種方法可以在嵌套查詢中使用“ script_fields”,將字段添加到返回的inner_hits中? 例:
{
"nested": {
"inner_hits": {},
"path": "companies",
"score_mode": "sum",
"query": {},
"script_fields": {
"overlap" : {
"script": {
"source": "................................",
"params": {
"from": "2012-01-01",
"to": "2015-06-30"
}
}
}
}
}
我執行n個嵌套查詢,將每個特定參數傳遞給每個嵌套查詢。 想法是讓源腳本根據所提供的參數為每個內部匹配的重疊字段分配一個值。
看起來像在同一嵌套路徑上執行更多嵌套查詢,定義了不同的inner_hits使得ES剝離了inner_hits匹配項。 例:
{
"nested": {
"inner_hits": {
"script_fields": {
"overlap" : {
"script": {
"source": "................................",
"params": {
"from": "2012-01-01",
"to": "2015-06-30"
}
}
}
}
},
"path": "companies",
"score_mode": "sum",
"query": {},
},
{
"nested": {
"inner_hits": {
"script_fields": {
"overlap" : {
"script": {
"source": "................................",
"params": {
"from": "2012-01-01",
"to": "2015-06-30"
}
}
}
}
},
"path": "companies",
"score_mode": "sum",
"query": {},
}
如果運行像這樣的更多嵌套查詢,我將獲得正確的匹配項,但不會返回所有預期的inner_hits。 我可以獲得所有匹配,只給不同的inner_hits隨機命名,例如:
"inner_hits": {
"name": [random name]
"script_fields": {
"overlap" : {
......
}
}
}
然后我得到正確的命中結果,但有一些缺點。 我必須檢查重復的結果,因為匹配已添加到不同的結果集中,並且不再唯一。 我必須使用正則表達式解析結果以重建統一列表。
這聽起來像個蟲子嗎?
是的,那是可行的。 您只需要在inner_hits
內部移動script_fields
部分,就像這樣:
{
"nested": {
"path": "companies",
"score_mode": "sum",
"query": {}.
"inner_hits": {
"script_fields": {
"overlap" : {
"script": {
"source": "................................",
"params": {
"from": "2012-01-01",
"to": "2015-06-30"
}
}
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.