[
https://issues.apache.org/jira/browse/LUCENE-7953?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16154661#comment-16154661
]
Robert Muir commented on LUCENE-7953:
-------------------------------------
{quote}
but ... it's not so easy to identify which StackTraceElement corresponds to the
current expression, i.e. where to append the current expression. I don't see
how to do it reliable ...
{quote}
Before you do a try/catch, can't you just call {{Thread.dumpStack().length}} to
compute your depth? Otherwise if you have java 9 maybe you can do it more
efficiently, and maybe its not too costly for your case? It should only be once
per query regardless...
{code}
AtomicInteger depth = new AtomicInteger();
StackWalker.getInstance().forEach(frame -> depth.incrementAndGet());
{code}
> Can we include the expression string in the stack frame for problems
> evaluating Lucene expressions?
> ---------------------------------------------------------------------------------------------------
>
> Key: LUCENE-7953
> URL: https://issues.apache.org/jira/browse/LUCENE-7953
> Project: Lucene - Core
> Issue Type: Improvement
> Components: modules/expressions
> Reporter: Michael McCandless
> Priority: Minor
>
> I'm working with rather complex expressions to compute relevance, and when
> there is a problem, I see a stack trace like this:
> {noformat}
> Server error:
> java.lang.IllegalArgumentException: field "is_prime" has type bin, which
> cannot be used in an expression
> at
> com.amazon.lucene.Searcher$IndexBindings.getDoubleValuesSource(Searcher.java:373)
> at
> com.amazon.lucene.Searcher$QueryBindings.getDoubleValuesSource(Searcher.java:302)
> at
> org.apache.lucene.expressions.ExpressionValueSource.<init>(ExpressionValueSource.java:45)
> at
> org.apache.lucene.expressions.Expression.getDoubleValuesSource(Expression.java:97)
> at
> com.amazon.lucene.Searcher$IndexBindings.getDoubleValuesSource(Searcher.java:378)
> at
> com.amazon.lucene.Searcher$QueryBindings.getDoubleValuesSource(Searcher.java:302)
> at
> org.apache.lucene.expressions.ExpressionValueSource.<init>(ExpressionValueSource.java:45)
> at
> org.apache.lucene.expressions.Expression.getDoubleValuesSource(Expression.java:97)
> at
> com.amazon.lucene.Searcher$IndexBindings.getDoubleValuesSource(Searcher.java:378)
> at
> com.amazon.lucene.Searcher$QueryBindings.getDoubleValuesSource(Searcher.java:302)
> at
> org.apache.lucene.expressions.ExpressionValueSource.<init>(ExpressionValueSource.java:45)
> at
> org.apache.lucene.expressions.Expression.getDoubleValuesSource(Expression.java:97)
> at
> com.amazon.lucene.Searcher$IndexBindings.getDoubleValuesSource(Searcher.java:378)
> at
> com.amazon.lucene.Searcher$QueryBindings.getDoubleValuesSource(Searcher.java:302)
> at
> com.amazon.lucene.http.SearchA9Handler.handleInner(SearchA9Handler.java:459)
> at
> com.amazon.lucene.http.SearchA9Handler.handle(SearchA9Handler.java:99)
> at <server>
> {noformat}
> It's my code that's throwing the exception, but it would sure be nice if all
> the intermediate stack frames in the exception would include the expression
> text (or maybe some smallish prefix of it, in case it's gigantic), because I
> think here I have 3 levels of expression, and it'd be nice to know which
> sub-expressions, sub-sub-expressions, etc., led to the offensive {{is_prime}}
> field.
> I don't know how to do this, but e.g. I know our randomizedtesting lib is
> able to modify stack to insert test seeds, so it seems to be possible.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]