2016-06-07 15 views
0

Ich versuche, alle Dokumente zu finden, in denen das Inhaltsfeld das Wort "syria" enthält und die Epochzeit größer als 1465312440000 ist. Die folgende Abfrage wird ausgeführt, gibt aber nur die Dokumente zurück die das Wort "Syrien" enthalten. Wie behebe ich das? (Elasticsearch Version 2.2)Elasticsearch versucht, Begriff und Zeitbereich abzufragen

{ 
    "query": { 
     "filtered": { 
     "query": { 
      "match": { 
       "content": "syria" 
      }, 
      "filter": { 
       "term": { 
        "sourceOriginator": "Twitter" 
       }, 
       "bool": { 

        "range": { 
         "epochCollectionDate": { 
          "gte": 1465312440 

         } 
        } 
       } 

      } 

     } 
    } 
} 
} 

Antwort

0

Natürlich ist es schwierig, ohne die Daten zu testen, aber der Filter ist falsch. Es sollte auf der gleichen Ebene wie die zweite Abfrage sein. Um meiner Meinung nach ist die folgende Lösung einfacher:

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match": { 
      "content": "syria" 
      } 
     } 
     ], 
     "filter": [ 
     { 
      "term": { 
      "sourceOriginator": "Twitter" 
      } 
     }, 
     { 
      "range": { 
      "epochCollectionDate": { 
       "gte": 1465312440 
      } 
      } 
     } 
     ] 
    } 
    } 
} 
0

Nur zur Ergänzung @ Jettro-Lösung, die nur auf 2.0 ES arbeiten und später wird der folgende auf allen Versionen arbeiten bis zu ES 5.

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "match": { 
      "content": "syria" 
     } 
     }, 
     "filter": { 
     "bool": { 
      "must": [ 
      { 
       "term": { 
       "sourceOriginator": "Twitter" 
       } 
      }, 
      { 
       "range": { 
       "epochCollectionDate": { 
        "gte": 1465312440 
       } 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

Beachten Sie, dass Sie, wenn Sie auf ES 2.0 oder höher sind, die Lösung von @ Jettro verwenden sollten, da die Abfrage filtered in 2.0 veraltet ist.

Verwandte Themen