2016-04-03 20 views
2

Ich experimentiere mit Azure Search. Ich habe einen Index mit einem Edm.Double Feld. Ich erstelle ein Bewertungsprofil, um dieses Feld über die Azure Search-REST-API zu erweitern. Derzeit habe ich:Wie ändere ich die Reichweite eines Feldes?

"scoringProfiles": [ 
    { 
    "name":"myProfile", 
    "functions": [ 
     { 
     "type":"magnitude", 
     "fieldName":"cost", 
     "boost": 2.5, 
     "magnitude": { 
      "boostingRangeStart":0, 
      "boostingRangeEnd":50 
     } 
     } 
    ] 
    } 
] 

Meine Herausforderung ist, ich weiß wirklich nicht, was die Reichweite meiner Daten sein. Ich möchte immer nur das Feld cost anheben. In C# weiß ich, dass ich die Werte Double.MinValue und Double.MaxValue verwenden könnte, um meine Reichweite zu erfassen. Ich bin mir jedoch nicht sicher, ob Azure Search solche Konstanten zur Verfügung hat. Ich bin mir auch nicht sicher, ob ich negative Zahlen in meinem Scoring-Profilbereich verwenden kann.

Gibt es eine Möglichkeit, ein Scoring-Profil über einen unbekannten Bereich von Werten zu definieren?

Antwort

0

In einem solchen Szenario wäre meiner Meinung nach eine Art von bucketing oder Hashing zum Kosten Wert anzuwenden sein. Oder erstellen Sie ein neues Attribut, das sich aus dem Bucketing des Kostenwerts ergibt (so können Sie weiterhin Kosten für das Anzeigen des Werts verwenden).

Sie können diesen Wert in C# berechnen (mit den Werten Double.MinValue und Double.MaxValue), bevor Sie das Element zum Index hinzufügen.

Es ist vielleicht nicht absolut zukunftssicher, aber Sie können immer anpassen, wenn ein neuer Eimer aufgrund eines neuen höheren Preises entsteht.

Auf diese Weise können Sie die Funktion vereinfachen, indem Sie vorher wissen, welche Buckets Sie entsprechend generieren und verstärken.

Die Magnitude-Funktion hat einen constantBoostBeyondRange, den Sie verwenden können, wenn es auch über das Ende des Bereichs hinausgeht.

+0

danke für Ihre Antwort. Ich habe versucht das 'constantBoostBeyondRange'-Flag, aber ich verstehe es nicht. Sagen wir, ich setze diese Flagge auf "wahr" und ich habe Gegenstände mit Kosten von 1,00, 3,00, 5,00, 7,00 und 10,00. Nun tu so, als wäre mein 'boostingRangeStart' 3.00 und mein' boostingRangeEnd' ist 7.00. Ich gehe davon aus, dass die Ergebnisse mit Kosten von 3,00 $, 5,00 $ und 7,00 $ erhöht werden. Aber was ist mit den Ergebnissen mit den Kosten von 1,00 und 10,00? Werden sie beim Boosten ignoriert? Werden $ 1,00 und $ 10,00 immer noch erhöht? Ist der eine mehr aufgeladen als der andere? Werden die $ 10,00 erhöht, aber nicht die $ 1,00? –

+0

Kurz gesagt, ich verstehe nicht, was die Auswirkungen der "constantBoostBeyondRange" -Flag für was ist oder was es tut. Danke für Ihre Hilfe. –

+0

[Aus den Dokumenten] (https://msdn.microsoft.com/en-us/library/azure/dn798928.aspx): * Wenn der Wert auf "true" gesetzt ist, wird der volle Boost weiterhin auf Dokumente angewendet, die einen Wert haben für das Zielfeld, das höher als das obere Ende des Bereichs ist. Wenn false, wird der Boost dieser Funktion nicht auf Dokumente mit einem Wert für das Zielfeld angewendet, der außerhalb des Bereichs liegt. * –

Verwandte Themen