ContentSearch Deep dive
2
Waarvoor in te zetten? Alternatief voor database queries Waar performance een issue kan zijn Daadwerkelijk frontend Site Search Mogelijk niet de beste optie maar wel goedkoop en geïntegreerd Faceting 3
4
5
When you need to index large numbers of items (50,000 and up), Solr performs better Solr is more robust. If your site depends on search as the primary interface, consider using Solr. If you use multiple content delivery servers (or plan to do so later), use Solr. You could use Lucene, but you have to make sure that indexes are synchronized across servers yourself. Bron: https://doc.sitecore.net/sitecore_experience_platform/search_and_indexing/using_solr_or_lucene 6
Index configuratie Standaard config kan als basis gebruikt worden voor custom index Bijv: Sitecore.ContentSearch.Lucene.Index.Web.config) Uit welke database moeten items komen? Kies de juiste UPDATE-STRATEGY (onpublishendasync voor web db) 7
Path: \app_config\include\customername\contentsearch.sitesearch.config 8
Index configuratie Extra (base)configuratie nodig? Overerf zoveel mogelijk standaard base configuratie met REF attribuut 9
Path: \app_config\include\customername\contentsearch.baseconfiguration.config 10
Computed fields Custom velden in de index plaatsen (waar code voor uitgevoerd moet worden) In eerdere versies vaak custom crawlers voor gebruikt 11
Computed fields - Voorbeeld Multilist/Lookup veld target items opslaan als tekst i.pv. Id s Uitgevoerd d.m.v een generiek computed field genaamd LookupFieldValue 12
Computed fields config In base configuration: 13
14
Computed fields voorbeeld II Veld met meerdere datum entries als string. We willen date range queries kunnen doen. 15
Computed fields voorbeeld II <fieldnames hint="raw:addfieldbyfieldname"> (onder fieldmap) <fields hint= raw:addcomputedindexfield > 16
Computed fields voorbeeld II In Computed Field code een lijst van DateTime opbouwen en retourneren: return dates.any()? dates : null; 17
Het date index veld in LUKE 18
Date query voorbeeld 19
Analyzers / tokenizers Analyzers bestaan uit Tokenizers & Filters An Analyzer builds TokenStreams, which analyze text. It thus represents a policy for extracting index terms from text. 20
Voorbeeld StandardTokenizer I sit in a cubicle all day I sit in a cubicle all day 21
Filters Bijvoorbeeld STOP Word filter LowerCaseFilter (gebruikt door StandardAnalyzer) 22
Voorbeeld van analyzer 23
Custom tokenizer Voorbeeld case 24
Custom Tokenizer Generieke query code 25
Items uitsluiten o.b.v Path Voorbeeld case: Hoe kan ik bepaalde content tree paden uitsluiten voor een index? Moet configurabel zijn: <exclude hint="list:excludepaths"> <ArchiefEvenementen>/sitecore/content/Data/Evenementen/Archief</OudeEvenementen> <Onderwijs>/sitecore/content/Data/Onderwijs</Onderwijs> </exclude> 26
Items uitsluiten o.b.v Path Inbound/outbound filters Wat mag er in (tijdens indexeren) en uit de index komen (tijdens queryen) Globaal, effectief voor alle indexes Custom crawler Per index in te stellen. Flexibeler. 27
28
Generieke query code Herbruikbare query code voor verschillende soorten zoekresultaten Moet meerdere type SearchItem classes ondersteunen 29
SearchApi.Current.GetSearchResults<NatuurgebiedSearchResult>(context, Sitecore.Con.. SearchApi.Current.GetSearchResults<RouteSearchResult>(context, Sitecore.Con.. 30
Standaard query wijze. Bruikbaar bij een enkel type zoekresultaat of als zoekresultaten dezelfde base class hebben. Gebruikt property van Result class var provinciequery = PredicateBuilder.False<NatuurgebiedSearchResult>(); provinciequery = provinciequery.or(x => x.provincieveld == "gelderland"); q = q.where(provinciequery); Als niet alle resultaten classes waar de code voor wordt uitgevoerd deze property hebben moet ObjectIndexerKey gebruikt worden + string: var routetypequery = PredicateBuilder.False<T>(); routetypequery = routetypequery.or(x => x[(objectindexerkey)"routetype"] == "fietsen"); q = q.where(routetypequery); 31
Boosts Titel veld boosten predicate = predicate.or(sr => sr.titlefield.matchwildcard(searchterm + "*").Boost(5.5f)); 32
GEO search Zoeken in straal van X kilometer op basis van longitude/latitude coördinaten https://github.com/aokour/sitecore.conte ntsearch.spatial 33
Glassmapper & SC Search Het is mogelijk om GlassMapper & ContentSearch model te combineren en eventueel ook direct te gebruiken in een view. 34
Glassmapper & SC Search 35
Glassmapper & SC Search http://glass.lu/mapper/sc/tutorials/tutori al25 36
ContentSearch Deep dive