-
Notifications
You must be signed in to change notification settings - Fork 24.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Accessing fields of nested doc in custom score script may cause documents missing in query result #3056
Comments
Hiya This is a really interesting question (and thanks for the runnable gist!) The issue is that the nested match_all is only matching docs which have Then we write the query to match docs with member reviews, and calculate
So the clause WITH member reviews looks like the following: { Then, the clause to match docs WITHOUT reviews. Initially, I wrote this: { But the score of { The full query is here: https://gist.github.com/clintongormley/5604037 IMPORTANT: you're paying the cost of this calculation at query time, but clint On 17 May 2013 21:12, Junjun Zhang notifications@github.com wrote:
|
For the future reader, #3058 was created to address:
|
Closed in favour of #3495 |
I recently ran into a problem of missing documents in query result when custom score script is used. After some testing, I found that the problem seems occur when the script tries to access a field in a nested doc where a particular root document does not contain any such nested doc.
To reproduce the problem, test data and queries can be found here: http://goo.gl/iHOc5. The example may not make much sense in real world, but the idea is to sort products by average rate from users' review. One particular requirement is to always treat anonymous user's rate as 3 and assign rate as 3 for products with no reviews.
We can determine whether a user is anonymous or not by checking review.user.member_id field is empty or not: doc['review.user.member_id'].empty, this seems work fine except that products with no reviews are dropped out in the result as the first query example shows. Is this a bug? As there is no query/filter that excludes documents, shouldn't all documents be returned?
Also, there seems no way to determine whether a review exists or not. The second query example shows doc['review'].empty does not work, this makes sense because indeed, there is not such field as 'review' under the 'product' index, 'review' is a nested document. However, the question remains: is there a way to determine the existence of a nested doc?
The text was updated successfully, but these errors were encountered: