Я боролся с шаблонами Elasticsearch, в частности, в необязательных параметрах. Я хотел бы добавить опционально фильтры там. Это фрагмент кода я испытывал:Elasticsearch Усы необязательные параметры
{
"filter" : {
"bool" : {
"must" : [
{{#ProductIDs.0}}
{ "terms" : { "Product.ProductID" : [{{#ProductIDs}}{{.}},{{/ProductIDs}}] } }
{{/ProductIDs.0}}
]
}
}
}
Конечно, я заменил "
с \"
, обезображенный его, завернул его в { "template" :"_snippet_above_" }
.
Теперь, когда я пытаюсь вызвать его, используя следующее:
GET /statistic/_search/template
{
"template": {
"id": "test"
},
"params": {
"ProductIDs": [1,2]
}
}
Он игнорирует параметр, который я при условии, однако, когда я пытаюсь сделать это в официальной mustache.io демонстрационной странице - это работает просто хорошо.
Я попробовал {{#ProductIDs.length}}
вариант тоже - это не сработало. После некоторых исследований я выяснил, что существует одна разница между mustache.js и mustache.java. Я предположил, что Elasticsearch использует версию JAVA и не поддерживает параметр длины, поэтому мне приходится полагаться на isEmpty. Поэтому я переписать свой запрос следующим образом:
{
"filter" : {
"bool" : {
"must" : [
{{^ProductIDs.isEmpty}}
{ "terms" : { "Product.ProductID" : [{{#ProductIDs}}{{.}},{{/ProductIDs}}] } }
{{/ProductIDs.isEmpty}}
]
}
}
}
Теперь, когда я запрашиваю шаблон со списком ProductIDs - он отлично работает, однако если удалить параметр, это не приносит никаких результатов. Я предполагаю, что он генерирует это:
{
"filter" : {
"bool" : {
"must" : [
{ "terms" : { "Product.ProductID" : [] } }
]
}
}
}
Если я отправляю пустой массив в качестве параметра - он отлично работает.
GET /statistic/_search/template
{
"template": {
"id": "test"
},
"params": {
"ProductIDs": []
}
}
Я предполагаю, что это происходит потому, что "ProductIDs"
являются undefined
и не пусто.
Есть ли способ вызвать это условие в mustache.java, чтобы я мог игнорировать эти параметры?
tl; dr; Вопрос заключается в том, что если я не указываю параметр в моей просьбе поиск по шаблону, мое состояние отображается как пустой массив, увидеть это:
{
"filter" : {
"bool" : {
"must" : [
{ "terms" : { "Product.ProductID" : [] } }
]
}
}
}
Если я прохожу пустой массив в качестве параметра, см это :
GET /statistic/_search/template
{
"template": {
"id": "test"
},
"params": {
"ProductIDs": []
}
}
Он работает должным образом и не создает условия фильтра, как описано в моем шаблоне, потому что в нем нет данных.
Я хочу это:
GET /statistic/_search/template
{
"template": {
"id": "test"
},
"params": {
}
}
Чтобы работать так же, как это:
GET /statistic/_search/template
{
"template": {
"id": "test"
},
"params": {
"ProductIDs": []
}
}
Я не понимаю, в чем проблема и что такое ожидание. –
Извините за путаницу, @AndreiStefan Я обновил вопрос. Дайте мне знать, если это имеет смысл сейчас. –