Ich möchte "Benutzer" Daten mit der "% LIKE%" Bedingung in der elastischen Suche abrufen.PHP Elastic Suche Volltextsuche - Sortieren nach Relevanz
GET user/_search
{
"query": {
"query_string": {
"fields": ["firstname", "lastname"],
"query": "*a*"
}
},
"sort": {
"_score": "desc"
}
}
Es gibt die Ergebnisse mit "_score": 1 für alle Daten.
Die Daten mit dem Namen "Kunal Dethe" sind die ersten und "Abhijit Pingale" ist die zweite.
Aber wie erwartet sollte "Abhijit Pingale" zuerst kommen, weil der Buchstabe "a" zweimal in diesem Namen und nicht in "Kunal Dethe" vorkommt.
Irgendwelche Ideen warum?
EDIT: verwendet, um die "Ngram" Lösung, aber für einen Text wie "ab", werden die Gramm als "a", "b" und dann "ab" als "min_gram" eingestellt ist aufgeschlüsselt 1 weil das Ergebnis zurückgegeben werden soll, auch wenn ein einzelnes Zeichen eingegeben wird.
Aber ich möchte die Suche nur als "ab" durchgeführt werden.
Natürlich, kann die "min_gram" erhöhen, aber kann es dynamisch auf die Länge des gesuchten Textes eingestellt werden?
POST /user
{
"settings": {
"analysis": {
"filter": {
"substring": {
"type": "nGram",
"min_gram": 1,
"max_gram": 15
}
},
"analyzer": {
"substring_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"substring"
]
}
}
}
},
"mappings": {
"user": {
"properties": {
"id": {
"type": "long"
},
"firstname": {
"type": "string",
"analyzer": "substring_analyzer"
},
"lastname": {
"type": "string",
"analyzer": "substring_analyzer"
}
}
}
}
}
//Searching via
GET user/_search
{
"query": {
"query_string": {
"fields": ["firstname^2", "lastname"],
"query": "ab"
}
}
}
Scoring macht keinen Sinn, wenn Sie Platzhalter verwenden. Deshalb macht es das. Auch die Verwendung eines Präfix-Platzhalters verlangt nach Schwierigkeiten, da es jeden Ausdruck im invertierten Index buchstäblich prüfen muss. – pickypg
Aber ich brauche die "\ * a \ *" wie Abfrage durchgeführt werden. Gibt es einen anderen Weg, dies zu erreichen? –
Wenn Sie Platzhalter vermeiden möchten, benötigen Sie eine Lösung mit Nigrammen. Siehe hierzu: http://stackoverflow.com/questions/34331249/elasticsearch-query-string-dont-search-by-word-part/34331544#34331544 – Val