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
Bitte lesen Sie [die Dokumentation] (https: //www.el astic.co/guide/enlassearch/guide/current/partial-matching.html). –
Ich bin mir nicht sicher, wie es helfen kann ich brauche nicht: Text wie "% quick%", ich brauche das Gegenteil (siehe die Frage –
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 –