Top Banner
26

Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Jul 17, 2015

Download

Software

LucidWorks
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics
Page 2: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Faceting with LuceneBlock Join Query

Page 3: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Agenda

1. Why we need special faceting for Block Join queries?

2. Proposed Block Join facet component.

Page 4: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Introducing myself

Oleg Savrasov, PhD

A programmer

Working for Grid Dynamics (griddynamics.com)

Work and live in Saint-Petersburg, Russia

Page 5: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Online shopping

Page 6: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Jerrica is looking for a dress

Page 7: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Huge amount of dresses

Page 8: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Facet filters help

Facet filters

Reduced amount

Page 9: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Tasks to be solved

● Performant Search

● Facet calculation/filtering

FacetComponent ?

Page 10: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Product has many SKU

Page 11: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Aggregated facet counts

Facets should count products, not SKU.

Expected facets:

COLOR Blue : 1 Red : 1SIZE S : 1 M : 1

Page 12: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Flat documents don’t help

False positive match for

+COLOR:Blue +SIZE:M

Page 13: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Separate SKU documents

q = *:*facet.field = COLORfacet.field = SIZE

COLOR Blue : 1 Red : 2SIZE S : 2 M : 1

Wrong numbers!

There is only one product

Page 14: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Search products only

q = *:*fq = scope:productfacet.field = COLORfacet.field = SIZE

COLOR : 0

SIZE : 0

No such fields in product documents

Page 15: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Aggregated facet counts

Facets should count products, not SKU.

Expected facets:

COLOR Blue : 1 Red : 1SIZE S : 1 M : 1

Page 16: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Solr Block Join Support (since Lucene 3.4.0)

Gre

en

Blu

e

Yel

low

Yel

low

Blu

e

Gre

en

Pro

duct

Gre

en

Yel

low

Pro

duct

Gre

en

Blu

e

Yel

low

Yel

low

Pro

duct

docId

1 1 1

Query: {!parent which="scope:product"}COLOR:Blue

1 1

scope:product

COLOR:Blue

ToParentQuery 1 1

Child docs Parent doc

Block1

Page 17: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

SOLR-5743 Faceting with Block Join support

● Create BlockJoinFacetComponent

● Only DocValues fields are supported

● Facet counts should correspond to amount of parent documents

● ToParentQuery is expected

Page 18: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Faceting over DocSet slicesG

reen

Blu

e

Yel

low

Yel

low

Blu

e

Gre

en

Pro

duct

Gre

en

Yel

low

Pro

duct

Gre

en

Blu

e

Yel

low

Yel

low

Pro

duct

docId

10 1 0 0 1 0DocSet Slice

DocSet Slice counts

COLOR Blue : 2

Aggregated counts

COLOR Blue : +1

Page 19: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Block Join Facet Component

Page 20: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

BlockJoinFacetCollector

Page 21: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Facets counting

Page 22: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

It works!

q = {!parent which="scope:product"}COLOR:Blue

child.facet.field = SIZE

<response> ... <lst name="facet_counts">

<lst name="facet_fields"> <lst name="SIZE"> <int name="S">14</int> <int name="L">22</int> <int name="XL">17</int> </lst>

</lst> </lst></response>

Page 23: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

The dress is found

Page 24: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Further improvements

● Thorough profiling

● Performance improvements

● Algorithmic improvements

Page 26: Faceting with Lucene Block Join Query: Presented by Oleg Savrasov, Grid Dynamics

Big thanks!

Do you have any questions?

Please vote for SOLR-5743.