2017-09-08 1 views
0

Ich habe diese INDEXWie diese Abfrage in Azure Suche übereinstimmen

{ 
    "name": "testentities", 
    "fields": [ 
    { 
     "name": "id", 
     "type": "Edm.String", 
     "key": true, 
     "retrievable": true, 
     "filterable": true, 
     "sortable": true 
    }, 
    { 
     "name": "entity_id", 
     "type": "Edm.String", 
     "searchable": true, 
     "sortable": true, 
     "facetable": false, 
     "retrievable": true, 
     "filterable": true, 
     "searchAnalyzer":"standard", 
     "indexAnalyzer": "custom_analyzer" 
    }, 
    { 
     "name": "description", 
     "type": "Edm.String", 
     "searchable": true, 
     "sortable": false, 
     "facetable": false, 
     "retrievable": true, 
     "filterable": true 
    }, 
    { 
     "name": "name", 
     "type": "Edm.String", 
     "searchable": true, 
     "sortable": true, 
     "facetable": false, 
     "retrievable": true, 
     "filterable": true 
    }, 
    { 
     "name": "entity_type", 
     "type": "Edm.String", 
     "searchable": true, 
     "sortable": true, 
     "facetable": true, 
     "retrievable": true, 
     "filterable": true 
    }, 
    { 
     "name": "ancestors", 
     "type": "Collection(Edm.String)", 
     "searchable": false, 
     "sortable": false, 
     "facetable": false, 
     "retrievable": true, 
     "filterable": true 
    }, 
    { 
     "name": "calendar_id", 
     "type": "Edm.String", 
     "searchable": false, 
     "sortable": false, 
     "facetable": false, 
     "retrievable": false, 
     "filterable": false 
    }, 
    { 
     "name": "currency", 
     "type": "Edm.String", 
     "searchable": false, 
     "sortable": false, 
     "facetable": false, 
     "retrievable": false, 
     "filterable": false 
    }, 
    { 
     "name": "timezone", 
     "type": "Edm.String", 
     "searchable": false, 
     "sortable": false, 
     "facetable": false, 
     "retrievable": false, 
     "filterable": false 
    }, 
    { 
     "name": "active", 
     "type": "Edm.Boolean", 
     "retrievable": true, 
     "facetable": true, 
     "filterable": true 
    }, 
    { 
     "name": "kpi_collection", 
     "type": "Edm.String", 
     "searchable": false, 
     "sortable": false, 
     "facetable": false, 
     "retrievable": false, 
     "filterable": false 
    }, 
    { 
     "name": "rid", 
     "type": "Edm.String" 
    } 
    ], 
    "scoringProfiles": [ 
    { 
     "name": "boostEntity", 
     "text": { 
     "weights": { 
      "entity_id": 9, 
      "name": 8, 
      "description": 1 
     } 
     } 
    } 
    ], 
    "analyzers": [ 
    { 
     "name": "custom_analyzer", 
     "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer", 
     "tokenizer":"token1", 
     "tokenFilters": [ 
     "lowercase", 
     "entityID_stopWords", 
     "entityID_edgeNGram" 

     ] 
    } 
    ], 
    "tokenizers":[ 
    { 
     "name":"token1", 
     "@odata.type":"#Microsoft.Azure.Search.StandardTokenizerV2" 
    } 
    ], 
    "tokenFilters": [ 
    { 
     "name": "entityID_edgeNGram", 
     "@odata.type": "#Microsoft.Azure.Search.EdgeNGramTokenFilterV2", 
     "minGram": 1, 
     "maxGram": 6 
    }, 
    { 
     "name": "entityID_stopWords", 
     "@odata.type": "#Microsoft.Azure.Search.StopwordsTokenFilter", 
     "stopwords": [ 
     "store", 
     "region", 
     "zone", 
     "field_org", 
     ":" 
     ] 
    } 
    ] 
} 

und wenn ich diese Abfrage ausführen:

