I am new to ES – so, please bear with me.
My data model is parent-child relationship.
The parent document contains attributes of people. The child document
contains time and location for that person. In a relational model, it would
look like:
Create Table Parent (
personId int,
personName varchar);
Create table child (
personId Int,
Location varchar,
detectionTime dateTime);
A possible query on this model is:
"A person named X that was spotted at location A, and then, within 10
minutes, was spotted at location B"
In SQL, it would look like:
"select personId, C1.detectionTime
From person, child as C1, child as C2
Where
Parent.personId = C1.personId,
Parent.personId = C2.personId,
C1.location = A,
C2.location = B,
personName = X,
C2.detectionTime between C1.detectionTime and C1.detectionTime + 10
(minutes);"
The "between" part of the query is the problem. No retrieval system that I
am aware of can do it.
I guess the way to ask it is to request a parent document with name=X,
that has child document\s with location A, and child document\s with
location B. Once the parent and child documents are retrieved – the
requesting program will filter the results that do not match the "within 10
minutes" condition.
This solution is far from optimal:
-
Wasted bandwidth in returning documents that will be filtered out.
-
Wasted computation on ranking and sorting those documents
-
Invalidates facets
I there a way do the filtering at the shard level? (Even if it requires
programming)
--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/0eee6b66-c5b4-41d0-9eb7-c5b99d272988%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.