You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Andrew Clegg <an...@gmail.com> on 2009/10/27 16:50:21 UTC

Greater-than and less-than in data import SQL queries

Hi,

If I have a DataImportHandler query with a greater-than sign in, like this:

        <entity name="higher_node" dataSource="database" query="select *,
title as keywords from cathnode_text where node_depth > 4">

Everything's fine. However, if it contains a less-than sign:

        <entity name="higher_node" dataSource="database" query="select *,
title as keywords from cathnode_text where node_depth < 4">

I get this exception:

INFO: Processing configuration from solrconfig.xml: {config=dataconfig.xml}
[Fatal Error] :240:129: The value of attribute "query" associated with an
element type "null" must not contain the '<' character.
27-Oct-2009 15:30:49 org.apache.solr.handler.dataimport.DataImportHandler
inform
SEVERE: Exception while loading DataImporter
org.apache.solr.handler.dataimport.DataImportHandlerException: Exception
occurred while initializing context
        at
org.apache.solr.handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:184)
        at
org.apache.solr.handler.dataimport.DataImporter.<init>(DataImporter.java:101)
        at
org.apache.solr.handler.dataimport.DataImportHandler.inform(DataImportHandler.java:113)
        at
org.apache.solr.core.SolrResourceLoader.inform(SolrResourceLoader.java:424)
        at org.apache.solr.core.SolrCore.<init>(SolrCore.java:588)
        at
org.apache.solr.core.CoreContainer$Initializer.initialize(CoreContainer.java:137)
        at
org.apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:83)
        at
org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
        at
org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
        at
org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
        at
org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709)
        at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4356)
        at
org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1244)
        at
org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:604)
        at
org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:129)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        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:175)
        at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
        at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:568)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        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:286)
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
Caused by: org.xml.sax.SAXParseException: The value of attribute "query"
associated with an element type "null" must not contain the '<' character.
        at
com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:239)
        at
com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
        at
org.apache.solr.handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:172)
        ... 30 more

Is this fixable, or an unavoidable feature of Xerces? If the latter, perhaps
the docs could benefit from a note to say "use NOT a >= b" or something?

Speaking of, I found this in the wiki examples for the DIH:

            <entity name="item" pk="ID"
                query="select * from item"
                deltaImportQuery="select * from item where
ID=='${dataimporter.delta.id}'"
                deltaQuery="select id from item where last_modified >
'${dataimporter.last_index_time}'">

Shouldn't that be one equals sign:

                deltaImportQuery="select * from item where
ID='${dataimporter.delta.id}'"

Or is it doing something clever with Java operators?

Cheers,

Andrew.

-- 
View this message in context: http://www.nabble.com/Greater-than-and-less-than-in-data-import-SQL-queries-tp26080100p26080100.html
Sent from the Solr - User mailing list archive at Nabble.com.


Re: Greater-than and less-than in data import SQL queries

Posted by Noble Paul നോബിള്‍ नोब्ळ् <no...@corp.aol.com>.
On Mon, Nov 2, 2009 at 11:34 AM, Amit Nithian <an...@gmail.com> wrote:
> A thought I had on this from a DIH design perspective. Would it be better to
> have the SQL queries stored in an element rather than an attribute so that
> you can wrap it in a CDATA block without having to mess up the look of query
> with &lt, &gt? Makes debugging easier (I know find and replace is trivial
> but it can be annoying when debugging SQL issues :-)).

Actually most of the parsers are forgiving in this aspect. I mean '<'
and '>' are ok in the xml parser shipped with the jdk.

