2017-09-20 64 views
7

Obecnie testuję pakiet SDK usługi Azure Search. Posiadając silne doświadczenie w pracy z lucene i bobobrowse, usługa Azure Search jest fantastyczna i ma wiele funkcji z obu frameworków.Wyszukiwanie Azure: zakres cen - obliczanie wartości minimalnej i maksymalnej

Jedyne, o czym się zastanawiam, to uzyskać minimalną i maksymalną wartość elementu numerycznego. Przez intencji, nie chcę używać interval parameter ani value lists:

Azure Facet Navigation

Moje wymogiem jest, aby wyświetlić aspekt cen z obliczonej wartości minimalnej i maksymalnej. W następstwie strona ma taki aspekt w swoim liście fasetowanie:

Price Range

W mojej istniejącej aplikacji desktopowej (.NET) z powodzeniem używane BoboBrowse ramy i wdrożył Custom-FacetHandler do uzyskania pożądanych wyników, które są pokazane na poniższym rysunku poniżej:

MultiValue Facet Handler Result

Nieważne wartości fazowane wewnątrz tych obrazów. Są to tylko długość, wysokość i inne charakterystyczne wartości narzędzi.

W ten sposób buduję jeden dokument do celów demonstracyjnych. Jest pole cenowe, które jest generowane dynamicznie. Z powodu wyszukiwania w kolorze lazurowym wymagany jest mocno poprawiony schemat dla każdego indeksu. Aktualizuję schemat w ramach procesu indeksowania. Działa to bardzo dobrze.

Price Field

Więc pytanie brzmi jak mogę osiągnąć wymaganą funkcjonalność z lazurowym wyszukiwania?

W wyszukiwaniu elastycznym taki problem można rozwiązać, korzystając z Aggregations. Czy ta funkcja istnieje w usłudze Azure Search?

+0

Chociaż nie mam dla ciebie odpowiedź, mogę powiedzieć, że agregacja nie są obsługiwane w Azure Search. Zobacz tutaj (https://feedback.azure.com/forums/263029-azure-search/suggestions/8382225-add-aggregations-functionality) – Kolichikov

Odpowiedz

1

Parametr $filter obsługuje operatory lt (mniej niż) i gt (większe niż). Na przykład: kod $filter=price gt 0 and price lt < 100

Sample:

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; 
} 

referencyjny: Build a filter for a range

+0

Tylko dla operacji filtrowania jest to poprawne, ale szukam sposobu na uzyskanie wartości minimalne i maksymalne podczas żądania rzeczywistych aspektów zasięgu – Sneijder