2017-02-16 9 views
0

Я ищу события в ElasticSearch. Каждое событие может иметь заданную дату начала (в секундах) или событие будет продолжаться до тех пор, пока оно не будет отменено вручную. В моем поисковом запросе я ищу (среди прочих параметров), с сегодняшним днем ​​и хотел бы найти все события, которые:Elasticsearch поиск событий с несколькими типами дат

  • старт сегодня (дата> сегодня и dateType = удельное)
  • ИЛИ находятся на постоянной основе (dateType = о текущих)

Мой запрос выглядит, но это не работает:

"query":{ 
    "bool":{ 
     "must":[ 
     { 
      "range":{ 
       "latitude":{ 
        "gte":45.78560033657945, 
        "lte":46.54954406342055 
       } 
      } 
     }, 
     { 
      "range":{ 
       "longitude":{ 
        "gte":13.75487411320551, 
        "lte":14.857968686794491 
       } 
      } 
     }, 
     { 
      "multi_match":{ 
       "query":"tes", 
       "type":"phrase_prefix", 
       "fields":[ 
        "title^3", 
        "subtitle^2" 
       ] 
      } 
     } 
     ], 
     "should":[ 
     { 
      "range":{ 
       "validDateUnix":{ 
        "gte":1487026800000 
       } 
      } 
     } 
     ] 
    } 
} 

Любая помощь будет оценена.

ответ

0

Вам необходимо поработать над своей частью should, чтобы уловить оба ограничения, прямо сейчас вы занимаете половину первого ограничения. Попробуйте это:

"query":{ 
    "bool":{ 
     "must":[ 
     { 
      "range":{ 
       "latitude":{ 
        "gte":45.78560033657945, 
        "lte":46.54954406342055 
       } 
      } 
     }, 
     { 
      "range":{ 
       "longitude":{ 
        "gte":13.75487411320551, 
        "lte":14.857968686794491 
       } 
      } 
     }, 
     { 
      "multi_match":{ 
       "query":"tes", 
       "type":"phrase_prefix", 
       "fields":[ 
        "title^3", 
        "subtitle^2" 
       ] 
      } 
     } 
     ], 
     "minimum_should_match": 1, 
     "should":[ 
     { 
      "bool": { 
      "filter": [ 
       { 
       "term": { 
        "dateType": "specific" 
       } 
       }, 
       { 
       "range":{ 
        "validDateUnix":{ 
         "gte":1487026800000 
        } 
       } 
       } 
      ] 
      } 
     }, 
     { 
      "term": { 
       "dateType": "on-going" 
      } 
     } 
     ] 
    } 
} 
+0

Спасибо за ваш ответ, но это не похоже на работу. Результат содержит прошлые события. Поэтому фильтр диапазона позволяет им каким-то образом пробиться. – Leon

+0

Первая часть теперь работает правильно, и я могу фильтровать только новые события, но текущие не включены. – Leon

+0

Можете ли вы показать образец документа, который должен соответствовать текущему ограничению? – Val

0
{ 
    "id": "7812c801-0000-0000-0000-000000000000", 
    "title": "Know Your Student Protest Rights", 
    "subtitle": "Know what you can and can't do. Join our campus communities to help other students understand their rights. Peer to peer advocacy is critical to our approach.", 
    "whatIsImpact": "The ACLU makes sure that our basic Constitutional rights – to free speech, to privacy, to be innocent until proven guilty – don’t just exist on paper, but also practice. The ACLU enforces the vision that these freedoms be guaranteed to every person in this country. These are our American values.", 
    "whatIsNeeded": "Our goal is to connect with young Americans so they understand their civic rights.", 
    "whyIsNeeded": "The ACLU of Northern California is an enduring guardian of justice, fairness, equality, and freedom, working to protect and advance civil liberties for all Californians. This includes students!", 
    "url": "https://www.aclunc.org", 
    "address": "Ljubljana, Slovenia", 
    "dateType": "on-going", 
    "issues": [], 
    "latitude": "46.1671294", 
    "longitude": "14.3058337", 
    "organization": "68c9c701-0000-0000-98c9-c70100000000", 
    "organizationName": "Developer test", 
    "type": "Volunteer" 
} 
+0

@Val - это образец документа, который должен соответствовать текущему состоянию. – Leon