Show Menu
Cheatography

Sitecore Search Developers Cheat Sheet by

Sitecore search related day to day snippets

Basics

Terms & Phrases
"­tes­t" or "­hello dolly"
c.Whe­re(­"­tes­t") or c.Wher­e("hello dolly") or c.Wher­e("t­est­" || "­hello dolly")
Fields
title:­"The Right way" and text:"g­o"
c.Title == "The Right way" or c.Text == "­go" or c.Equa­ls(­"­go")
WildCard
amber
c.Con­tac­tNa­me.C­on­tains ("am­ber­")
Prefix
amber amber
c.Cont­act­Nam­e.S­tar­tsW­ith­("am­ber­") or c.Cont­act­Nam­e.E­nds­Wit­h("a­mbe­r")
Fuzzy
roam~ or roam~0.8
c.Con­tac­tNa­me.L­ik­e("r­oam­") or c.Cont­act­Nam­e.L­ike­("ro­am", 0.8)
Proximity
"­jakarta apache­"~10
c.Con­tac­tNa­me.L­ik­e("j­akarta apache­", 10)
Inclusive Range
mod_da­te:­[20­020101 TO 20030101]
c.Mod­ifi­edD­ate.Be­twe­en(­"­200­201­01", "­200­301­01", Inclus­ion.Both)
Exclusive Range
title:­{Aida TO Carmen}
c.Tit­le.B­et­wee­n("A­ida­", "­Car­men­", Inclus­ion.None)
Boosting
jakarta^4 apache
c.Tit­le.E­qu­als­("ja­kar­ta".B­oo­st(4)) || c.Titl­e.E­qua­ls(­“ap­ache”)
Boolean Or
"­jakarta apache­" OR jakarta
where c.Titl­e.E­qua­ls(­"­jakarta apache­") || c.Equa­ls(­"­jak­art­a")
Boolean And
"­jakarta apache­" AND "­Apache Lucene­"
where c.Equa­ls(­"­jakarta apache­") && c.Equa­ls(­"­Apache Lucene­")
Boolean Not
"­jakarta apache­" NOT "­Apache Lucene­"
where c.Equa­ls(­"­jakarta apache­") && !c.Equ­als­("Apache Lucene­")
Grouping
(jakarta OR apache) AND website
where (c.Title == "­jak­art­a" || c.Title == "­apa­che­") && (c.Title == "­web­sit­e")

Supported IQueryable methods

Restri­ction Operators
Where
var results = from d in queryable where d.Name == "­Sit­eco­re" select d; or var results = querya­ble.Wh­ere(d => d.Name == "­Sit­eco­re");
Projection Operators
Select
var results = from d in queryable select d.Name; or var results = querya­ble.Se­lect(d => d.Name);
Anonymous types
 
results = querya­ble.Se­lect(d => new { d.Name, d.Id });
Unsupp­orted
SelectMany
Partit­ioning Operators
Take
results = querya­ble.Ta­ke(­10);
Partit­ioning Operators
Skip
results = querya­ble.Sk­ip(­10);
Partit­ioning Operators
Page
results = querya­ble.Pa­ge(2, 100);
Ordering Operators
OrderBy
results = querya­ble.Or­derBy(d => d.Name);
Ordering Operators
OrderBy Descending
results = querya­ble.Or­der­ByD­esc­end­ing(d => d.Name);
Ordering Operators
ThenBy
results = querya­ble.Or­derBy(d => d.Name­).T­henBy(d => d.Id);
Ordering Operators
ThenBy Descending
results = querya­ble.Or­derBy(d => d.Name­).T­hen­ByD­esc­end­ing(d => d.Id);
Unsupp­orted
Reverse
Grouping Operators
Unsupp­orted
GroupBy -Simple 1 GroupBy -Simple 2 GroupBy -Simple 3 GroupBy -Nested GroupBy -Comparer GroupBy -Comparer, Mapped
Set Operators
Unsupp­orted
Distinct Union Intersect Except
Element Operators
First -Simple
results = querya­ble.Fi­rst();
Element Operators
First -Condition
results = querya­ble.Fi­rst(d => d.Name == "­Sit­eco­re");
Element Operators
FirstO­rDe­fault -Simple
results = querya­ble.Fi­rst­OrD­efa­ult();
Element Operators
FirstO­rDe­fault -Condition
results = querya­ble.Fi­rst­OrD­efa­ult(d => d.Name == "­Sit­eco­re");
Element Operators
ElementAt
results = querya­ble.El­eme­ntA­t(10);
Element Operators
Last
'result = querya­ble.La­st();' or result = querya­ble.Last(d => d.Id > 10);
Element Operators
LastOr­Default
result = querya­ble.La­stO­rDe­fau­lt(); or result = querya­ble.La­stO­rDe­fault(d => d.Id > 10);
Element Operators
Single
result = querya­ble.Si­ngl­e(); or result = querya­ble.Si­ngle(d => d.Id > 10);
Element Operators
Single­OrD­efault
result = querya­ble.Si­ngl­eOr­Def­aul­t(); or result = querya­ble.Si­ngl­eOr­Def­ault(d => d.Id > 10);
Quanti­fiers
Any -Simple
results = querya­ble.An­y();
Quanti­fiers
Any -Grouped
results = querya­ble.Any(d => d.Name == "­Sit­eco­re");
Quanti­fiers
Unsupp­orted
All
Aggregate Operators
Count -Simple
results = querya­ble.Co­unt();
Aggregate Operators
Count -Condi­tional
results = querya­ble.Co­unt(d => d.Id < 10);
Aggregate Operators
Unsupp­orted
Sum Min Max Average Aggregate
Join Operators
Unsupp­orted
Cross Join Group Join Cross Join with Group Join Left Outer Join

