Show Menu

Sitecore Search Developers Cheat Sheet by

Sitecore search related day to day snippets
search     sitecore

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">

Download the Sitecore Search Developers Cheat Sheet

6 Pages
//media.cheatography.com/storage/thumb/kpatil_sitecore-search-developers.750.jpg

PDF (recommended)

Alternative Downloads

Share This Cheat Sheet!

 

Comments

arunsahu2468 arunsahu2468, 12:47 15 Jun 18

Hi Kpatil,

Your Sitecore Search Developers Cheat Sheet is very very useful for sitecore developer to make development easy and mostly it will save time. Thanks

Visit for Sitecore Development Service: https://www.raybiztech.com/solutions/epcm/sitecore

Add a Comment

Your Comment

Please enter your name.

    Please enter your email address

      Please enter your Comment.

          Related Cheat Sheets