2016-05-25 8 views
5

Ich versuche ähnliche Feld Abfrage in Elasticsearch auszuführen:Suche Elasticsearch Feld in einem Wert enthalten

select * from products where 'milk' like '%'+name+'%'

Bedeutung Ich versuche, alle Dokumente zu finden, dass der Name Produkt in diesem Fall ein Unterkette von "Milch".

Wie kann ich es tun?

+0

Bitte lesen Sie [die Dokumentation] (https: //www.el astic.co/guide/enlassearch/guide/current/partial-matching.html). –

+0

Ich bin mir nicht sicher, wie es helfen kann ich brauche nicht: Text wie "% quick%", ich brauche das Gegenteil (siehe die Frage –

+0

Können Sie mit einem Beispiel zu erarbeiten. So etwas wie 3 Dokumente mit Produktnamen: abcmilkman, Abcman, ein Mann usw. Sie wollen die ersten 2 Dokumente als Ergebnis zurückgegeben werden? Wenn ja, dann scheint die SQL-Abfrage ein wenig aus, ich meine, sollte es nicht 'Select * von Produkten sein, wo 'Produktname' gefällt ' % '+ Milch +'% ''? Oder habe ich alles falsch –

Antwort

5

Ich würde mit einem benutzerdefinierten Analysator gehen ngrams. Zuerst einen Index wie folgt erstellen:

curl -XPUT 'localhost:9200/tests' -d ' 
{ 
    "settings" : { 
     "analysis" : { 
      "analyzer" : { 
       "my_analyzer" : { 
        "tokenizer" : "ngrams" 
       } 
      }, 
      "tokenizer" : { 
       "ngrams" : { 
        "type" : "nGram", 
        "min_gram" : "2", 
        "max_gram" : "10" 
       } 
      } 
     } 
    }, 
    "mappings": { 
     "test": { 
      "properties": { 
       "product_name": { 
        "type": "string", 
        "analyzer": "standard", 
        "search_analyzer": "my_analyzer" 
       } 
      } 
     } 
    } 
}' 

Dann können Sie Index einige Daten:

curl -XPOST 'localhost:9200/tests/test/_bulk' -d ' 
{"index":{}} 
{"product_name": "bc"} 
{"index":{}} 
{"product_name": "cd"} 
{"index":{}} 
{"product_name": "def"} 
' 

Und schließlich kann man suchen wie folgt aus:

curl -XPOST 'localhost:9200/tests/_search' -d '{ 
    "query": { 
     "match": { 
      "product_name": "abcde" 
     } 
    } 
}' 

Und Sie werden die erste bekommen zwei Dokumente bc und cd

+0

Danke, genau das habe ich gesucht. –

+0

Super, froh, dass es geholfen hat! – Val

+1

Beat mich dazu lol @Val –