Strukturerad sökning

Söksidan, EPiServer

Strukturerad information kan enkelt kombineras med fritextsökfrågor, vilket är idealiskt i många sammanhang, t.ex. e-handelsplatser, kurskataloger eller personalkataloger.

I detta exempel visar vi hur du kan kombinera strukturerad och ostrukturerad data i sökningen. Exemplet utgår från att vi har en mängd bostadsobjekt som ska göras sökbara, och besökaren ska kunna göra ett urval baserat dels på fritexttermer och dels på egenskaper, och slutligen ska träffarna kunna sorteras av användaren.

Nedanstående kodexempel gäller för version 3.4 och tidigare av SiteSeeker-integrationen för EPiServer. Kodexempel för version 4 och senare av SiteSeeker-integrationen för EPiServer och .NET finns i detta inlägg om sortering på Sökmotorbloggen. Instruktionerna nedan gällande Admin gäller dock även för den nya integrationen.

Mål

  • Målet för detta exempel är att göra en träfflista som visar bostadsobjekt i en tabell, med möjlighet att sortera tabellen genom att klicka på dess kolumnrubriker.
  • Varje rad i tabellen visar dels objektets titel, dels ett antal andra fält såsom storlek, pris och antal trappor. Något vanligt textutdrag visas alltså inte.

Exempel på visning av träffar med strukturerade egenskaper i tabellform. Genom att klicka på kolumnrubrikerna kan man sortera träffarna efter respektive kolumn i stigande eller fallande ordning.

Förberedelser

  1. Börja med att se till att du har en fungerande EPiServer-miljö, exempelvis med EPiServers exempelmallar installerade ("Public"-temat).
  2. Installera sökintegrationen för EPiServer enligt installationshandledningen.
  3. Slutligen krävs en SiteSeeker-klient.

