Es gibt einige gute Antworten in den Kommentaren über die Verwendung des Platzhalters * für Like% Style-Abfragen, aber manchmal möchten Sie auch% Like-Abfragen durchführen. Dazu müssten Sie eine custom analyzer erstellen.
Der Grund, warum Sie dies tun müssen, ist, weil die Standardindexierung funktioniert, dass es die Starts eines Wortes indiziert. Zum Beispiel würde für das Wort Microsoft die Indizierung über M erfolgen, dann Mi, dann Mic, etc ...
Dies macht es leicht, eine Suche nach Mic%, aber es funktioniert nicht für% soft . Um dies zum Laufen zu bringen, müssen wir einen Trick anwenden, bei dem wir dem Analysator sagen, dass er die Wörter umkehren soll und diese dann indexieren soll (das Beispiel für den Analysator "suffixAnalyzer" unten). Für das Beispiel Microsoft würde es die Indizierung von t, tf, tfo, tfos usw. machen ... Sicherlich würde das nicht so funktionieren wie es ist, da wir nach% soft suchen können, aber die Indexierung hat die Wörter umgedreht (d. H Tofs eher als weich). Alles, was wir tun, ist ein Analysator, der es verehrt (Sie können das Beispiel für den Analysator "revereseText" unten sehen).
Jetzt brauchen wir nur ein neues Feld, das den "suffixAnalyzer" für die Indizierung und den "revereseText" für den searchAnalyzer verwendet (Sie können das Beispiel für das Feld "suffixName" unten sehen).
"fields": [
{ "name":"suffixName", "type":"Edm.String", "searchable":true, "searchAnalyzer":"reverseText", "indexAnalyzer":"suffixAnalyzer" }
]
"analyzers": [
{"name":"suffixAnalyzer","@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer","tokenizer":"standard","tokenFilters":[ "lowercase", "asciifolding", "reverse", "my_edgeNGram" ]},
{"name":"reverseText","@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer","tokenizer":"standard","tokenFilters":[ "lowercase", "reverse" ]}
]
Wenn Sie alle diese haben, können Sie für „weichen“ eine Suche über das suffixName Feld tun und es wird es zu einer wirklich schnellen Abfragerate finden.
Übrigens können Sie tatsächlich einen Präfix-Analysator mit dem folgenden Analysator erstellen, der es so macht, dass Sie den Platzhalter tatsächlich nicht verwenden müssen.
Während der Bearbeitung Ihrer Frage habe ich festgestellt, dass Sie zwischen 'search' und' = Mc * 'ein Leerzeichen haben, also lautet' & search = Mc * & ... 'Das wäre ein Problem. –
Ich habe versucht, was Sie vorschlagen. aber nicht funktioniert. ich habe eine andere Option versucht $ filter = Name eq 'mcdonal' & queryType = einfach & searchMode = alle. funktioniert einwandfrei Aber $ filter = Name eq 'mc *' & queryType = einfach & searchMode = alle. funktioniert auch nicht –