SlideShare a Scribd company logo
1 of 58
Download to read offline
TITEL DAG MAAND JAARPHP NORTH EAST 2014 JEROEN VAN DIJK
LIKING
RELEVANCE
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WILL I FIND WHAT I’M LOOKING FOR?
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
129 LINKEDIN PROFILE MATCHES
SEARCHING JEROEN VAN DIJK?
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
enrise.com/jeroen-van-dijk
phpbenelux.eu/jeroen-van-dijk
jrdk.nl/jeroen-van-dijk
twitter.com/jrvandijk
LINK: JEROEN VAN DIJK
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
joind.in/10916
LINK: JOIND.IN
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHAT IS AUTOTRACK?
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
HOW MANY OPTIONS DO I HAVE?
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
NEED MORE?
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHERE TO START?
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
HOW DO YOU SEARCH?
SOLR
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
SCHEMA.XML, WHERE DO I START?
├── contrib
├── dist
├── docs
├── example
│   ├── solr
│   │   ├── bin
│   │   └── collection1
│   │   └── conf
│   │   ├── admin-extra.html
│   │   ├── admin-extra.menu-bottom.html
│   │   ├── admin-extra.menu-top.html
│   │   ├── currency.xml
│   │   ├── elevate.xml
│   │   ├── mapping-FoldToASCII.txt
│   │   ├── mapping-ISOLatin1Accent.txt
│   │   ├── protwords.txt
│   │   ├── schema.xml
│   │   ├── scripts.conf
│   │   ├── solrconfig.xml
│   │   ├── spellings.txt
│   │   ├── stopwords.txt
│   │   ├── synonyms.txt
│   │   ├── update-script.js
└── licenses
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
DID YOU READ THE SCHEMA.XML?
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <schema name="example" version="1.5">
3 <!--
4 This is the Solr schema file. This file should be named "schema.xml" and
5 should be in the conf directory under the solr home
6 (i.e. ./solr/conf/schema.xml by default)
7 or located where the classloader for the Solr webapp can find it.
8
9 This example schema is the recommended starting point for users.
10 It should be kept correct and concise, usable out-of-the-box.
11
12 For more information, on how to customize this file, please see
13 http://wiki.apache.org/solr/SchemaXml
14 -->
15 <types>
16 <!-- There is 61Kb of example schema -->
17 </types>
18 <fields>
19 <!-- documented in this file! -->
20 </fields>
21 <uniqueKey>id</uniqueKey>
22 <defaultSearchField>text</defaultSearchField>
23 </schema>
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHAT ARE TYPES AND FIELDS?
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <schema name="cars" version="1.5">
3 <types>
4 <!-- A plain string type -->
5 <fieldType name="string" class=“solr.StrField"
6 sortMissingLast="true" omitNorms="true"/>
7 <!-- The model type for tokenizing & filtering synonyms -->
8 <fieldtype name="modelType" class="solr.TextField">
9 <analyzer type="query">
10 <tokenizer class="solr.KeywordTokenizerFactory"/>
11 <filter class="solr.SynonymFilterFactory" synonyms="models.
12 querytime.txt" ignoreCase="false"
13 expand="true"/>
14 </analyzer>
15 </fieldtype>
16 </types>
17 <fields>
18 <field name="merk" type="string" indexed="true" stored="true"
19 termVectors="true"/>
20 <field name="model" type="modelType" indexed="true" stored="true"/>
21 </fields>
22 <!-- ... -->
23 </schema>
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHAT’S THE USAGE OF A COPY FIELD?
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <schema name="cars" version="1.5">
3 <types>
4 <!-- ... -->
5 </types>
6 <fields>
7 <!-- ... -->
8 <field name="text" type="text" indexed="true" stored="false"
9 multiValued="true"/>
10 </fields>
11 <uniqueKey>auto_id</uniqueKey>
12 <defaultSearchField>text</defaultSearchField>
13 <solrQueryParser defaultOperator="OR"/>
14
15 <copyField source="merk" dest="text"/>
16 <copyField source="model" dest="text"/>
17 <copyField source="uitvoering" dest="text"/>
18 <copyField source="aanbieder_informatie" dest="text"/>
19 <copyField source="interieur_kleur" dest="text"/>
20 <copyField source="bouwjaar" dest="text"/>
21 </schema>
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
HOW DID YOU INDEX DATA?
§Using Solr since version 1.3
§CSV & XML update request handlers
§Data import handler
§Explicitly chose Solr XML import
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
CAN IT BE MORE ABSTRACT?
Database
!
!
Nightly bulk export Trigger item export
!
!
Mapping
!
!
Solr
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
DO YOU HAVE SOME TIPS?
§Analyze your data up front
§Do not store, what you don’t want to visualize!
§Pay extra attention to columns you want to sort
§Create a well defined copy field for the query
§Do not use Solr as your persistent storage
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
NO SQL?
SELECT * FROM …
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHICH QUERY HANDLERS ARE THERE?
§Standard
§Disjunction Max
§Extended Disjunction Max
§Create your own based on the above!
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHAT IS SOLARIUM?
Extensible PHP Library
Usable in any PHP based framework
Abstracts raw Solr communication
@basdenooijer / @solariumproject
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
IS IT THAT EASY WITH SOLARIUM?
1 // get a select query instance
2 $client = new SolariumClient($config);
3 $query = $client->createSelect();
4
5 // define the output field
6 $query->setFields(array('auto_id', 'merk_model_uitvoering',
7 'aanbieder_informatie', 'score'));
8 $query->setSorts(array('score' => 'desc'));
9
10 // set the query
11 $query->setQuery('audi +avant +abs');
12
13 $resultset = $client->select($query);
select?q=audi +avant +abs
&fl=auto_id,merk_model_uitvoering,aanbieder_informa
tie,score&sort=score desc
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
HOW DO I USE THE DISMAX REQUEST HANDLER?
1 // define the output field
2 $query->setFields(array('auto_id', 'merk_model_uitvoering',
3 'aanbieder_informatie', 'score'));
4 $query->setSorts(array('score' => 'desc'));
5
6 // get the dismax component and set a boost query
7 $dismax = $query->getDisMax();
8 $dismax->setQueryFields('uitvoering^2.3 text^0.9');
9 // set the query
10 $query->setQuery('audi +avant +abs');
11
12 $resultset = $client->select($query);
select?q=audi +avant +abs&
fl=auto_id,merk_model_uitvoering,aanbieder_informat
ie,score&sort=score
desc&defType=dismax&qf=uitvoering^2.3 text^0.9
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHAT IS A BOOST FUNCTION?
1 // define the output field
2 $query->setFields(array('auto_id', 'merk_model_uitvoering',
2 'score'));
3 $query->setSorts(array('score' => 'asc'));
4
5 // get the dismax component and set a boost function
6 $dismax = $query->getDisMax();
7 $dismax->setBoostFunctions(
8 ‘sqedist(x_coordinaat,y_coordinaat,155000,463000)');
9
10 // set the query
11 $query->setQuery('audi +avant +abs');
select?q=audi +avant +abs
&fl=auto_id,merk_model_uitvoering,score&sort=score
asc&defType=dismax&bf=sqedist(x_coordinaat,y_coordi
naat,155000,463000)
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHY NOT USE WGS84 FOR DISTANCE SEARCH?
!
Solr 4.0 introduced
!
SpatialRecursivePrefixTreeFieldType
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
QUERIES
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHAT IS THE LUCENE RANGE QUERY SYNTAX?
maximum_speed:[1 TO 10]
publication_date:[20140301 TO 20140318]
publication_date:[* TO NOW]
any_range:[* TO *]
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
HOW DO I CREATE A RANGE QUERY?
1 // get the facetset component
2 $facetSet = $query->getFacetSet();
3
4 // create a facet field instance and set options
5 $facet = $facetSet->createFacetRange('topsnelheid');
6 $facet->setField('topsnelheid');
7 $facet->setStart(120);
8 $facet->setGap(10);
9 $facet->setEnd(250);
10
11 // this executes the query and returns the result
12 $resultset = $client->select($query);
select?facet=true&facet.range={!key=topsnelheid}
topsnelheid&f.topsnelheid.facet.range.start=90&f.to
psnelheid.facet.range.end=250&f.topsnelheid.facet.r
ange.gap=10
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
HOW DO I CREATE A RANGE QUERY?
=== Topsnelheid ===
[ ] 120.0 [31]
[ ] 130.0 [616]
[ ] 140.0 [2842]
[ ] 150.0 [17254]
[ ] 160.0 [15869]
[ ] 170.0 [25597]
[ ] 180.0 [29735]
[ ] 190.0 [25370]
[ ] 200.0 [17624]
[ ] 210.0 [10256]
[ ] 220.0 [6611]
[ ] 230.0 [3322]
[ ] 240.0 [1768]
select?facet=true&facet.range={!key=topsnelheid}
topsnelheid&f.topsnelheid.facet.range.start=90&f.to
psnelheid.facet.range.end=250&f.topsnelheid.facet.r
ange.gap=10
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
HOW DO YOU DEFINE A CUSTOM RANGE?
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHAT IS A FACET MULTI QUERY?
1 // get the facetset component
2 $facetSet = $query->getFacetSet();
3
4 // create a facet field instance and set options
5 $facet = $facetSet->createFacetMultiQuery(
6 array('key' => 'topsnelheid'));
7 $facet->createQuery(
8 'topsnelheid[*TO140]', 'topsnelheid:[* TO 140]');
9 $facet->createQuery(
10 'topsnelheid[141TO150]', 'topsnelheid:[141 TO 150]');
11
12 // this executes the query and returns the result
13 $resultset = $client->select($query);
select?facet=true&facet.query={!
key=topsnelheid[*TO140]}topsnelheid:[* TO
140]&facet.query={!key=topsnelheid[141TO150]}
topsnelheid:[141 TO 150]
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
BUT WHAT ABOUT THE OTHER FIELDS?
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
RESULT
GROUPING
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHAT ABOUT DIFFERENT CAR OPTIONS?
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHAT ABOUT DIFFERENT CAR OPTIONS?
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
CREATING GROUPING QUERY
1 // define the output field
2 $query->setFields(array('auto_id',
3 'merk_model_uitvoering', 'score'));
3 $query->setSorts(array('score' => 'asc'));
4
5 // get group component and create two query groups
6 $group = $query->getGrouping();
7 $group->addField('uitvoering_carrosserievorm');
8
9 $query->setQuery('+cabriolet +abs');
select?q=+cabriolet
+abs&fl=auto_id,merk_model_uitvoering,score&sort=sc
ore asc&group=true
&group.field=uitvoering_carrosserievorm
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
PIVOT
FACETING
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
ISN’T THAT GOOGLE SPREADSHEETS?
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHAT IS A DECISION TREE?
!
Audi
!
!
A3 A4
!
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
IS IT EASY TO CREATE A PIVOT FACET?
1 $query->setQuery('+cabriolet +abs');
2
3 // get the facetset component
4 $facetSet = $query->getFacetSet();
5
6 // create a facet pivot instance
7 $facet = $facetSet->createFacetPivot('merk-model');
8 $facet->addFields('merk,model');
9
10 // this executes the query and returns the result
11 $resultset = $client->select($query);
select?q=+cabriolet +abs
&facet=true&facet.pivot=merk,model
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
SEEMS SO I GUESS?
[ ] AUDI [7]
[ ] -- A4 [7]
[ ] BMW [4]
[ ] -- 3-SERIE [3]
[ ] -- 1-SERIE [1]
[ ] VOLKSWAGEN [3]
[ ] -- GOLF [2]
[ ] -- NEW BEETLE [1]
[ ] PEUGEOT [3]
[ ] -- 207 [1]
[ ] -- 306 [1]
[ ] -- 307 [1]
select?q=+cabriolet +abs
&facet=true&facet.pivot=merk,model
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
MULTI SELECT
FACETING
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHERE ARE THE ZEROES?
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
FACET MINCOUNT 0
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHERE DID LPG GO?
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
FACET MINCOUNT 1
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
DO YOU SEE ONLY THE RELEVANT MODELS?
=== Model ===
[ ] A3 (11)
[ ] A4 (19)
[ ] A6 (7)
[ ] A8 (2)
!
!
facet=true&facet.field=model&facet.mincount=1&fq=aa
nbieder_id:1&fq=merk:AUDI
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
IS THIS THE EXPECTED RESULT?
=== Model ===
[ ] A3 (11)
[X] A4 (19)
[ ] A6 (7)
[ ] A8 (2)
!
!
facet=true&facet.field=model&facet.mincount=1&fq=aa
nbieder_id:1&fq=merk:AUDI&fq=model:A4
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
OR THIS ONE?
=== Model ===
[X] A4 (19)
!
!
facet=true&facet.field=model&facet.mincount=1&fq=aa
nbieder_id:1&fq=merk:AUDI&fq=model:A4
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
TAGGING AND EXCLUDING TO THE RESCUE?
1 $query->addFilterQueries(array(
2 array('key'=>'aanbieder_id', ‘query’=>'aanbieder_id:1',
3 'tag'=>'inner'),
4 array('key'=>'merk', 'query'=>'merk:AUDI',
5 'tag'=>'inner'),
6 array('key'=>'model', 'query'=>'model:A4',
7 'tag'=>'outer')));
8
9 // get the facetset component
10 $facetSet = $query->getFacetSet();
11 $facetSet->setMinCount(1);
12 $facetSet->createFacetField(array('key'=>'model',
13 ‘field'=>'model', 'exclude'=>'outer'));
facet=true&facet.field={!key=model ex=outer}
model&facet.mincount=1&
fq={!tag:inner}aanbieder_id:1&fq={!tag=inner}
merk:AUDI&fq={!tag=outer}model:A4
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
IS THIS BETTER?
=== Model ===
[ ] A3 (11)
[X] A4 (19)
[ ] A6 (7)
[ ] A8 (2)
!
!
facet=true&facet.field={!key=model ex=outer}
model&facet.mincount=1&
fq={!tag:inner}aanbieder_id:1&fq={!tag=inner}
merk:AUDI&fq={!tag=outer}model:A4
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHERE ARE THE COUNTS?
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
FACET MINCOUNT 0
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
DID YOU JUST CREATE THE FACET TWICE?
1 $query->addFilterQueries(array(
2 array('query'=>'aanbieder_id:1', 'tag'=>'inner'),
3 array('query'=>'carrosserievorm:CABRIOLET',
4 'tag'=>'outer')));
5
6 // get the facetset component and add fields
7 $facetSet = $query->getFacetSet();
9
9 $facetSet->createFacetField(array('key'=>'cv',
10 'field'=>'carrosserievorm', 'exclude'=>'outer'));
11 $facetSet->createFacetField(array('key'=>'cv_internal',
12 'field'=>'carrosserievorm'));
select?facet=true&fq={!tag=inner}aanbieder_id:1&
fq={!tag=outer}carrosserievorm:CABRIOLET&
facet.field={!key=cv ex=outer}carrosserievorm&
facet.field={!key=cv_internal}carrosserievorm
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHAT IS THE EXPECTED RESULT?
=== CV ===
[ ] HATCHBACK [514]
[ ] STATIONWAGEN [510]
[ ] SEDAN [188]
[ ] MPV [185]
[ ] SUV/TERREINWAGEN [108]
[X] CABRIOLET [71]
select?facet=true&fq={!tag=inner}aanbieder_id:1&
fq={!tag=outer}carrosserievorm:CABRIOLET&
facet.field={!key=cv ex=outer}carrosserievorm&
facet.field={!key=cv_internal}carrosserievorm
=== CV_INTERNAL ===
[ ] HATCHBACK [0]
[ ] STATIONWAGEN [0]
[ ] SEDAN [0]
[ ] MPV [0]
[ ] SUV/TERREINWAGEN [0]
[ ] COUPE [0]
[ ] BEDRIJFSWAGEN [0]
[X] CABRIOLET [26]
[ ] PERSONENBUS [0]
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
WHAT IS THE EXPECTED RESULT?
!
=== CV ===
[ ] HATCHBACK [0]
[ ] STATIONWAGEN [0]
[ ] SEDAN [0]
[ ] MPV [0]
[ ] SUV/TERREINWAGEN [0]
[X] CABRIOLET [26]
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
INTERESTED IN SOME STATISTICS?
1 index, 2 web applications
!
250.000 cars, over 200 attributes per car
!
Only ~ 500Mb search index, easily run in memory
imap://mvdpolder@mail.enrise.com:993/fetch%3EUID%3E/INBOX%3E13466?part=1.2&type=image/jpeg&filename=foto.JPG
Thank you!
Jeroen van Dijk | jrvandijk | joind.in/10916

More Related Content

Similar to Liking Relevance - PHP North East 2014

Os Pruett Sessionnotes
Os Pruett SessionnotesOs Pruett Sessionnotes
Os Pruett Sessionnotes
oscon2007
 
Private slideshow
Private slideshowPrivate slideshow
Private slideshow
sblackman
 
คู่มือการใช้โปรแกรม Pharmacy MTM
คู่มือการใช้โปรแกรม Pharmacy MTMคู่มือการใช้โปรแกรม Pharmacy MTM
คู่มือการใช้โปรแกรม Pharmacy MTM
Kris Phueakkham
 
Itsecteam shell
Itsecteam shellItsecteam shell
Itsecteam shell
ady36
 

Similar to Liking Relevance - PHP North East 2014 (20)

Os Pruett Sessionnotes
Os Pruett SessionnotesOs Pruett Sessionnotes
Os Pruett Sessionnotes
 
Drupal Development (Part 2)
Drupal Development (Part 2)Drupal Development (Part 2)
Drupal Development (Part 2)
 
Biglietti, prego! A ticket for the (command) bus
Biglietti, prego! A ticket for the (command) busBiglietti, prego! A ticket for the (command) bus
Biglietti, prego! A ticket for the (command) bus
 
Data20161007
Data20161007Data20161007
Data20161007
 
Curso Symfony - Clase 4
Curso Symfony - Clase 4Curso Symfony - Clase 4
Curso Symfony - Clase 4
 
Apache Solr Search Mastery
Apache Solr Search MasteryApache Solr Search Mastery
Apache Solr Search Mastery
 
Private slideshow
Private slideshowPrivate slideshow
Private slideshow
 
Rugalytics | Ruby Manor Nov 2008
Rugalytics | Ruby Manor Nov 2008Rugalytics | Ruby Manor Nov 2008
Rugalytics | Ruby Manor Nov 2008
 
Bag Of Tricks From Iusethis
Bag Of Tricks From IusethisBag Of Tricks From Iusethis
Bag Of Tricks From Iusethis
 
Why Hacking WordPress Search Isn't Some Big Scary Thing
Why Hacking WordPress Search Isn't Some Big Scary ThingWhy Hacking WordPress Search Isn't Some Big Scary Thing
Why Hacking WordPress Search Isn't Some Big Scary Thing
 
Daily notes
Daily notesDaily notes
Daily notes
 
คู่มือการใช้โปรแกรม Pharmacy MTM
คู่มือการใช้โปรแกรม Pharmacy MTMคู่มือการใช้โปรแกรม Pharmacy MTM
คู่มือการใช้โปรแกรม Pharmacy MTM
 
Symfony2
Symfony2Symfony2
Symfony2
 
Lithium Best
Lithium Best Lithium Best
Lithium Best
 
Itsecteam shell
Itsecteam shellItsecteam shell
Itsecteam shell
 
SUMO simulation CODES AND STEPS
SUMO simulation CODES AND STEPSSUMO simulation CODES AND STEPS
SUMO simulation CODES AND STEPS
 
Let jQuery Rock Your World
Let jQuery Rock Your WorldLet jQuery Rock Your World
Let jQuery Rock Your World
 
Forms in AngularJS
Forms in AngularJSForms in AngularJS
Forms in AngularJS
 
Ipad gump
Ipad gumpIpad gump
Ipad gump
 
R57.Php
R57.PhpR57.Php
R57.Php
 

More from Jeroen van Dijk

To SQL or No(t)SQL - PHPNW12
To SQL or No(t)SQL - PHPNW12To SQL or No(t)SQL - PHPNW12
To SQL or No(t)SQL - PHPNW12
Jeroen van Dijk
 
Socializing a world of travel
Socializing a world of travelSocializing a world of travel
Socializing a world of travel
Jeroen van Dijk
 

More from Jeroen van Dijk (14)

WordPress REST API hacking
WordPress REST API hackingWordPress REST API hacking
WordPress REST API hacking
 
The Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/PressThe Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/Press
 
WordPress REST API hacking
WordPress REST API hackingWordPress REST API hacking
WordPress REST API hacking
 
The Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/PressThe Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/Press
 
Beacons in Appcelerator Titanium
Beacons in Appcelerator TitaniumBeacons in Appcelerator Titanium
Beacons in Appcelerator Titanium
 
Teaming up WordPress API with Backbone.js in Titanium
Teaming up WordPress API with Backbone.js in TitaniumTeaming up WordPress API with Backbone.js in Titanium
Teaming up WordPress API with Backbone.js in Titanium
 
Teaming up WordPress API with Backbone.js in Titanium
Teaming up WordPress API with Backbone.js in TitaniumTeaming up WordPress API with Backbone.js in Titanium
Teaming up WordPress API with Backbone.js in Titanium
 
An app on the shoulders of giants
An app on the shoulders of giantsAn app on the shoulders of giants
An app on the shoulders of giants
 
Refactoring using Codeception
Refactoring using CodeceptionRefactoring using Codeception
Refactoring using Codeception
 
To SQL or No(t)SQL - PHPNW12
To SQL or No(t)SQL - PHPNW12To SQL or No(t)SQL - PHPNW12
To SQL or No(t)SQL - PHPNW12
 
Socializing a world of travel
Socializing a world of travelSocializing a world of travel
Socializing a world of travel
 
Varnish, the high performance valhalla?
Varnish, the high performance valhalla?Varnish, the high performance valhalla?
Varnish, the high performance valhalla?
 
Varnish, the high performance valhalla?
Varnish, the high performance valhalla?Varnish, the high performance valhalla?
Varnish, the high performance valhalla?
 
Edge Side Includes in Zend Framework without Varnish
Edge Side Includes in Zend Framework without VarnishEdge Side Includes in Zend Framework without Varnish
Edge Side Includes in Zend Framework without Varnish
 

Recently uploaded

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Recently uploaded (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 

Liking Relevance - PHP North East 2014