2017-05-08 4 views
0

Ich habe Datumsfeld in meinem Mapping und ich möchte auf meinem Feld Fuzzy-Suche tun Unten ist mein CodeFuzziness in Datumsart eingereicht

GET _search 
    { 
     "query": { 
     "fuzzy": { 
      "death_date": { 
       "value": "3548"    

     } 
    } 
    } 
} 

Aktuelle Ergebnisdaten nicht zurück basiert laut Erwartung. Obwohl ich 3548 Wert haben, ist es Partitur weniger als 3549 Wert ist, der auf der Oberseite des Ergebnisses erscheint ich meine Abfrage-Parameter umfassen Bereich haben sich wie

vorgeschlagen
GET _search 
    { 
    "query" : { 
    "bool": { 
    "must": 
    { 
     "match": { 
     "marriages.marriage_year": "1630" 
     } 
    }, 
    "should": 
     { 
     "match": { 
     "first_name": 
     { "query" : "mary", 
     "fuzziness":"2" 
     } 
     } 
    }, 
    "must": 
    { 
     "range" : { 
     "marriages.marriage_year": { 
      "gt" : "1620", 
      "lte" : "1740" 
      } 
      } 
     } 
     } 
     } 
    } 

Es wird Daten mit marriages.marriage_year Rückkehr = " 1630 "mit Mary als erstem Namen als höchste Punktzahl. Ich möchte auch Ehen.marriage_year zwischen 1620 - 1740, die in den Ergebnissen nicht gezeigt werden. Es zeigt Daten nur für marraige_year an. 1630

+0

Unschärfe macht keinen Sinn in einem 'date' Feld. Was Sie wahrscheinlich suchen, ist eine 'Bereich' Abfrage: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html#ranges-on-dates –

Antwort

1

Fuzzy-Abfrage ist für die Bearbeitung von Zeichenfolgenfeldern gedacht, um Tippfehlern Rechnung zu tragen. Es gibt Ihnen das Ergebnis auf Basis der Bearbeitungsentfernung.
Es macht keinen Sinn, es für numerische Felder zu verwenden. Wie 1000, 9000 hat nur Abstand 1, aber sie sind weit voneinander entfernt. Sie können eine Bereichsabfrage ausführen, wie von Russ vorgeschlagen, oder wenn Sie sich um Bearbeitungsentfernung und nicht um Bereich kümmern, indizieren Sie sie als Zeichenfolgenfeld und führen Sie dann eine unscharfe Abfrage durch.

Verwandte Themen