2016-06-07 6 views
2

ich azur Suche verwende, und ich möchte wie Klausel von SQL istWie sql like Klausel in azure Suche verwenden?

Abfrage verwende ich in azur verwenden

https://Serivename.search.windows.net/indexes/catalogsearch/docs? 
api-version=2015-02-28&search =Mc*&queryType=simple&searchMode=all 

aber es funktioniert nicht

Was ich versucht habe:

How Can i use Azure Search Like Syntax

https://azure.microsoft.com/en-us/blog/lucene-query-language-in-azure-search

+0

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. –

+1

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 –

Antwort

0

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.