Gör så här

  1. Skapa en sidtyp för bostadsobjekt (t.ex. genom att göra en kopia av en standardsida). Lägg till följande egenskaper:
    Area – heltal
    Floor – flyttal
    Price – heltal
    
  2. Lägg till en platshållare för metataggar i MasterPage-filen:
    <asp:ContentPlaceHolder ID="HtmlHeadArea" runat="server" />
    
  3. I sidtypen för bostadsobjekten, lägg till följande metataggar:
    <asp:Content ContentPlaceHolderID="HtmlHeadArea" runat="server">
        <meta name="Area" content="<%= (CurrentPage["Area"] != null)?HttpUtility.HtmlEncode(CurrentPage["Area"].ToString()):string.Empty %>" />
        <meta name="Floor" content="<%= (CurrentPage["Floor"] != null)?HttpUtility.HtmlEncode(CurrentPage["Floor"].ToString()):string.Empty %>" />
        <meta name="Price" content="<%= (CurrentPage["Price"] != null)?HttpUtility.HtmlEncode(CurrentPage["Price"].ToString()):string.Empty %>" />
        <meta name="Address" content="<%= HttpUtility.HtmlEncode(CurrentPage.PageName) %>" />
    </asp:Content>
  4. Notera hur vi använder sidans namn för bostadsobjektets adress, detta kan också anges som en separat egenskap.
  5. Kompilera om din webbplatslösning.
  6. Skapa ett antal bostadsobjekt, och ange olika värden för de egenskaper du har lagt till.
  7. Logga in i SiteSeeker Admin, och klicka på "Servrar". Lägg till en server för din webbplats (om den inte redan finns). Klicka sedan på "Metainformation".
  8. I fältet "Övriga metaattribut och typade metaattribut", lägg till följande:
    int:Area
    float:Floor
    int:Price
    string:Address
    
  9. Starta en indexering (sidhämtningsläge full), och kontrollera att den slutförs.
  10. Öppna projektfilen för SiteSeeker-integrationen för EPiServer. I detta exempel förutsätter vi att du inte önskar ändra de medföljande klasserna, och att integrationen är installerad enligt installationshandledningen.
  11. Skapa en kopia av klassen Find (dvs. filerna Find.aspx, Find.aspx.cs och Find.aspx.designer.cs) – vi kallar här kopian av klassen FindResidence.
  12. Skapa en kopia av klassen Result (dvs. filerna Result.ascx, Result.ascx.cs och Result.ascx.designer.cs) – vi kallar här kopian av klassen ResidenceResult.
  13. Öppna filen ResidenceResult.ascx, och lokalisera repeatern med ID:t "SearchResult".
  14. Ta bort alla mallar från repeatern SearchResult, och ersätt dessa med följande kod:
    <asp:Repeater ID="SearchResult" runat="server" EnableViewState="false">
        <HeaderTemplate>
            <table>
                <thead>
                    <tr>
                        <th>
                            <asp:HyperLink NavigateUrl='<%# GetSortLink("address") %>' runat="server">Adress</asp:HyperLink></th>
                        <th>
                            <asp:HyperLink NavigateUrl='<%# GetSortLink("area") %>' runat="server">Boyta</asp:HyperLink></th>
                        <th>
                            <asp:HyperLink NavigateUrl='<%# GetSortLink("floor") %>' runat="server">Våning</asp:HyperLink></th>
                        <th>
                            <asp:HyperLink NavigateUrl='<%# GetSortLink("price") %>' runat="server">Pris</asp:HyperLink></th>
                    </tr>
                </thead>
                <tbody>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td>
                    <asp:HyperLink NavigateUrl='<%# Eval("Url") %>' runat="server"><%# Eval("Title") %></asp:HyperLink>
                </td>
                <td>
                    <%# ((HitDTO)Container.DataItem).MetaAttributes.GetIntegerValue("Area") %>
                </td>
                <td>
                    <%# ((HitDTO)Container.DataItem).MetaAttributes.GetFloatValue("Floor") %>
                </td>
                <td>
                    <%# ((HitDTO)Container.DataItem).MetaAttributes.GetIntegerValue("Price") %>
                </td>
            </tr>
        </ItemTemplate>
        <FooterTemplate>
            </tbody></table>
        </FooterTemplate>
    </asp:Repeater>
    
  15. Redigera filen ResidenceResult.ascx.cs (dvs. "code behind" för ovanstående fil), och lägg till följande funktion:
    protected string GetSortLink(string column)
    {
        SiteSeeker.Util.UrlBuilder url = new SiteSeeker.Util.UrlBuilder(Connector.ModuleContext.CurrentUrl, Request.QueryString);
        if (Request["sort"] != null && Request["sort"] == "meta:" + column)
            url.SetParam("sort", "reverse:meta:" + column);
        else
            url.SetParam("sort", "meta:" + column);
        return url.ToString();
    }
    
  16. Redigera slutligen filen FindResidence.aspx.cs, och lägg till följande rader i metoden OnInit:
    mainConnector.MetaAttributesEnabled = true;
    if (!string.IsNullOrEmpty(Request["sort"]))
        mainConnector.QueryExtension = "hidden:sort:" + Request["sort"];
    
  17. Kompilera nu om lösningen, och skapa en sidtyp för den nya söksidan (som använder FindResidence.aspx som mall).
  18. Nu kan du skapa en bostadssöksida, och efter att ha gjort det kan du ställa sökfrågor och därefter sortera om träfflistan efter respektive egenskap.

Sammanfattning

Vi skapade en sökresultatsida där ett antal strukturerade egenskaper visas för varje träff, och där det är möjligt att sortera träffarna både i stigande och fallande ordning efter respektive strukturerad egenskap. En lösning som denna inbegriper:

  • Skapa innehållsobjekt med strukturerad data, och mata ut denna som metataggar.
  • Indexera dessa strukturerade egenskaper genom att ange dem i SiteSeeker Admin.
  • Skriv ut egenskaperna i respektive träff.
  • Skapa möjlighet att sortera träffarna efter egenskaperna genom att introducera sorteringslänkar, och skicka vald sorteringsordning till SiteSeeker.