2016-05-30 10 views
0

Ich habe ein Elasticsearch Repo und eine Anwendung, die Dokumente für das schaffen, was wir 'Assets' nennen. Ich muss verhindern, dass Benutzer "Assets" mit demselben "Titel" erstellen.Elasticsearch genau passenden Begriff

Wenn der Benutzer versucht, ein 'Asset' zu erstellen, frage ich das Repo mit dem Titel und wenn es eine Übereinstimmung gibt, wird eine Fehlermeldung für den Benutzer angezeigt.

Mein Problem ist, dass wenn ich den Titel abfrage bekomme ich mehrere Ergebnisse (für ähnliche Übereinstimmungen).

Das ist meine Abfrage so weit:

GET assets-1/asset/_search 
{ 
    "query": { 
    "match": { 
     "title": { 
     "query": "test", 
     "operator": "and" 
     } 
    } 
    } 
} 

Ich habe viele Datensätze mit dem Titel: 'test 1', 'test 2', 'test bla' und nur eine mit dem Titel 'Test'.

Aber ich bekomme alle oben genannten.

Gibt es eine Bedingung oder eine Eigenschaft, die ich der Abfrage hinzufügen muss, damit ich genau den Ausdruck finde?

Antwort

0

Ihr Titelfeld wird wahrscheinlich analysiert und daher entspricht das Token test jedem Titel, der dieses Token enthält.

Um eine genaue Übereinstimmung zu implementieren, müssen Sie ein not_analyzed Feld haben und eine term Anfrage darauf machen.

Sie benötigen die Abbildung Ihrer title Feld, dies zu ändern:

curl -XPUT localhost:9200/assets-1/_mapping/asset -d '{ 
    "asset": { 
     "properties": { 
     "title": { 
      "type": "string", 
      "fields": { 
       "raw": { 
        "type": "string", 
        "index": "not_analyzed" 
       } 
      } 
     } 
     } 
    } 
}' 

Dann müssen Sie Ihre Daten indizieren und Sie werden dann in der Lage sein, eine genaue Übereinstimmung Abfrage wie folgt auszuführen:

curl -XPOST localhost:9200/assets-1/asset/_search -d '{ 
    "query": { 
     "term": { 
     "title.raw": "test" 
     } 
    } 
}' 
+0

danke + Val, das Feld war bereits "nicht_analysiert", aber der ".raw" Teil hat den Trick gemacht. – Yatiac

+0

Super, froh, dass du es herausgefunden hast !! – Val

+0

Noch eine Sache, gibt es sowieso, um es nicht Groß-und Kleinschreibung zu machen? – Yatiac

Verwandte Themen