{ "search": "0001", "Filter": „ENTITY_TYPE eq 'store'“, "wählen": "Name, ENTITY_ID, ENTITY_TYPE, Beschreibung, aktiv, vorfahren", "count": "true"

}

Ich bekomme dieses Ergebnis, das ist richtig, weil es mit dem Namen übereinstimmt, der nach der Entitäts-ID einen hohen Wert hat.

"@odata.count": 1, 
"value": [ 
    { 
     "@search.score": 1.6654625, 
     "name": "LensCrafters 0001", 
     "entity_id": "store:1", 
     "entity_type": "store", 
     "description": "2130 Mall Road, Florence, 41042, KY, US", 
     "active": true, 
     "ancestors": [ 
      "region:1021", 
      "zone:1123", 
      "field_org:lenscrafters_na", 
      "ROOT" 
     ] 
    } 
] 

}

Aber wenn ich diese Abfrage ausführen

{ 
    "search": "1", 
    "filter": "entity_type eq 'store' ", 
    "select":"name,entity_id,entity_type,description,active,ancestors", 
    "count": "true" 

} 

ich dieses Ergebnis bekam die

{ 
      "@search.score": 1.4522386, 
      "name": "LensCrafters 1622", 
      "entity_id": "store:1622", 
      "entity_type": "store", 
      "description": "31625 Pacific Hwy S, SpC#E-1, Federal Way, 98003-5645, WA, US", 
      "active": true, 
      "ancestors": [ 
       "region:1024", 
       "zone:1107", 
       "field_org:lenscrafters_na", 
       "ROOT" 
      ] 
     }, 
     { 
      "@search.score": 1.3403159, 
      "name": "LensCrafters 1178", 
      "entity_id": "store:1178", 
      "entity_type": "store", 
      "description": "1 W FlatIron Crossing Dr #1104, Broomfield, 80021-8881, CO, US", 
      "active": true, 
      "ancestors": [ 
       "region:1019", 
       "zone:1122", 
       "field_org:lenscrafters_na", 
       "ROOT" 
      ] 
     }, 
     { 
............... 

Warum die resulat nicht korrekt ist nicht das, obwohl innen Scoring-Profil entity_is hat den Wert 9?

"@odata.count": 1, 
    "value": [ 
     { 
      "@search.score": 1.6654625, 
      "name": "LensCrafters 0001", 
      "entity_id": "store:1", 
      "entity_type": "store", 
      "description": "2130 Mall Road, Florence, 41042, KY, US", 
      "active": true, 
      "ancestors": [ 
       "region:1021", 
       "zone:1123", 
       "field_org:lenscrafters_na", 
       "ROOT" 
      ] 
     } 
    ] 
} 

Hier das Scoring-Profil?

"scoringProfiles": [ 
     { 
      "name": "boostEntity", 
      "text": { 
       "weights": { 
        "entity_id": 9, 
        "name": 8, 
        "description": 1 
       } 
      }, 
      "functions": [], 
      "functionAggregation": null 
     } 
    ],............. 

Antwort

0

Du einen eigenen Analysator auf dem ENTITY_ID Feld verwenden, das die folgenden Token für Text erzeugt store:1178: 1, 11, 117, 1178 (Sie können Ihre Gerätekonfiguration mit dem Analyze API testen). Das heißt, die Dokumente Lenscrafters 1622 und Lenscrafters 1178 Spiel die Abfrage sowie das Dokument Lenscrafters 0001 - sie alle in ENTITY_ID haben. Die Dokumente LensCrafters 1622 und LensCrafters 1178 entsprechen auch in Beschreibung. Daher haben sie eine höhere Punktzahl als LensCrafters 0001.

Weitere Informationen zur Abfrageverarbeitung und benutzerdefinierten Analysatoren in Azure Search finden Sie unter: How full text search works in Azure Search.

Möchten Sie den edgeNGram-Token-Filter in Ihrer Analysekette behalten? Warum?

Verwandte Themen