Как отфильтровать результаты поиска по заданному диапазону?

Чтобы немного разъяснить очень полезный ответ GlennG (перевод синтаксиса с C # на VB.Net не всегда «очевиден»), вы также можете украсить отдельные свойства класса, чтобы управлять обработкой нулевых значений. Если вы это сделаете, не используйте глобальную настройку JsonSerializerSettings из предложения GlennG, иначе она переопределит отдельные украшения. Это пригодится, если вы хотите, чтобы в JSON появился нулевой элемент, поэтому потребителю не нужно выполнять какую-либо специальную обработку. Если, например, потребитель должен знать, что массив необязательных элементов обычно доступен, но в настоящее время пуст ... Украшение в объявлении свойства выглядит следующим образом:

<JsonPropertyAttribute("MyProperty", DefaultValueHandling:=NullValueHandling.Include)> Public Property MyProperty As New List(of String)

Для этих свойств вы не хотят вообще появляться в изменении JSON: = NullValueHandling. Включить в: = NullValueHandling.Ignore. Кстати, я обнаружил, что вы можете украсить свойство как для XML, так и для JSON-сериализации просто отлично (просто поместите их рядом друг с другом). Это дает мне возможность называть сериализатор XML в dotnet или сериализаторе NewtonSoft по своему усмотрению - оба работают бок о бок, а мои клиенты имеют возможность работать с XML или JSON. Это гладкий, как сопли на дверной ручке, так как у меня есть клиенты, которым нужны оба!

0
задан Jane S. 16 January 2019 в 08:50
поделиться

1 ответ

Опираясь на решение упомянутого потока, мы можем добавить параметры в скрипт в разделе агрегации для дальнейшей фильтрации агрегированных результатов:

curl -XGET "https://localhost:9200/testindex/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "aggs": {
    "room_bucket": {
      "terms": {
        "field": "room_name.keyword"
      },
      "aggs": {
        "hour_bucket": {
          "terms": {
            "script": {
              "inline": """
              def range = LongStream.rangeClosed(doc.start_date.value, doc.end_date.value);
              return range.filter(x -> x >= params.min && x <= params.max).toArray();

""",
              "lang": "painless",
              "params": {
                "min": 10,
                "max": 11
              }
            },
            "order": {
              "_key": "asc"
            },
            "value_type": "long"
          }
        }
      }
    }
  }
}'
0
ответ дан Val 16 January 2019 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: