2017-10-15 4 views
0

Wenn Sie einen benutzerdefinierten Analysator für Azure Search definieren, können Sie einen Token-Filter aus der Liste this definieren. Ich versuche die Suche nach Präfix und Infix zu unterstützen. Zum Beispiel: Wenn ein Feld den Namen enthält: 123 456, möchte ich die durchsuchbaren Begriffe enthalten:Erstellen eines EdgeNGram-Analyzers, der beide Seiten in Azure Search unterstützt

1 
12 
123 
23 
3 
4 
45 
456 
56 
6 

Wenn die EdgeNGramTokenFilterV2 verwendet, die den Trick zu tun scheint, gibt es eine Möglichkeit, eine „Seite“ zu definieren, Eigenschaft, aber nur "front" und "back" werden unterstützt, nicht beide. der „Front“ (default) Wert erzeugt, diese Liste:

1 
12 
123 
4 
45 
456 

und Rückseite erzeugt:

123 
23 
3 
456 
56 
6 

ich versuchte zwei Token zwei EdgeNGramTokenFilterV2s verwenden, aber dies erzeugt Begriffe aus der Kombination der beiden Filter, wie beispielsweise : „2“ oder „5“:

1 
12 
123 
23 
3 
4 
45 
456 
56 
6 
2 // Unwanted 
5 // Unwanted 

ich habe auch versucht, einen „Reverse“ Token, aber dies alles umkehrt und die Ergebnisse sind immer noch falsch.

Ich benutze nur ein Suchfeld ("Name") und würde es lieber so bleiben. (Gedanke der Option, ein anderes Feld namens "name_reverse" mit einem anderen Analysator zu verwenden, aber dies ist sehr ineffizient und verursacht eine Menge Kopfschmerzen beim Verbinden der Suchmaschine mit der Datenquelle.

Zum leichteren Nachschlagen ist die aktuelle Erzeugungsanforderung Index:

{ 
"name": "testindexboth", 
"fields": [ 
    {"name": "id", "type": "Edm.String", "key": true }, 
    {"name": "Name", "type": "Edm.String", "searchable": true, "analyzer": "myAnalyzer"} 
], 
"myAnalyzer": [ 
    { 
    "name": "myAnalyzer", 
    "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer", 
    "tokenizer": "standard_v2", 
    "tokenFilters":["front_filter", "back_filter"] 
    }], 

    "tokenFilters":[ 
      { 
       "name":"front_filter", 
       "@odata.type":"#Microsoft.Azure.Search.EdgeNGramTokenFilterV2", 
       "maxGram":15, 
       "side": "front" 
      }, 
         { 
       "name":"back_filter", 
       "@odata.type":"#Microsoft.Azure.Search.EdgeNGramTokenFilterV2", 
       "maxGram":15, 
       "side": "back" 
      } 
     ] 
} 

gibt es immer klettern sie die Ergebnisse eine Option, beide zu kombinieren, ohne

Antwort

2

zwei Felder zu Ihrem Index hinzufügen, mit zwei verschiedenen benutzerdefinierten Analysatoren: eine für Präfix , eine für Suffix. Bei der Abfrage, Abfrage für beide Felder.

+0

Es wird definitiv funktionieren, aber es scheint ein bisschen wie ein Hack, meinst du nicht? Es zwingt mich auch, eine Feldabbildungsfunktion zu verwenden. –