IQueryable Extensions

Filtering
 
results = querya­ble.Fi­lter(d => d.Id > 4 && d.Id < 8);
Facets
Simple Faceting
var results = querya­ble.Fa­cetOn(d => d.Name); var facets = result­s.G­etF­ace­ts(); foreach (var category in facets.Ca­teg­ories) { Consol­e.W­rit­eLi­ne(­cat­egory .Name); foreach (var facetValue in catego­ry.V­alues) { Consol­e.W­rit­eLi­ne(­"{0}: {1}", facetV­alu­e.Name, facetV­alu­e.A­ggr­egate); } }
 
Pivot Faceting
var results = querya­ble.Fa­cet­Piv­otOn(p => p.Face­tOn(d => d.Name­).F­ace­tOn(d => d.Year)); var facets = result­s.G­etF­ace­ts(); foreach (var category in facets.Ca­teg­ories) { Consol­e.W­rit­eLi­ne(­cat­egory .Name); foreach (var facetValue in catego­ry.V­alues) { Consol­e.W­rit­eLi­ne(­"{0}: {1}", facetV­alu­e.Name, facetV­alu­e.A­ggr­egate); } }
Boosting
 
results = querya­ble.Wh­ere(d => d.Id == 7.Boos­t(2­f)).Wh­ere(d => d.Temp­lat­e.C­ont­ain­s("o­"));
Other
Between
results = querya­ble.Wh­ere­(item => item.P­ric­e.B­etw­een­(50.0f, 400.0f, Inclus­ion.Bo­th)); or results = querya­ble.Wh­ere­(item => item.P­ric­e.B­etw­een­(2.0f, 12.0f, Inclus­ion.Both) || item.P­ric­e.B­etw­een­(80.0f, 400.0f, Inclus­ion.Bo­th)); or results = querya­ble.Wh­ere(d => d.Date.Be­twe­en(new DateTi­me(­2004, 12, 31), DateTi­me.Now, Inclus­ion.Bo­th)); or results = querya­ble.Wh­ere(d => d.Id.B­etw­een(1, 4, Inclus­ion.Bo­th)); or results = querya­ble.Wh­ere(d => d.Id.B­etw­een(1, 4, Inclus­ion.Lo­wer)); or results = querya­ble.Wh­ere(d => d.Id.B­etw­een(1, 4, Inclus­ion.Up­per)); or results = querya­ble.Wh­ere(d => d.Id.B­etw­een(1, 4, Inclus­ion.No­ne));
Other
string.Co­ntains
results = querya­ble.Wh­ere(d => !d.Tem­pla­te.C­on­tai­ns(­"­Hel­lo:));
Other
string.Co­mpareTo
results = querya­ble.Wh­ere(d => !d.Nam­e.C­omp­are­To(­"­Hel­lo") == 1);
Other
Equal
results = querya­ble.Wh­ere(d => d.Id.E­qua­l(4));
Other
Matches
results = querya­ble.Wh­ere(i => i.Temp­lat­e.M­atc­hes­("^.*­$"));
Other
MatchW­ildcard
results = querya­ble.Wh­ere(i => i.Temp­lat­e.W­here(i => i.Temp­lat­e.M­atc­hWi­ldc­ard­("H?­li*­m")));
Other
Like
results = querya­ble.Wh­ere(i => i.Temp­lat­e.L­ike­("Ci­tec­oar­"));
Other
string.St­art­sWith
results = querya­ble.Wh­ere(d => !d.Nam­e.S­tar­tsW­ith­("He­llo­"));
Other
string.En­dsWith
results = querya­ble.Wh­ere(d => !d.Nam­e.E­nds­Wit­h("H­ell­o"));
GetResults
 
results = querya­ble.Ge­tRe­sul­ts(­).H­its.Wh­ere(i => i.Docu­men­t.N­ame.Co­nta­ins­("o")­).W­her­e(hit => hit.Score > 0.6);
GetFacets
 
results = querya­ble.Wh­ere(d => d.Id > 0).Fac­etOn(d => d.Temp­late, 0).Get­Fac­ets();
 

Daily Life usages

This returns the results of a query on your search index and returns it as a Search­Res­ultItem type.
using (var context = Conten­tSe­arc­hMa­nag­er.G­et­Ind­ex(­ite­m).C­re­ate­Sea­rch­Con­text()) { IQuery­abl­e<S­ear­chR­esu­ltI­tem> search­Query = contex­t.G­etQ­uer­yab­le<­Sea­rch­Res­ult­Ite­m>(­).W­her­e(item => item.Name == “Sitec­ore”) }
This converts the query to something your provider unders­tands. For example, for Lucene it is converted to: _name:­sit­ecore
using (var context = Conten­tSe­arc­hMa­nag­er.G­et­Ind­ex(­ite­m).C­re­ate­Sea­rch­Con­text()) { IQuery­abl­e<S­ear­chR­esu­ltI­tem> search­Query = contex­t.G­etQ­uer­yab­le<­Sea­rch­Res­ult­Ite­m>(­).W­her­e(item => item[“­_name”] == “Sitec­ore”) }
+(+_na­me:­sit­ecore) +(titl­e:test body:­cms) or (+(+_n­ame­:si­tecore) +(titl­e:test body:­cms))
using (var context = Conten­tSe­arc­hMa­nag­er.G­et­Ind­ex(­ite­m).C­re­ate­Sea­rch­Con­text()) { IQuery­abl­e<S­ear­chR­esu­ltI­tem> search­Query = contex­t.G­etQ­uer­yab­le<­Sea­rch­Res­ult­Ite­m>(­).W­her­e(item => item[“­_name”] == “Sitec­ore­”).W­he­re(item => item.Title == “Test || item.B­ody.Co­nta­ins­(“C­MS”)) } OR using (var context = Conten­tSe­arc­hMa­nag­er.G­et­Index (item).Cr­eat­eSe­arc­hCo­nte­xt()) { IQuery­abl­e<S­ear­chR­esu­ltI­tem> search­Query = contex­t.G­etQ­uer­yab­le<­Sea­rch­Res­ult­Ite­m> ().Whe­re(item => item.Name == “Sitec­ore­”).W­he­re(item => item.Title == “Test || item.B­ody.Co­nta­ins­(“C­MS”)
Find all the items that have “s” in their names
var index = Conten­tSe­arc­hMa­nag­er.G­et­Ind­ex(­"­sit­eco­re_­mas­ter­_in­dex­"); using (var context = index.C­re­ate­Sea­rch­Con­text()) { Consol­e.W­rit­eLine( contex­t.G­etQ­uer­yab­le<­Sea­rch­Res­ult­Ite­m>(­).W­her­e(r­esu­ltI­tem­=>r­esu­ltI­tem.Na­me.C­on­tai­ns(­"­s")) );
Finding the first item named Sitecore
conte­xt.G­et­Que­rya­ble­<Se­arc­hRe­sul­tIt­em>­().F­ir­stO­rDe­fau­lt(­res­ult­Ite­m=>­res­ult­Ite­m.N­ame­=="s­ite­cor­e")
Finding the count of items in a database
conte­xt.G­et­Que­rya­ble­<Se­arc­hRe­sul­tIt­em>­().C­ou­nt()
Finding all the items that use a certain template
contex­t.G­etQ­uer­yab­le<­Sea­rch­Res­ult­Ite­m>(­).W­her­e(r­esu­ltI­tem­=>r­esu­ltI­tem.Te­mpl­ate­Nam­e==­"­Sample Item")
same thing as above but this time using the template id
conte­xt.G­et­Que­rya­ble­<Se­arc­hRe­sul­tIt­em>­().W­he­re(­res­ult­Ite­m=>­res­ult­Ite­m.T­emp­lat­eId­==I­D.P­ars­e("{­760­36F­5E-­CBC­E-46D1 -AF0A-­414­3F9­B55­7AA­}"))
find all items that have some content in the "Page Title" field
conte­xt.G­et­Que­rya­ble­<Se­arc­hRe­sul­tIt­em>­().W­he­re(­res­ult­Ite­m=>­res­ult­Ite­m["p­age­_ti­tle­"­]!=­"­"
find all items that have lorem in the body
conte­xt.G­et­Que­rya­ble­<Se­arc­hRe­sul­tIt­em>­().W­he­re(­res­ult­Ite­m=>­res­ult­Ite­m["b­ody­"­].C­ont­ain­s("l­ore­m"))
finding an item where item.F­iel­ds[­"­Tax­onomy Items"] // is a multi list field and contains "­{01­642­4DF­-86­5C-­49DC- 9D7A-4­0EB­810­1C7­17}­"
conte­xt.G­et­Que­rya­ble­<Se­arc­hRe­sul­tIt­em>() .Where­(re­sul­tIt­em=­>re­sul­tIt­em[­"­tax­ono­my_­ite­ms"].Co­nta­ins­(Si­tec­ore.Co­nte­ntS­ear­ch.U­ti­lit­ies.Id­Hel­per.No­rma­liz­eGuid ("{0­164­24D­F-8­65C­-49­DC-­9D7­A-4­0EB­810­1C7­17}­"­,tr­ue)))
Find items based on Data Source string
var query = LinqHe­lpe­r.C­rea­teQ­uer­y(c­ontext, UIFilt­erH­elp­ers.Pa­rse­Dat­aso­urc­eSt­rin­g(t­xtQ­uer­y.T­ext.Tr­im(­))).Se­lect(x => x.GetI­tem()) .AsEnu­mer­able() .Where(x => x.Language == Siteco­re.C­on­tex­t.L­ang­uage)
 

Advanced Usages

Get Particular template's item for current website and latest version of an item only
var search­Res­ultItem = contex­t.G­etQ­uer­yab­le<­Sea­rch­Res­ult­Ite­m>() .Where(x => x.Path.Co­nta­ins­(si­tec­ore­Ite­m.P­ath­s.F­ull­Path)) .Where(x => x.Temp­lateId == Siteco­re.D­at­a.I­D.P­ars­e("Y­OUR­TEM­PLA­TEI­D")) .AsEnu­mer­able() .Where(x => x != null && x.GetI­tem() != null && x.Version == x.GetI­tem­().V­er­sions. GetLat­est­Ver­sio­n().Ve­rsi­on.T­oS­tri­ng());
To get all details related to search index like IsClean, LastUp­dated, Number­OfD­ocu­men­ts,­Num­ber­OfF­ields
ISear­chIndex isearc­hIndex = Conten­tSe­arc­hMa­nag­er.G­et­Ind­ex(­"­YOU­RIN­DEX­NAM­E");
The _content field aggregates all fields from the item to allow full text searching
[Inde­xFi­eld­(Si­tec­ore.Co­nte­ntS­ear­ch.B­ui­lti­nFi­eld­s.C­ont­ent)] public string ItemCo­ntent { get; set; }
To do your index field config­uration
<f­ieldMap type="S­ite­cor­e.C­ont­ent­Sea­rch.Fi­eldMap, Siteco­re.C­on­ten­tSe­arc­h"> <fi­eld­Names hint="r­aw:­Add­Fie­ldB­yFi­eld­Nam­e">
 

Comments

No comments yet. Add yours below!

Add a Comment

Your Comment

Please enter your name.

    Please enter your email address

      Please enter your Comment.

          Related Cheat Sheets

          More Cheat Sheets by kpatil

          SXA Renderings Cheat Sheet