You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Hoss Man (Updated) (JIRA)" <ji...@apache.org> on 2011/11/30 02:27:41 UTC
[jira] [Updated] (SOLR-2824) Cross-Core Join doesn't parse fields
against joining schema
[ https://issues.apache.org/jira/browse/SOLR-2824?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Hoss Man updated SOLR-2824:
---------------------------
Attachment: SOLR-2824.patch
I hacked up a test case demonstrating the problem, but ran out of time before i could try fixing it. (At the moment the test just demonstrates the problem of *parsing* a cross index join, it doesn't actually try to utilize it - our Test framework does't make it easy to index/query multiple cores in a single test)
At first glance, it seems fairly straight forward to fix the JoinQParser to get the "fromIndex" SolrCore via the CoreContainer and then ask it for a parser to parse the nested query, but a few things concern me:
1) should local params from the '{!join...}' expression (besides from,to, and fromIndex) be passed to the QParser fetched from the fromIndex ?
2) Are there other bugs lurking in JoinQuery itself that need better cross-index testing? In particular the JoinQuery.rewrite method smells fishy.
> Cross-Core Join doesn't parse fields against joining schema
> -----------------------------------------------------------
>
> Key: SOLR-2824
> URL: https://issues.apache.org/jira/browse/SOLR-2824
> Project: Solr
> Issue Type: Bug
> Components: multicore, search
> Affects Versions: 4.0
> Reporter: Thijs Vonk
> Attachments: SOLR-2824.patch
>
>
> I have two cores with 2 different schema's
> now I want to join between the 2 cores. where I filter on a field from one core that doesn't exist in the other core.
> core1: {childIds, name, id}, core2:{id, type, specials}
> I have the following query
> /core1/select?q=*:*&fq={!join from=id to=childIds fromIndex=core2}specials:1&fl=id,name
> I get this exception [1]
> Looking at the debugger I see that
> at org.apache.solr.search.JoinQParserPlugin$1.parse(JoinQParserPlugin.java:60)
> the parse is called for the filterquery on the main core (core1). Not the core of the 'fromIndex' (core2)
> [1]
> SEVERE: org.apache.solr.common.SolrException: undefined field specials
> at org.apache.solr.schema.IndexSchema.getDynamicFieldType(IndexSchema.java:1028)
> at org.apache.solr.schema.IndexSchema$SolrQueryAnalyzer.getWrappedAnalyzer(IndexSchema.java:335)
> at org.apache.lucene.analysis.AnalyzerWrapper.createComponents(AnalyzerWrapper.java:71)
> at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:83)
> at org.apache.lucene.queryparser.classic.QueryParserBase.newFieldQuery(QueryParserBase.java:476)
> at org.apache.lucene.queryparser.classic.QueryParserBase.getFieldQuery(QueryParserBase.java:464)
> at org.apache.solr.search.SolrQueryParser.getFieldQuery(SolrQueryParser.java:134)
> at org.apache.lucene.queryparser.classic.QueryParserBase.handleBareTokenQuery(QueryParserBase.java:1052)
> at org.apache.lucene.queryparser.classic.QueryParser.Term(QueryParser.java:358)
> at org.apache.lucene.queryparser.classic.QueryParser.Clause(QueryParser.java:257)
> at org.apache.lucene.queryparser.classic.QueryParser.Query(QueryParser.java:181)
> at org.apache.lucene.queryparser.classic.QueryParser.TopLevelQuery(QueryParser.java:170)
> at org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:118)
> at org.apache.solr.search.LuceneQParser.parse(LuceneQParserPlugin.java:74)
> at org.apache.solr.search.QParser.getQuery(QParser.java:143)
> at org.apache.solr.search.JoinQParserPlugin$1.parse(JoinQParserPlugin.java:60)
> at org.apache.solr.search.QParser.getQuery(QParser.java:143)
> at org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:138)
> at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:180)
> at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129)
> at org.apache.solr.core.SolrCore.execute(SolrCore.java:1452)
> at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:353)
> at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:248)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
> at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
> at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
> at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
> at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
> at java.lang.Thread.run(Thread.java:662)
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org