2016-04-20 4 views
0

Meine Absicht ist es, Datensätze abzurufen, die einem bestimmten Datumsbereich und UUID (eindeutige Benutzer-ID) entsprechen. Die Abfrage scheint zu scheitern: screenshot of UUID based search query and resultElasticSearch-Abfragefilter funktioniert nicht

Wenn ich die gleiche Abfrage mit Benutzernamen versuchen, dann funktioniert es.

screenshot of Name based search query and result

Ich vermuten das : Zeichen in dem Suchtext und versuchte es mit einem \ zu entkommen, aber es funktioniert immer noch nicht.

Was könnte das Problem sein?

Die Zuordnungen sind:

{ 
    "top_flows": { 
    "mappings": { 
     "top flows": { 
     "properties": { 
      "name": { 
      "type": "string" 
      }, 
      "postDate": { 
      "type": "date", 
      "format": "strict_date_optional_time||epoch_millis" 
      }, 
      "uuid": { 
      "type": "string" 
      } 
     } 
     } 
    } 
    } 
} 

Das Dokument JSON hinzugefügt in Elasticsearch ist:

doc = { 
         'postDate': timestamp_str, 
         'uuid': uuid, 
         'name': 'sam' 
} 
timestamp = time.time() 
timestamp_str = datetime.fromtimestamp(timestamp).strftime('%Y-%m-%dT%H:%M:%S') 
res = self.__eshandle.index(index="top_flows", doc_type='top flows', id=int(timestamp), body=doc) 
+0

Um es einfacher zu helfen, bitte den Code für die Abfrage als Text hinzufügen. – topher

+0

Können Sie zeigen Sie Ihren Mapping? –

Antwort

0

Mögliches Problem ist, dass Sie nicht die Analyse auf Zeitfeld in mapping gedreht haben.

Put-Mapping

PUT /top_flows 
{ 
    "mappings": { 
    "users": { 
     "properties": { 
     "uuid": { 
      "type": "string", 
      "index": "not_analyzed" 
     } 
     } 
    } 
    } 
} 

Dokument speichern

POST /top_flows/blogpost 
{ 
"uuid": "FF:FF:FF:FF" 
} 

Suche

POST /top_flows/_search 
{ 
    "query": { 
    "match_all": {} 
    } , 
    "post_filter": { 
"term": { 
     "uuid": "FF:FF:FF:FF" 
    } 
    } 
} 
+0

versucht, die neuen Zuordnungen zeigen oben, aber immer noch keine Ergebnisse zurückgegeben Bearbeitete die Frage, um die Mappings, JSON Doc und ES Indizierung zu zeigen, als Referenz verwenden – Athif

+0

Sie sind nicht die gleichen in Ihren Mappings Sie haben Index nicht analysiert –

+0

Hallo Volodymyr, versuchte ich mit der Beispiel, das du hier gegeben hast, aber selbst das hat nicht funktioniert. Nicht sicher, wo ich genau falsch liege. Kannst du versuchen, das JSON-Dokument zu verwenden, das ich zur Verfügung gestellt habe, und sehen, ob es funktioniert für dich? Vielleicht ist die Indexierung, die ich versuche, falsch? Alles, was ich tun möchte, ist, die Dokumente einzufügen, die nach Zeitstempel indiziert sind, und sie dann basierend auf dem Zeitbereich und der UUID oder dem Benutzer zu durchsuchen. Ich bin sehr neu in elasticsearch, also entschuldige mich, wenn ich naive Fragen stelle :) – Athif

0

arbeitete Below endlich!

GET /top_flows/_search 
{ 
    "query" : { 
       "range" : { 
        "postDate" : { 
        "from" : "now-5m", 
        "to" : "now" 
      } 
     } 
    }, 
    "filter": { 
     "query_string": { 
     "query": "FF\\:FF\\:FF\\:FF\\:FF\\:FF\\:FF\\:FF\\:FF\\:FF\\:FF\\:11\\:8F\\:FF\\:FF\\:FF", 
     "fields": ["uuid"] 
     } 
    } 
} 

nicht noch sicher, warum die früheren Ansätze fehlgeschlagen :(

Verwandte Themen