>
> On Wed, Oct 28, 2009 at 5:15 PM, Lance Norskog <go...@gmail.com> wrote:
>
>> It is easier to put SQL select statements in a view, and just use that
>> view from the DIH configuration file.
>>
>> On Tue, Oct 27, 2009 at 12:30 PM, Andrew Clegg <an...@gmail.com>
>> wrote:
>> >
>> >
>> > Heh, eventually I decided
>> >
>> > "where 4 > node_depth"
>> >
>> > was the most pleasing (if slightly WTF-ish) way of writing it...
>> >
>> > Cheers,
>> >
>> > Andrew.
>> >
>> >
>> > Erik Hatcher-4 wrote:
>> >>
>> >> Use &lt; instead of < in that attribute.  That should fix the issue.
>> >> Remember, it's an XML file, so it has to obey XML encoding rules which
>> >> make it ugly but whatcha gonna do?
>> >>
>> >>       Erik
>> >>
>> >> On Oct 27, 2009, at 11:50 AM, Andrew Clegg wrote:
>> >>
>> >>>
>> >>> Hi,
>> >>>
>> >>> If I have a DataImportHandler query with a greater-than sign in,
>> >>> like this:
>> >>>
>> >>>        <entity name="higher_node" dataSource="database"
>> >>> query="select *,
>> >>> title as keywords from cathnode_text where node_depth > 4">
>> >>>
>> >>> Everything's fine. However, if it contains a less-than sign:
>> >>>
>> >>>        <entity name="higher_node" dataSource="database"
>> >>> query="select *,
>> >>> title as keywords from cathnode_text where node_depth < 4">
>> >>>
>> >>> I get this exception:
>> >>>
>> >>> INFO: Processing configuration from solrconfig.xml:
>> >>> {config=dataconfig.xml}
>> >>> [Fatal Error] :240:129: The value of attribute "query" associated
>> >>> with an
>> >>> element type "null" must not contain the '<' character.
>> >>> 27-Oct-2009 15:30:49
>> >>> org.apache.solr.handler.dataimport.DataImportHandler
>> >>> inform
>> >>> SEVERE: Exception while loading DataImporter
>> >>> org.apache.solr.handler.dataimport.DataImportHandlerException:
>> >>> Exception
>> >>> occurred while initializing context
>> >>>        at
>> >>> org
>> >>> .apache
>> >>> .solr
>> >>> .handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:184)
>> >>>        at
>> >>> org
>> >>> .apache
>> >>> .solr.handler.dataimport.DataImporter.<init>(DataImporter.java:101)
>> >>>        at
>> >>> org
>> >>> .apache
>> >>> .solr
>> >>> .handler.dataimport.DataImportHandler.inform(DataImportHandler.java:
>> >>> 113)
>> >>>        at
>> >>> org
>> >>> .apache.solr.core.SolrResourceLoader.inform(SolrResourceLoader.java:
>> >>> 424)
>> >>>        at org.apache.solr.core.SolrCore.<init>(SolrCore.java:588)
>> >>>        at
>> >>> org.apache.solr.core.CoreContainer
>> >>> $Initializer.initialize(CoreContainer.java:137)
>> >>>        at
>> >>> org
>> >>> .apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:
>> >>> 83)
>> >>>        at
>> >>> org
>> >>> .apache
>> >>> .catalina
>> >>> .core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:
>> >>> 275)
>> >>>        at
>> >>> org
>> >>> .apache
>> >>> .catalina
>> >>> .core
>> >>> .ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:
>> >>> 397)
>> >>>        at
>> >>> org
>> >>> .apache
>> >>> .catalina
>> >>> .core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
>> >>>        at
>> >>> org
>> >>> .apache
>> >>> .catalina.core.StandardContext.filterStart(StandardContext.java:3709)
>> >>>        at
>> >>> org.apache.catalina.core.StandardContext.start(StandardContext.java:
>> >>> 4356)
>> >>>        at
>> >>> org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:
>> >>> 1244)
>> >>>        at
>> >>> org
>> >>> .apache
>> >>> .catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:
>> >>> 604)
>> >>>        at
>> >>> org
>> >>> .apache
>> >>> .catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:
>> >>> 129)
>> >>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
>> >>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>> >>>        at
>> >>> org
>> >>> .apache
>> >>> .catalina
>> >>> .core
>> >>> .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
>> >>> 290)
>> >>>        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:
>> >>> 175)
>> >>>        at
>> >>> org
>> >>> .apache
>> >>> .catalina
>> >>> .authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
>> >>>        at
>> >>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
>> >>> 568)
>> >>>        at
>> >>> org
>> >>> .apache
>> >>> .catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>> >>>        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:
>> >>> 286)
>> >>>        at
>> >>> org
>> >>> .apache.coyote.http11.Http11Processor.process(Http11Processor.java:
>> >>> 844)
>> >>>        at
>> >>> org.apache.coyote.http11.Http11Protocol
>> >>> $Http11ConnectionHandler.process(Http11Protocol.java:583)
>> >>>        at
>> >>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:
>> >>> 447)
>> >>>        at java.lang.Thread.run(Thread.java:619)
>> >>> Caused by: org.xml.sax.SAXParseException: The value of attribute
>> >>> "query"
>> >>> associated with an element type "null" must not contain the '<'
>> >>> character.
>> >>>        at
>> >>> com
>> >>> .sun
>> >>> .org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:
>> >>> 239)
>> >>>        at
>> >>> com
>> >>> .sun
>> >>> .org
>> >>> .apache
>> >>> .xerces
>> >>> .internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
>> >>>        at
>> >>> org
>> >>> .apache
>> >>> .solr
>> >>> .handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:172)
>> >>>        ... 30 more
>> >>>
>> >>> Is this fixable, or an unavoidable feature of Xerces? If the latter,
>> >>> perhaps
>> >>> the docs could benefit from a note to say "use NOT a >= b" or
>> >>> something?
>> >>>
>> >>> Speaking of, I found this in the wiki examples for the DIH:
>> >>>
>> >>>            <entity name="item" pk="ID"
>> >>>                query="select * from item"
>> >>>                deltaImportQuery="select * from item where
>> >>> ID=='${dataimporter.delta.id}'"
>> >>>                deltaQuery="select id from item where last_modified >
>> >>> '${dataimporter.last_index_time}'">
>> >>>
>> >>> Shouldn't that be one equals sign:
>> >>>
>> >>>                deltaImportQuery="select * from item where
>> >>> ID='${dataimporter.delta.id}'"
>> >>>
>> >>> Or is it doing something clever with Java operators?
>> >>>
>> >>> Cheers,
>> >>>
>> >>> Andrew.
>> >>>
>> >>> --
>> >>> View this message in context:
>> >>>
>> http://www.nabble.com/Greater-than-and-less-than-in-data-import-SQL-queries-tp26080100p26080100.html
>> >>> Sent from the Solr - User mailing list archive at Nabble.com.
>> >>>
>> >>
>> >>
>> >>
>> >
>> > --
>> > View this message in context:
>> http://www.nabble.com/Greater-than-and-less-than-in-data-import-SQL-queries-tp26080100p26083680.html
>> > Sent from the Solr - User mailing list archive at Nabble.com.
>> >
>> >
>>
>>
>>
>> --
>> Lance Norskog
>> goksron@gmail.com
>>
>



