2015-01-30 2 views
0

В поиске эластичности у нас есть документ с различными значениями. Каждое значение имеет период. Период указывает, является ли значение по-прежнему актуальным, и указывает, в какое время это значение актуально.Elastic Search - значение фильтра по последней дате

Пример ниже:

"": [ 
{ 
    "memberType": user, 
    "period": { 
    "validFrom": "1964-08-23", 
    "validTo": "2008-12-31" 
    }, 
}, 
{ 
    "memberType": admin, 
    "period": { 
    "validFrom": "2008-12-31", 
    "validTo": null 
    } 
} 
] 

В нашем запросе, я хочу, чтобы фильтровать по MemberType. Но иметь дело только с новейшим типом члена. Поэтому, если я фильтрую пользователем userType «пользователь», вышеприведенный документ не должен совпадать, потому что фактическим типом member является admin.

В приведенном выше примере, я мог бы фильтровать с булевым фильтром memberType, а отсутствует поле в поле validTo.

Но если человек еще недействителен дольше, у обоих будет действительная дата, определенная, и тогда я должен посмотреть на самую новую дату.

Как я могу это достичь? Я думаю о вложенном запросе или о специальном скрипт-фильтре. Но я не знаю, как выразить запрос.

Заранее спасибо

ответ

0

При условии, что ваше имя поля для этого массива МетЬегВеЪаНз, вы можете использовать этот запрос, чтобы добиться того, что вам нужно.

{ 
    "query" : { "match_all" : {} }, 
    "filter" : { 
     "nested" : { 
      "path" : "memberDetails", 
      "filter" : { 
       "bool" : { 
        "must" : [ 
         { 
          "term" : {"memberType" : "user"} 
         }, 
         { 
          "missing" : { "field" : "validTo" } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 
+0

Thanks Vishal. Но ваш ответ не является полным. Данный пример возвращает только, если поле «validTo» отсутствует. Но во всех случаях это поле отсутствует, в некоторых случаях значение validTo будет иметь значение даты, и мне нужно найти самую новую дату. Пример .: "": [ { "MemberType": пользователь, "Период": { "validFrom": "1964-08-23", "validTo": "2008-12-31" }, }, { "MemberType": администратор, "период": { "validFrom": "2008-12-31", "validTo": "2012-04-30" }} ] –

Смежные вопросы