2017-09-20 13 views
7

Actuellement, j'essaie le SDK Azure Search. Ayant une solide expérience de travail avec lucene et bobobrowse, la recherche Azure est assez fantastique et a beaucoup de fonctionnalités des deux cadres hors de la boîte. La seule chose que je suis curieux avec est d'obtenir la valeur minimum et maximum d'un élément de facette numérique. Intentionnellement, je ne veux pas utiliser le interval parameter ni le value lists:Azure Recherche: échelle de prix - Calcul de la valeur min & max

Azure Facet Navigation

Mon exigence est d'afficher la facette de prix avec un minimum calculé et la valeur maximale. site Web suivant a une telle facette dans leur liste de facettes:

Price Range

Dans mon I utilisé avec succès BoboBrowse cadre application de bureau existant (.Net) et mis en place un Custom-FacetHandler pour obtenir les résultats souhaités qui sont présentés dans le tableau suivant ci-dessous:

MultiValue Facet Handler Result

jamais l'esprit les valeurs de facette dans ces images. Ce sont juste la longueur, la hauteur et d'autres valeurs caractéristiques des outils.

Voici comment je construis un document à des fins de démonstration. Il y a un champ de prix qui est généré dynamiquement. En raison de la recherche azur a besoin d'un schéma fortement fixé pour chaque index. Je mets à jour le schéma dans le processus d'indexation. Cela fonctionne très bien.

Price Field

La question est de savoir comment puis-je obtenir la fonctionnalité requise à la recherche d'azur? Dans la recherche élastique, un tel problème peut être résolu en utilisant Aggregations. Cette fonctionnalité existe-t-elle dans Azure Search?

+0

Bien que je n'ai pas de réponse pour vous, je peux vous dire que les agrégations ne sont pas pris en charge dans Azure Search. Voir ici (https://feedback.azure.com/forums/263029-azure-search/suggestions/8382225-add-aggregations-functionality) – Kolichikov

Répondre

1

Le paramètre $filter prend en charge les opérateurs lt (inférieur à) et gt (supérieur à). Par exemple: $filter=price gt 0 and price lt < 100

Exemple de code:

string PriceFilter(double? fromPrice, double? toPrice) 
{ 
    var filter = "$filter="; 
    if(fromPrice.HasValue) 
      filter+="price gt " + fromPrice.Value.ToString() 
       + (toPrice.HasValue ? " and " : ""); 
    if(toPrice.HasValue) 
      filter+="price lt " + toPrice.Value.ToString(); 
    return filter; 
} 

Référence: Build a filter for a range

+0

Seulement pour l'opération de filtrage c'est correct mais je cherche un moyen d'obtenir le valeurs minimum et maximum lors de la demande des facettes de plage réelles – Sneijder