-- 
-----------------------------------------------------
Noble Paul | Principal Engineer| AOL | http://aol.com

Re: Greater-than and less-than in data import SQL queries

Posted by Amit Nithian <an...@gmail.com>.
A thought I had on this from a DIH design perspective. Would it be better to
have the SQL queries stored in an element rather than an attribute so that
you can wrap it in a CDATA block without having to mess up the look of query
with &lt, &gt? Makes debugging easier (I know find and replace is trivial
but it can be annoying when debugging SQL issues :-)).

On Wed, Oct 28, 2009 at 5:15 PM, Lance Norskog <go...@gmail.com> wrote:

> It is easier to put SQL select statements in a view, and just use that
> view from the DIH configuration file.
>
> On Tue, Oct 27, 2009 at 12:30 PM, Andrew Clegg <an...@gmail.com>
> wrote:
> >
> >
> > Heh, eventually I decided
> >
> > "where 4 > node_depth"
> >
> > was the most pleasing (if slightly WTF-ish) way of writing it...
> >
> > Cheers,
> >
> > Andrew.
> >
> >
> > Erik Hatcher-4 wrote:
> >>
> >> Use &lt; instead of < in that attribute.  That should fix the issue.
> >> Remember, it's an XML file, so it has to obey XML encoding rules which
> >> make it ugly but whatcha gonna do?
> >>
> >>       Erik
> >>
> >> On Oct 27, 2009, at 11:50 AM, Andrew Clegg wrote:
> >>
> >>>
> >>> Hi,
> >>>
> >>> If I have a DataImportHandler query with a greater-than sign in,
> >>> like this:
> >>>
> >>>        <entity name="higher_node" dataSource="database"
> >>> query="select *,
> >>> title as keywords from cathnode_text where node_depth > 4">
> >>>
> >>> Everything's fine. However, if it contains a less-than sign:
> >>>
> >>>        <entity name="higher_node" dataSource="database"
> >>> query="select *,
> >>> title as keywords from cathnode_text where node_depth < 4">
> >>>
> >>> I get this exception:
> >>>
> >>> INFO: Processing configuration from solrconfig.xml:
> >>> {config=dataconfig.xml}
> >>> [Fatal Error] :240:129: The value of attribute "query" associated
> >>> with an
> >>> element type "null" must not contain the '<' character.
> >>> 27-Oct-2009 15:30:49
> >>> org.apache.solr.handler.dataimport.DataImportHandler
> >>> inform
> >>> SEVERE: Exception while loading DataImporter
> >>> org.apache.solr.handler.dataimport.DataImportHandlerException:
> >>> Exception
> >>> occurred while initializing context
> >>>        at
> >>> org
> >>> .apache
> >>> .solr
> >>> .handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:184)
> >>>        at
> >>> org
> >>> .apache
> >>> .solr.handler.dataimport.DataImporter.<init>(DataImporter.java:101)
> >>>        at
> >>> org
> >>> .apache
> >>> .solr
> >>> .handler.dataimport.DataImportHandler.inform(DataImportHandler.java:
> >>> 113)
> >>>        at
> >>> org
> >>> .apache.solr.core.SolrResourceLoader.inform(SolrResourceLoader.java:
> >>> 424)
> >>>        at org.apache.solr.core.SolrCore.<init>(SolrCore.java:588)
> >>>        at
> >>> org.apache.solr.core.CoreContainer
> >>> $Initializer.initialize(CoreContainer.java:137)
> >>>        at
> >>> org
> >>> .apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:
> >>> 83)
> >>>        at
> >>> org
> >>> .apache
> >>> .catalina
> >>> .core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:
> >>> 275)
> >>>        at
> >>> org
> >>> .apache
> >>> .catalina
> >>> .core
> >>> .ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:
> >>> 397)
> >>>        at
> >>> org
> >>> .apache
> >>> .catalina
> >>> .core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
> >>>        at
> >>> org
> >>> .apache
> >>> .catalina.core.StandardContext.filterStart(StandardContext.java:3709)
> >>>        at
> >>> org.apache.catalina.core.StandardContext.start(StandardContext.java:
> >>> 4356)
> >>>        at
> >>> org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:
> >>> 1244)
> >>>        at
> >>> org
> >>> .apache
> >>> .catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:
> >>> 604)
> >>>        at
> >>> org
> >>> .apache
> >>> .catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:
> >>> 129)
> >>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
> >>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> >>>        at
> >>> org
> >>> .apache
> >>> .catalina
> >>> .core
> >>> .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
> >>> 290)
> >>>        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:
> >>> 175)
> >>>        at
> >>> org
> >>> .apache
> >>> .catalina
> >>> .authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
> >>>        at
> >>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
> >>> 568)
> >>>        at
> >>> org
> >>> .apache
> >>> .catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
> >>>        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:
> >>> 286)
> >>>        at
> >>> org
> >>> .apache.coyote.http11.Http11Processor.process(Http11Processor.java:
> >>> 844)
> >>>        at
> >>> org.apache.coyote.http11.Http11Protocol
> >>> $Http11ConnectionHandler.process(Http11Protocol.java:583)
> >>>        at
> >>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:
> >>> 447)
> >>>        at java.lang.Thread.run(Thread.java:619)
> >>> Caused by: org.xml.sax.SAXParseException: The value of attribute
> >>> "query"
> >>> associated with an element type "null" must not contain the '<'
> >>> character.
> >>>        at
> >>> com
> >>> .sun
> >>> .org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:
> >>> 239)
> >>>        at
> >>> com
> >>> .sun
> >>> .org
> >>> .apache
> >>> .xerces
> >>> .internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
> >>>        at
> >>> org
> >>> .apache
> >>> .solr
> >>> .handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:172)
> >>>        ... 30 more
> >>>
> >>> Is this fixable, or an unavoidable feature of Xerces? If the latter,
> >>> perhaps
> >>> the docs could benefit from a note to say "use NOT a >= b" or
> >>> something?
> >>>
> >>> Speaking of, I found this in the wiki examples for the DIH:
> >>>
> >>>            <entity name="item" pk="ID"
> >>>                query="select * from item"
> >>>                deltaImportQuery="select * from item where
> >>> ID=='${dataimporter.delta.id}'"
> >>>                deltaQuery="select id from item where last_modified >
> >>> '${dataimporter.last_index_time}'">
> >>>
> >>> Shouldn't that be one equals sign:
> >>>
> >>>                deltaImportQuery="select * from item where
> >>> ID='${dataimporter.delta.id}'"
> >>>
> >>> Or is it doing something clever with Java operators?
> >>>
> >>> Cheers,
> >>>
> >>> Andrew.
> >>>
> >>> --
> >>> View this message in context:
> >>>
> http://www.nabble.com/Greater-than-and-less-than-in-data-import-SQL-queries-tp26080100p26080100.html
> >>> Sent from the Solr - User mailing list archive at Nabble.com.
> >>>
> >>
> >>
> >>
> >
> > --
> > View this message in context:
> http://www.nabble.com/Greater-than-and-less-than-in-data-import-SQL-queries-tp26080100p26083680.html
> > Sent from the Solr - User mailing list archive at Nabble.com.
> >
> >
>
>
>
> --
> Lance Norskog
> goksron@gmail.com
>

Re: Greater-than and less-than in data import SQL queries

Posted by Lance Norskog <go...@gmail.com>.
It is easier to put SQL select statements in a view, and just use that
view from the DIH configuration file.

On Tue, Oct 27, 2009 at 12:30 PM, Andrew Clegg <an...@gmail.com> wrote:
>
>
> Heh, eventually I decided
>
> "where 4 > node_depth"
>
> was the most pleasing (if slightly WTF-ish) way of writing it...
>
> Cheers,
>
> Andrew.
>
>
> Erik Hatcher-4 wrote:
>>
>> Use &lt; instead of < in that attribute.  That should fix the issue.
>> Remember, it's an XML file, so it has to obey XML encoding rules which
>> make it ugly but whatcha gonna do?
>>
>>       Erik
>>
>> On Oct 27, 2009, at 11:50 AM, Andrew Clegg wrote:
>>
>>>
>>> Hi,
>>>
>>> If I have a DataImportHandler query with a greater-than sign in,
>>> like this:
>>>
>>>        <entity name="higher_node" dataSource="database"
>>> query="select *,
>>> title as keywords from cathnode_text where node_depth > 4">
>>>
>>> Everything's fine. However, if it contains a less-than sign:
>>>
>>>        <entity name="higher_node" dataSource="database"
>>> query="select *,
>>> title as keywords from cathnode_text where node_depth < 4">
>>>
>>> I get this exception:
>>>
>>> INFO: Processing configuration from solrconfig.xml:
>>> {config=dataconfig.xml}
>>> [Fatal Error] :240:129: The value of attribute "query" associated
>>> with an
>>> element type "null" must not contain the '<' character.
>>> 27-Oct-2009 15:30:49
>>> org.apache.solr.handler.dataimport.DataImportHandler
>>> inform
>>> SEVERE: Exception while loading DataImporter
>>> org.apache.solr.handler.dataimport.DataImportHandlerException:
>>> Exception
>>> occurred while initializing context
>>>        at
>>> org
>>> .apache
>>> .solr
>>> .handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:184)
>>>        at
>>> org
>>> .apache
>>> .solr.handler.dataimport.DataImporter.<init>(DataImporter.java:101)
>>>        at
>>> org
>>> .apache
>>> .solr
>>> .handler.dataimport.DataImportHandler.inform(DataImportHandler.java:
>>> 113)
>>>        at
>>> org
>>> .apache.solr.core.SolrResourceLoader.inform(SolrResourceLoader.java:
>>> 424)
>>>        at org.apache.solr.core.SolrCore.<init>(SolrCore.java:588)
>>>        at
>>> org.apache.solr.core.CoreContainer
>>> $Initializer.initialize(CoreContainer.java:137)
>>>        at
>>> org
>>> .apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:
>>> 83)
>>>        at
>>> org
>>> .apache
>>> .catalina
>>> .core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:
>>> 275)
>>>        at
>>> org
>>> .apache
>>> .catalina
>>> .core
>>> .ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:
>>> 397)
>>>        at
>>> org
>>> .apache
>>> .catalina
>>> .core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
>>>        at
>>> org
>>> .apache
>>> .catalina.core.StandardContext.filterStart(StandardContext.java:3709)
>>>        at
>>> org.apache.catalina.core.StandardContext.start(StandardContext.java:
>>> 4356)
>>>        at
>>> org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:
>>> 1244)
>>>        at
>>> org
>>> .apache
>>> .catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:
>>> 604)
>>>        at
>>> org
>>> .apache
>>> .catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:
>>> 129)
>>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
>>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>>>        at
>>> org
>>> .apache
>>> .catalina
>>> .core
>>> .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
>>> 290)
>>>        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:
>>> 175)
>>>        at
>>> org
>>> .apache
>>> .catalina
>>> .authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
>>>        at
>>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
>>> 568)
>>>        at
>>> org
>>> .apache
>>> .catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>>>        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:
>>> 286)
>>>        at
>>> org
>>> .apache.coyote.http11.Http11Processor.process(Http11Processor.java:
>>> 844)
>>>        at
>>> org.apache.coyote.http11.Http11Protocol
>>> $Http11ConnectionHandler.process(Http11Protocol.java:583)
>>>        at
>>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:
>>> 447)
>>>        at java.lang.Thread.run(Thread.java:619)
>>> Caused by: org.xml.sax.SAXParseException: The value of attribute
>>> "query"
>>> associated with an element type "null" must not contain the '<'
>>> character.
>>>        at
>>> com
>>> .sun
>>> .org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:
>>> 239)
>>>        at
>>> com
>>> .sun
>>> .org
>>> .apache
>>> .xerces
>>> .internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
>>>        at
>>> org
>>> .apache
>>> .solr
>>> .handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:172)
>>>        ... 30 more
>>>
>>> Is this fixable, or an unavoidable feature of Xerces? If the latter,
>>> perhaps
>>> the docs could benefit from a note to say "use NOT a >= b" or
>>> something?
>>>
>>> Speaking of, I found this in the wiki examples for the DIH:
>>>
>>>            <entity name="item" pk="ID"
>>>                query="select * from item"
>>>                deltaImportQuery="select * from item where
>>> ID=='${dataimporter.delta.id}'"
>>>                deltaQuery="select id from item where last_modified >
>>> '${dataimporter.last_index_time}'">
>>>
>>> Shouldn't that be one equals sign:
>>>
>>>                deltaImportQuery="select * from item where
>>> ID='${dataimporter.delta.id}'"
>>>
>>> Or is it doing something clever with Java operators?
>>>
>>> Cheers,
>>>
>>> Andrew.
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/Greater-than-and-less-than-in-data-import-SQL-queries-tp26080100p26080100.html
>>> Sent from the Solr - User mailing list archive at Nabble.com.
>>>
>>
>>
>>
>
> --
> View this message in context: http://www.nabble.com/Greater-than-and-less-than-in-data-import-SQL-queries-tp26080100p26083680.html
> Sent from the Solr - User mailing list archive at Nabble.com.
>
>



