假设我有一个索引,其中我的文档是汽车。
每辆车有以下一些属性:品牌、型号、颜色、生产年份、发动机类型、长度、座位数等
我有给定品牌的型号列表。 我想检索有关每个模型的通用信息,因此我只需要为每个模型提取一个文档。
示例:车型为凯美瑞。我想知道这是一辆轿车,5 个座位,15 英尺长等。我不关心每辆凯美瑞的颜色、年份等。
这是我想做的事情:
还有其他我没有想到的选择,或者解决我遇到的问题的方法吗?
cars
和
models
索引如下所示:
PUT cars
{
"mappings": {
"properties": {
"make": {
"type": "keyword"
},
"model": {
"type": "keyword"
},
"color": {
"type": "keyword"
}
}
}
}
PUT models
{
"mappings": {
"properties": {
"model": {
"type": "keyword"
},
"type": {
"type": "keyword"
}
}
}
}
我们可以在每个索引中添加示例文档
POST cars/_bulk
{"index": {}}
{"make": "toyota", "model": "camry", "color": "red" }
POST models/_bulk
{"index": {}}
{"model":"camry", "type": "sedan"}
然后,您需要做的就是创建一个丰富策略,允许您加入 model
字段,如下
PUT /_enrich/policy/models_policy
{
"match": {
"indices": "models",
"match_field": "model",
"enrich_fields": ["type"]
}
}
PUT /_enrich/policy/models_policy/_execute?wait_for_completion=false
丰富政策运行后(如果您的 models
索引很大,可能需要一些时间,您将有一个可以加入的支持索引。ES|QL 查询将如下所示:
POST _query?format=csv
{
"query": """
FROM cars
| WHERE make == "toyota"
| ENRICH model-policy ON model WITH type
"""
}
您将得到的结果将如下所示,即您已经能够将模型的类型 (sedan
) 加入到您的结果中:
color,make,model,type
red,toyota,camry,sedan