如果我提供空的参数(见下文),我想从Elasticsearch中获取所有文档。我怎样才能实现这个目标呢?
一种解决方案是,我可以将所有现有的类别写进一个数组。但我有超过100个类别,这将不是一个好的解决方案。
谁能帮帮我?如果数组为空,是否可以忽略术语?
POST _scripts/test{"script": {
"lang": "mustache",
"source": {
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"terms": {
"category": [
"{{#category}}",
"{{.}}",
"{{/category}}"
]}}}}}}}
如果我执行下面的查询,结果将是空的。
GET poi/_search/template{
"id": "test",
"params": {
"category" : [""]
}}
实现这个目标的最好方法是像这样使用 JSON数组:
POST _scripts/test
{
"script": {
"lang": "mustache",
"source": """
{
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": [
{{#category}}
{
"terms": {
"category": {{#toJson}}category.values{{/toJson}}
}
}
{{/category}}
]
}
}
}
"""
}
}
那么你可以像这样执行这个搜索模板。
GET poi/_search/template
{
"id": "test",
"params": {
"category" : {
"values": ["cat1", "cat2", "cat3"]
}
}
}
如果你不想指定任何类别,像这样:
GET poi/_search/template
{
"id": "test",
"params": {
}
}