Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Finding your High with Low Search
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Lodewijk Schutte
October 04, 2016
Programming
380
0
Share
Finding your High with Low Search
An introduction to Low Search for ExpressionEngine, given at EEconf 2016.
Lodewijk Schutte
October 04, 2016
More Decks by Lodewijk Schutte
See All by Lodewijk Schutte
Errare Humanum Est
low
2
470
So, you wanna build an add-on...
low
1
95
Parse Order Pro
low
2
670
PHP in Templates: Pain or Pleasure
low
0
200
Ajax and ExpressionEngine
low
1
120
Other Decks in Programming
See All in Programming
アクセシビリティ試験の"その後"を仕組み化する
yuuumiravy
1
190
How We Practice Exploratory Testing in Iterative Development( #scrumniigata ) / 反復開発の中で、探索的テストをどう実施しているか
teyamagu
PRO
3
690
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
130
ローカルLLMでどこまでコードが書けるか / How much code can be written on a local LLM
kishida
2
310
〜バイブコーディングを超えて〜 チームで実験し続けたAI駆動開発
tigertora7571
0
190
10 Tips of AWS ~Gen AI on AWS~
licux
5
540
Symfony AI in Action - SymfonyLive Berlin 2026
chr_hertel
1
120
AgentCore Optimizationを始めよう!
licux
3
200
20260514 - build with ai 2026 - build LINE Bot with Gemini CLI
line_developers_tw
PRO
0
210
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
4
440
「OSSがあるなら自作するな」は AI時代も正しいか ── Build vs Adopt の新しい判断基準
kumorn5s
4
1.1k
Import assertionsが消えた日~ECMAScriptの仕様はどう決まり、なぜ覆るのか~
bicstone
2
180
Featured
See All Featured
Test your architecture with Archunit
thirion
1
2.2k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
190
Designing for humans not robots
tammielis
254
26k
Paper Plane
katiecoart
PRO
1
49k
What's in a price? How to price your products and services
michaelherold
247
13k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Google's AI Overviews - The New Search
badams
0
1k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.7k
Automating Front-end Workflow
addyosmani
1370
200k
Writing Fast Ruby
sferik
630
63k
Transcript
Finding your high with Low Search By Lodewijk Schutte ~
Low, October 2016
Hi! I'm Low!
Low Search
Google searches pages, returns URLs. Low Search filters & returns
Channel Entries.
The more granular the content, the more control you have
over its output.
Searching vs. Filtering •In ExpressionEngine, searching == filtering. •Filter output
by setting parameters to the Channel Entries Tag. •Low Search extends the CE Tag, offering more parameters and thus more control.
{exp:channel:entries dynamic="no"} code {/exp:channel:entries}
{exp:channel:entries dynamic="no" status="open" show_future_entries="no" show_expired="no" orderby="date" sort="desc" limit="100" }
{exp:channel:entries dynamic="no" channel="articles" category="5" username="stanlee" search:body="marvel" start_on="-3 months" status="open" show_future_entries="no"
show_expired="no" orderby="date" sort="desc" limit="100" }
{exp:low_search:results} Read parameters, run filters Set fixed_order or entry_id parameter
Call {exp:channel:entries} Post-process returned entries Return search results
{exp:low_search:results collection="products" keywords="luke cage" category:type="7|8" category:gender="11" search:size="=XL|XXL" range-to:price="30" orderby_sort="price|asc" }
All mens tees and hoodies in size XL or XXL, up to $30, that match the terms "luke cage", ordered by price, ascending.
{exp:channel:entries channel="products" entry_id="34|38|42|51" orderby="price" sort="asc" }
{exp:channel:entries channel="products" entry_id="34|38|42|51" orderby="price" sort="asc" status="open" show_future_entries="no" show_expired="no" limit="100" }
A parameter… •…can be fixed: {exp:low_search:results name="value"} •…can be dynamic,
using a form: <input name="name" value="value"> •…can be read as a variable: {low_search_name} => value
{exp:low_search:form result_page="search/results"} <input name="keywords" value=""> <select name="category:type[]" multiple>…</select <input name="search:size[]"
type="checkbox" value="XL"> XL … <input name="range-to:price" type="range" min="10" max="250" step="10"> <select name="limit">…</select> other form fields {/exp:low_search:form}
domain.com/search/results/eyJyZXN…
{exp:low_search:results collection="products" query="{segment_3}" } {if count == 1} Searched for
{low_search_keywords} {/if} code {/exp:low_search:results}
A filter… •…consists of any amount of parameters. •…runs one
or more (simple) queries. •…passes its results onto the next. •…triggers no_results when it comes up empty.
Keywords •Matches entries against given keywords •Uses a full-text index
created via collections •Allows for speed and relevance •Allows for inflections and stemming •Order by relevance score
Field Search •Like native search:field_name parameter •Can target title, url_title
and status •Can target Grid (or Matrix) columns •Additional matching, like starts_with •Smart Field Search option
Ranges •Targets numeric or date fields •Two values, one field;
optionally specify min/max values separately •Can also target Grid (or Matrix) columns •Inverse ranges (two fields, one value)
Categories •Accepts category_ids •Combine AND and OR by specifying groups
on the fly: •category:color="1|2|3" •category:type="4|5|6" •category:style="7|8|9"
Relationships •Accepts entry_ids or url_titles •Can target the parent or
child entry: •parent:field_name="1|2|3" •child:field_name="4|5|6"
Distance •Uses Haversine algorithm •From given lat/lon values to one
or two fields containing the entry’s coordinates •Specify max radius and unit •Order by calculated distance
There’s more! •Tags (included) •Members https://github.com/low/low_search_members •Table https://github.com/low/low_search_table •Calendar (sold
separately, EE2) •Store (sold separately, EE2) •Create your own…
class Low_search_filter_foo extends Low_search_filter { public function filter($entry_ids) { return
$entry_ids; } public function fixed_order() { return FALSE; } public function results($rows) { return $rows; } }
Questions?
Thank You! gotolow.com @low