-- 
Lance Norskog
goksron@gmail.com

Re: Greater-than and less-than in data import SQL queries

Posted by Andrew Clegg <an...@gmail.com>.

Heh, eventually I decided

"where 4 > node_depth"

was the most pleasing (if slightly WTF-ish) way of writing it...

Cheers,

Andrew.


Erik Hatcher-4 wrote:
> 
> Use &lt; instead of < in that attribute.  That should fix the issue.   
> Remember, it's an XML file, so it has to obey XML encoding rules which  
> make it ugly but whatcha gonna do?
> 
> 	Erik
> 
> On Oct 27, 2009, at 11:50 AM, Andrew Clegg wrote:
> 
>>
>> Hi,
>>
>> If I have a DataImportHandler query with a greater-than sign in,  
>> like this:
>>
>>        <entity name="higher_node" dataSource="database"  
>> query="select *,
>> title as keywords from cathnode_text where node_depth > 4">
>>
>> Everything's fine. However, if it contains a less-than sign:
>>
>>        <entity name="higher_node" dataSource="database"  
>> query="select *,
>> title as keywords from cathnode_text where node_depth < 4">
>>
>> I get this exception:
>>
>> INFO: Processing configuration from solrconfig.xml:  
>> {config=dataconfig.xml}
>> [Fatal Error] :240:129: The value of attribute "query" associated  
>> with an
>> element type "null" must not contain the '<' character.
>> 27-Oct-2009 15:30:49  
>> org.apache.solr.handler.dataimport.DataImportHandler
>> inform
>> SEVERE: Exception while loading DataImporter
>> org.apache.solr.handler.dataimport.DataImportHandlerException:  
>> Exception
>> occurred while initializing context
>>        at
>> org 
>> .apache 
>> .solr 
>> .handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:184)
>>        at
>> org 
>> .apache 
>> .solr.handler.dataimport.DataImporter.<init>(DataImporter.java:101)
>>        at
>> org 
>> .apache 
>> .solr 
>> .handler.dataimport.DataImportHandler.inform(DataImportHandler.java: 
>> 113)
>>        at
>> org 
>> .apache.solr.core.SolrResourceLoader.inform(SolrResourceLoader.java: 
>> 424)
>>        at org.apache.solr.core.SolrCore.<init>(SolrCore.java:588)
>>        at
>> org.apache.solr.core.CoreContainer 
>> $Initializer.initialize(CoreContainer.java:137)
>>        at
>> org 
>> .apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java: 
>> 83)
>>        at
>> org 
>> .apache 
>> .catalina 
>> .core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java: 
>> 275)
>>        at
>> org 
>> .apache 
>> .catalina 
>> .core 
>> .ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java: 
>> 397)
>>        at
>> org 
>> .apache 
>> .catalina 
>> .core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
>>        at
>> org 
>> .apache 
>> .catalina.core.StandardContext.filterStart(StandardContext.java:3709)
>>        at
>> org.apache.catalina.core.StandardContext.start(StandardContext.java: 
>> 4356)
>>        at
>> org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java: 
>> 1244)
>>        at
>> org 
>> .apache 
>> .catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java: 
>> 604)
>>        at
>> org 
>> .apache 
>> .catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java: 
>> 129)
>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>>        at
>> org 
>> .apache 
>> .catalina 
>> .core 
>> .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 
>> 290)
>>        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: 
>> 175)
>>        at
>> org 
>> .apache 
>> .catalina 
>> .authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
>>        at
>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java: 
>> 568)
>>        at
>> org 
>> .apache 
>> .catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>>        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: 
>> 286)
>>        at
>> org 
>> .apache.coyote.http11.Http11Processor.process(Http11Processor.java: 
>> 844)
>>        at
>> org.apache.coyote.http11.Http11Protocol 
>> $Http11ConnectionHandler.process(Http11Protocol.java:583)
>>        at
>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 
>> 447)
>>        at java.lang.Thread.run(Thread.java:619)
>> Caused by: org.xml.sax.SAXParseException: The value of attribute  
>> "query"
>> associated with an element type "null" must not contain the '<'  
>> character.
>>        at
>> com 
>> .sun 
>> .org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java: 
>> 239)
>>        at
>> com 
>> .sun 
>> .org 
>> .apache 
>> .xerces 
>> .internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
>>        at
>> org 
>> .apache 
>> .solr 
>> .handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:172)
>>        ... 30 more
>>
>> Is this fixable, or an unavoidable feature of Xerces? If the latter,  
>> perhaps
>> the docs could benefit from a note to say "use NOT a >= b" or  
>> something?
>>
>> Speaking of, I found this in the wiki examples for the DIH:
>>
>>            <entity name="item" pk="ID"
>>                query="select * from item"
>>                deltaImportQuery="select * from item where
>> ID=='${dataimporter.delta.id}'"
>>                deltaQuery="select id from item where last_modified >
>> '${dataimporter.last_index_time}'">
>>
>> Shouldn't that be one equals sign:
>>
>>                deltaImportQuery="select * from item where
>> ID='${dataimporter.delta.id}'"
>>
>> Or is it doing something clever with Java operators?
>>
>> Cheers,
>>
>> Andrew.
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/Greater-than-and-less-than-in-data-import-SQL-queries-tp26080100p26080100.html
>> Sent from the Solr - User mailing list archive at Nabble.com.
>>
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Greater-than-and-less-than-in-data-import-SQL-queries-tp26080100p26083680.html
Sent from the Solr - User mailing list archive at Nabble.com.


Re: Greater-than and less-than in data import SQL queries

Posted by Erik Hatcher <er...@gmail.com>.
Use &lt; instead of < in that attribute.  That should fix the issue.   
Remember, it's an XML file, so it has to obey XML encoding rules which  
make it ugly but whatcha gonna do?

	Erik

On Oct 27, 2009, at 11:50 AM, Andrew Clegg wrote:

>
> Hi,
>
> If I have a DataImportHandler query with a greater-than sign in,  
> like this:
>
>        <entity name="higher_node" dataSource="database"  
> query="select *,
> title as keywords from cathnode_text where node_depth > 4">
>
> Everything's fine. However, if it contains a less-than sign:
>
>        <entity name="higher_node" dataSource="database"  
> query="select *,
> title as keywords from cathnode_text where node_depth < 4">
>
> I get this exception:
>
> INFO: Processing configuration from solrconfig.xml:  
> {config=dataconfig.xml}
> [Fatal Error] :240:129: The value of attribute "query" associated  
> with an
> element type "null" must not contain the '<' character.
> 27-Oct-2009 15:30:49  
> org.apache.solr.handler.dataimport.DataImportHandler
> inform
> SEVERE: Exception while loading DataImporter
> org.apache.solr.handler.dataimport.DataImportHandlerException:  
> Exception
> occurred while initializing context
>        at
> org 
> .apache 
> .solr 
> .handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:184)
>        at
> org 
> .apache 
> .solr.handler.dataimport.DataImporter.<init>(DataImporter.java:101)
>        at
> org 
> .apache 
> .solr 
> .handler.dataimport.DataImportHandler.inform(DataImportHandler.java: 
> 113)
>        at
> org 
> .apache.solr.core.SolrResourceLoader.inform(SolrResourceLoader.java: 
> 424)
>        at org.apache.solr.core.SolrCore.<init>(SolrCore.java:588)
>        at
> org.apache.solr.core.CoreContainer 
> $Initializer.initialize(CoreContainer.java:137)
>        at
> org 
> .apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java: 
> 83)
>        at
> org 
> .apache 
> .catalina 
> .core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java: 
> 275)
>        at
> org 
> .apache 
> .catalina 
> .core 
> .ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java: 
> 397)
>        at
> org 
> .apache 
> .catalina 
> .core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
>        at
> org 
> .apache 
> .catalina.core.StandardContext.filterStart(StandardContext.java:3709)
>        at
> org.apache.catalina.core.StandardContext.start(StandardContext.java: 
> 4356)
>        at
> org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java: 
> 1244)
>        at
> org 
> .apache 
> .catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java: 
> 604)
>        at
> org 
> .apache 
> .catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java: 
> 129)
>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>        at
> org 
> .apache 
> .catalina 
> .core 
> .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 
> 290)
>        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: 
> 175)
>        at
> org 
> .apache 
> .catalina 
> .authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
>        at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java: 
> 568)
>        at
> org 
> .apache 
> .catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>        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: 
> 286)
>        at
> org 
> .apache.coyote.http11.Http11Processor.process(Http11Processor.java: 
> 844)
>        at
> org.apache.coyote.http11.Http11Protocol 
> $Http11ConnectionHandler.process(Http11Protocol.java:583)
>        at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 
> 447)
>        at java.lang.Thread.run(Thread.java:619)
> Caused by: org.xml.sax.SAXParseException: The value of attribute  
> "query"
> associated with an element type "null" must not contain the '<'  
> character.
>        at
> com 
> .sun 
> .org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java: 
> 239)
>        at
> com 
> .sun 
> .org 
> .apache 
> .xerces 
> .internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
>        at
> org 
> .apache 
> .solr 
> .handler.dataimport.DataImporter.loadDataConfig(DataImporter.java:172)
>        ... 30 more
>
> Is this fixable, or an unavoidable feature of Xerces? If the latter,  
> perhaps
> the docs could benefit from a note to say "use NOT a >= b" or  
> something?
>
> Speaking of, I found this in the wiki examples for the DIH:
>
>            <entity name="item" pk="ID"
>                query="select * from item"
>                deltaImportQuery="select * from item where
> ID=='${dataimporter.delta.id}'"
>                deltaQuery="select id from item where last_modified >
> '${dataimporter.last_index_time}'">
>
> Shouldn't that be one equals sign:
>
>                deltaImportQuery="select * from item where
> ID='${dataimporter.delta.id}'"
>
> Or is it doing something clever with Java operators?
>
> Cheers,
>
> Andrew.
>
> -- 
> View this message in context: http://www.nabble.com/Greater-than-and-less-than-in-data-import-SQL-queries-tp26080100p26080100.html
> Sent from the Solr - User mailing list archive at Nabble.com.
>