You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@manifoldcf.apache.org by Victor D'agostino <vi...@fiducial.net> on 2016/03/24 12:56:08 UTC

Does manifoldcf supports sub entities/queries ?

Hi guys

I'm testing manifoldcf 1.10 to crawl data from a postgresql database to 
a solr cloud ensemble.
My database is used to store emails. For each email there is a details 
table entry and one or several recipients entry in an other table.

I need help setting the data query in my crawling job.

How can i avoid crawling the details each time there is a recipient ?
In Solr DIH it's called a subentities :

<dataSource type="JdbcDataSource" driver="org.postgresql.Driver" [...]"/>
     <document>
         <entity name="mail"
         query="SELECT email_id, [...] emetteur_budget FROM 
email_details WHERE [ ...]
           <field column="email_id" name="mail_id" />
             [...]
             <field column="emetteur_budget" name="emetteur_budget" />

             <entity name="destinataires"
             query="select utilisateur_id, adresse_email, [...] where 
email_id='${mail.email_id}' and date='${mail.date}'">
                 <field column="utilisateur_id" name="destinataire_ids" />
                 <field column="adresse_email" name="destinataire_mails" />
                 [...]
             </entity>

         </entity>
     </document>


Does manifoldcf supports subentities ?

Regards
Victor



________________
Ce message et les éventuels documents joints peuvent contenir des informations confidentielles. Au cas où il ne vous serait pas destiné, nous vous remercions de bien vouloir le supprimer et en aviser immédiatement l'expéditeur. Toute utilisation de ce message non conforme à sa destination, toute diffusion ou publication, totale ou partielle et quel qu'en soit le moyen est formellement interdite. Les communications sur internet n'étant pas sécurisées, l'intégrité de ce message n'est pas assurée et la société émettrice ne peut être tenue pour responsable de son contenu. 

Re: Does manifoldcf supports sub entities/queries ?

Posted by Victor D'agostino <vi...@fiducial.net>.
Hi and thanks for your reply.

I think there is no need to define a document with a (email, 
destination) tuple so maybe I can try to set up two jobs.

One job for the details of each mail and a second job for the recipients 
of each mail.

Regards
Victor


-------- Message original --------
*Sujet: *Re: Does manifoldcf supports sub entities/queries ?
*De : *Karl Wright <da...@gmail.com>
*Pour : *user@manifoldcf.apache.org <us...@manifoldcf.apache.org>
*Date : *24/03/2016 13:43
> Hi Victor,
>
> It looks like you are setting up your Solr DIH to define an individual 
> document as being defined by a unique (email, destination) tuple?
>
> If this is correct, some comments.
>
> First, ManifoldCF only ever indexes a single document at a time.  It 
> never indexes pieces of documents.  I don't believe that Solr has that 
> capacity either.  So everything depends on your definition of a 
> document is.
>
> Second, you would want to use the MCF JDBC connector.  The JDBC 
> connector is relatively primitive and uses a flat model. This requires 
> you to construct queries so that you define a document "ID", which in 
> this case would consist of the email ID PLUS the destination, plus 
> whatever data is required by the query.  Obviously you'd need a join 
> in your seeding query to produce the proper set of IDs in question.  
> In fact, ALL of your queries will have to have a join in them in order 
> to produce the information for the email + destination ID. Because the 
> JDBC connector is this simple, you may find that your underlying 
> schema is a poor match for the queries that would be necessary to plug 
> into the JDBC connector and cannot support the needed indexes.  In 
> this case you can either modify your schema, use a view, or write a 
> custom connector that does more precisely what you need.
>
> Hope this helps,
> Karl
>
>
> 2016-03-24 7:56 GMT-04:00 Victor D'agostino 
> <victor.d.agostino@fiducial.net <ma...@fiducial.net>>:
>
>     Hi guys
>
>     I'm testing manifoldcf 1.10 to crawl data from a postgresql
>     database to a solr cloud ensemble.
>     My database is used to store emails. For each email there is a
>     details table entry and one or several recipients entry in an
>     other table.
>
>     I need help setting the data query in my crawling job.
>
>     How can i avoid crawling the details each time there is a recipient ?
>     In Solr DIH it's called a subentities :
>
>     <dataSource type="JdbcDataSource" driver="org.postgresql.Driver"
>     [...]"/>
>         <document>
>             <entity name="mail"
>             query="SELECT email_id, [...] emetteur_budget FROM
>     email_details WHERE [ ...]
>               <field column="email_id" name="mail_id" />
>                 [...]
>                 <field column="emetteur_budget" name="emetteur_budget" />
>
>                 <entity name="destinataires"
>                 query="select utilisateur_id, adresse_email, [...]
>     where email_id='${mail.email_id}' and date='${mail.date}'">
>                     <field column="utilisateur_id"
>     name="destinataire_ids" />
>                     <field column="adresse_email"
>     name="destinataire_mails" />
>                     [...]
>                 </entity>
>
>             </entity>
>         </document>
>
>
>     Does manifoldcf supports subentities ?
>
>     Regards
>     Victor
>
>
>     
>     ________________
>     Ce message et les éventuels documents joints peuvent contenir des
>     informations confidentielles. Au cas où il ne vous serait pas
>     destiné, nous vous remercions de bien vouloir le supprimer et en
>     aviser immédiatement l'expéditeur. Toute utilisation de ce message
>     non conforme à sa destination, toute diffusion ou publication,
>     totale ou partielle et quel qu'en soit le moyen est formellement
>     interdite. Les communications sur internet n'étant pas sécurisées,
>     l'intégrité de ce message n'est pas assurée et la société
>     émettrice ne peut être tenue pour responsable de son contenu. 
>
>



________________
Ce message et les éventuels documents joints peuvent contenir des informations confidentielles. Au cas où il ne vous serait pas destiné, nous vous remercions de bien vouloir le supprimer et en aviser immédiatement l'expéditeur. Toute utilisation de ce message non conforme à sa destination, toute diffusion ou publication, totale ou partielle et quel qu'en soit le moyen est formellement interdite. Les communications sur internet n'étant pas sécurisées, l'intégrité de ce message n'est pas assurée et la société émettrice ne peut être tenue pour responsable de son contenu. 

Re: Error tossed: Multiple document primary component dispositions not allowed

Posted by Karl Wright <da...@gmail.com>.
Hi Victor,

The URLCOLUMN is mandatory because that is the document's output key.  I'm
surprised it didn't complain that it was needed; usually it will if it
isn't in the query.

Karl

On Thu, Mar 24, 2016 at 1:02 PM, Victor D'agostino <
victor.d.agostino@fiducial.net> wrote:

> Hi
>
> Thanks for your help but a primary key can't be duplicate and the request
> is simple.
>
> I solved this issue by adding a field AS $(URLCOLUMN) and an another field
> AS $(DATACOLUMN)
>
> Are $(URLCOLUMN) and $(DATACOLUMN) mandatory ? My data are not from a
> website so it is useless for me.
>
> Victor
>
>
> -------- Message original --------
> *Sujet: *Re: Error tossed: Multiple document primary component
> dispositions not allowed
> *De : *Karl Wright <da...@gmail.com> <da...@gmail.com>
> *Pour : *user@manifoldcf.apache.org <us...@manifoldcf.apache.org>
> <us...@manifoldcf.apache.org>
> *Date : *24/03/2016 16:12
>
> Hi Victor,
>
> This error usually means that the connector has a bug, but in the JDBC
> case it likely means only that you have multiple rows being returned for
> each document identifier.
>
> Thanks,
> Karl
>
>
>
> 2016-03-24 10:05 GMT-04:00 Victor D'agostino <
> victor.d.agostino@fiducial.net>:
>
>> Hi guys
>>
>> Do you know what this log entry means ?
>>
>> FATAL 2016-03-24 15:01:30,014 (Worker thread '30') - Error tossed:
>> Multiple document primary component dispositions not allowed: document
>> 'ea7dac8e-ab73-47ff-86f7-a0763ecd2f56'
>> java.lang.IllegalStateException: Multiple document primary component
>> dispositions not allowed: document 'ea7dac8e-ab73-47ff-86f7-a0763ecd2f56'
>>         at
>> org.apache.manifoldcf.crawler.system.WorkerThread$ProcessActivity.checkMultipleDispositions(WorkerThread.java:2246)
>>         at
>> org.apache.manifoldcf.crawler.system.WorkerThread$ProcessActivity.noDocument(WorkerThread.java:1731)
>>         at
>> org.apache.manifoldcf.crawler.system.WorkerThread$ProcessActivity.noDocument(WorkerThread.java:1712)
>>         at
>> org.apache.manifoldcf.crawler.connectors.jdbc.JDBCConnector.processDocuments(JDBCConnector.java:839)
>>         at
>> org.apache.manifoldcf.crawler.system.WorkerThread.run(WorkerThread.java:403)
>>
>> When I do a jdbc query from a postgresql database to index to a Solr
>> Cloud ensemble :
>> query 1 to get a list of document uuid to index : SELECT email_id AS
>> $(IDCOLUMN) FROM email_details WHERE date > '1970-01-01 12:00:00'
>> query 2 and 3 are empty
>> query 4 to select data to index : SELECT email_id AS $(IDCOLUMN), texte,
>> date FROM email_details WHERE email_id IN $(IDLIST)
>>
>> email_id is a uuid field (primary key).
>>
>> Regards
>> Victor
>>
>> 
>> ________________
>> Ce message et les éventuels documents joints peuvent contenir des
>> informations confidentielles. Au cas où il ne vous serait pas destiné, nous
>> vous remercions de bien vouloir le supprimer et en aviser immédiatement
>> l'expéditeur. Toute utilisation de ce message non conforme à sa
>> destination, toute diffusion ou publication, totale ou partielle et quel
>> qu'en soit le moyen est formellement interdite. Les communications sur
>> internet n'étant pas sécurisées, l'intégrité de ce message n'est pas
>> assurée et la société émettrice ne peut être tenue pour responsable de son
>> contenu.
>
>
>
>
> Ce message et les éventuels documents joints peuvent contenir des
> informations confidentielles. Au cas où il ne vous serait pas destiné, nous
> vous remercions de bien vouloir le supprimer et en aviser immédiatement
> l'expéditeur. Toute utilisation de ce message non conforme à sa
> destination, toute diffusion ou publication, totale ou partielle et quel
> qu'en soit le moyen est formellement interdite. Les communications sur
> internet n'étant pas sécurisées, l'intégrité de ce message n'est pas
> assurée et la société émettrice ne peut être tenue pour responsable de son
> contenu.
>
>

Re: Error tossed: Multiple document primary component dispositions not allowed

Posted by Victor D'agostino <vi...@fiducial.net>.
Hi

Thanks for your help but a primary key can't be duplicate and the 
request is simple.

I solved this issue by adding a field AS $(URLCOLUMN) and an another 
field AS $(DATACOLUMN)

Are $(URLCOLUMN) and $(DATACOLUMN) mandatory ? My data are not from a 
website so it is useless for me.

Victor


-------- Message original --------
*Sujet: *Re: Error tossed: Multiple document primary component 
dispositions not allowed
*De : *Karl Wright <da...@gmail.com>
*Pour : *user@manifoldcf.apache.org <us...@manifoldcf.apache.org>
*Date : *24/03/2016 16:12
> Hi Victor,
>
> This error usually means that the connector has a bug, but in the JDBC 
> case it likely means only that you have multiple rows being returned 
> for each document identifier.
>
> Thanks,
> Karl
>
>
>
> 2016-03-24 10:05 GMT-04:00 Victor D'agostino 
> <victor.d.agostino@fiducial.net <ma...@fiducial.net>>:
>
>     Hi guys
>
>     Do you know what this log entry means ?
>
>     FATAL 2016-03-24 15:01:30,014 (Worker thread '30') - Error tossed:
>     Multiple document primary component dispositions not allowed:
>     document 'ea7dac8e-ab73-47ff-86f7-a0763ecd2f56'
>     java.lang.IllegalStateException: Multiple document primary
>     component dispositions not allowed: document
>     'ea7dac8e-ab73-47ff-86f7-a0763ecd2f56'
>             at
>     org.apache.manifoldcf.crawler.system.WorkerThread$ProcessActivity.checkMultipleDispositions(WorkerThread.java:2246)
>             at
>     org.apache.manifoldcf.crawler.system.WorkerThread$ProcessActivity.noDocument(WorkerThread.java:1731)
>             at
>     org.apache.manifoldcf.crawler.system.WorkerThread$ProcessActivity.noDocument(WorkerThread.java:1712)
>             at
>     org.apache.manifoldcf.crawler.connectors.jdbc.JDBCConnector.processDocuments(JDBCConnector.java:839)
>             at
>     org.apache.manifoldcf.crawler.system.WorkerThread.run(WorkerThread.java:403)
>
>     When I do a jdbc query from a postgresql database to index to a
>     Solr Cloud ensemble :
>     query 1 to get a list of document uuid to index : SELECT email_id
>     AS $(IDCOLUMN) FROM email_details WHERE date > '1970-01-01 12:00:00'
>     query 2 and 3 are empty
>     query 4 to select data to index : SELECT email_id AS $(IDCOLUMN),
>     texte, date FROM email_details WHERE email_id IN $(IDLIST)
>
>     email_id is a uuid field (primary key).
>
>     Regards
>     Victor
>
>     
>     ________________
>     Ce message et les éventuels documents joints peuvent contenir des
>     informations confidentielles. Au cas où il ne vous serait pas
>     destiné, nous vous remercions de bien vouloir le supprimer et en
>     aviser immédiatement l'expéditeur. Toute utilisation de ce message
>     non conforme à sa destination, toute diffusion ou publication,
>     totale ou partielle et quel qu'en soit le moyen est formellement
>     interdite. Les communications sur internet n'étant pas sécurisées,
>     l'intégrité de ce message n'est pas assurée et la société
>     émettrice ne peut être tenue pour responsable de son contenu. 
>
>



________________
Ce message et les éventuels documents joints peuvent contenir des informations confidentielles. Au cas où il ne vous serait pas destiné, nous vous remercions de bien vouloir le supprimer et en aviser immédiatement l'expéditeur. Toute utilisation de ce message non conforme à sa destination, toute diffusion ou publication, totale ou partielle et quel qu'en soit le moyen est formellement interdite. Les communications sur internet n'étant pas sécurisées, l'intégrité de ce message n'est pas assurée et la société émettrice ne peut être tenue pour responsable de son contenu. 

Re: Error tossed: Multiple document primary component dispositions not allowed

Posted by Karl Wright <da...@gmail.com>.
Hi Victor,

This error usually means that the connector has a bug, but in the JDBC case
it likely means only that you have multiple rows being returned for each
document identifier.

Thanks,
Karl



2016-03-24 10:05 GMT-04:00 Victor D'agostino <victor.d.agostino@fiducial.net
>:

> Hi guys
>
> Do you know what this log entry means ?
>
> FATAL 2016-03-24 15:01:30,014 (Worker thread '30') - Error tossed:
> Multiple document primary component dispositions not allowed: document
> 'ea7dac8e-ab73-47ff-86f7-a0763ecd2f56'
> java.lang.IllegalStateException: Multiple document primary component
> dispositions not allowed: document 'ea7dac8e-ab73-47ff-86f7-a0763ecd2f56'
>         at
> org.apache.manifoldcf.crawler.system.WorkerThread$ProcessActivity.checkMultipleDispositions(WorkerThread.java:2246)
>         at
> org.apache.manifoldcf.crawler.system.WorkerThread$ProcessActivity.noDocument(WorkerThread.java:1731)
>         at
> org.apache.manifoldcf.crawler.system.WorkerThread$ProcessActivity.noDocument(WorkerThread.java:1712)
>         at
> org.apache.manifoldcf.crawler.connectors.jdbc.JDBCConnector.processDocuments(JDBCConnector.java:839)
>         at
> org.apache.manifoldcf.crawler.system.WorkerThread.run(WorkerThread.java:403)
>
> When I do a jdbc query from a postgresql database to index to a Solr Cloud
> ensemble :
> query 1 to get a list of document uuid to index : SELECT email_id AS
> $(IDCOLUMN) FROM email_details WHERE date > '1970-01-01 12:00:00'
> query 2 and 3 are empty
> query 4 to select data to index : SELECT email_id AS $(IDCOLUMN), texte,
> date FROM email_details WHERE email_id IN $(IDLIST)
>
> email_id is a uuid field (primary key).
>
> Regards
> Victor
>
> 
> ________________
> Ce message et les éventuels documents joints peuvent contenir des
> informations confidentielles. Au cas où il ne vous serait pas destiné, nous
> vous remercions de bien vouloir le supprimer et en aviser immédiatement
> l'expéditeur. Toute utilisation de ce message non conforme à sa
> destination, toute diffusion ou publication, totale ou partielle et quel
> qu'en soit le moyen est formellement interdite. Les communications sur
> internet n'étant pas sécurisées, l'intégrité de ce message n'est pas
> assurée et la société émettrice ne peut être tenue pour responsable de son
> contenu.

Error tossed: Multiple document primary component dispositions not allowed

Posted by Victor D'agostino <vi...@fiducial.net>.
Hi guys

Do you know what this log entry means ?

FATAL 2016-03-24 15:01:30,014 (Worker thread '30') - Error tossed: 
Multiple document primary component dispositions not allowed: document 
'ea7dac8e-ab73-47ff-86f7-a0763ecd2f56'
java.lang.IllegalStateException: Multiple document primary component 
dispositions not allowed: document 'ea7dac8e-ab73-47ff-86f7-a0763ecd2f56'
         at 
org.apache.manifoldcf.crawler.system.WorkerThread$ProcessActivity.checkMultipleDispositions(WorkerThread.java:2246)
         at 
org.apache.manifoldcf.crawler.system.WorkerThread$ProcessActivity.noDocument(WorkerThread.java:1731)
         at 
org.apache.manifoldcf.crawler.system.WorkerThread$ProcessActivity.noDocument(WorkerThread.java:1712)
         at 
org.apache.manifoldcf.crawler.connectors.jdbc.JDBCConnector.processDocuments(JDBCConnector.java:839)
         at 
org.apache.manifoldcf.crawler.system.WorkerThread.run(WorkerThread.java:403)

When I do a jdbc query from a postgresql database to index to a Solr 
Cloud ensemble :
query 1 to get a list of document uuid to index : SELECT email_id AS 
$(IDCOLUMN) FROM email_details WHERE date > '1970-01-01 12:00:00'
query 2 and 3 are empty
query 4 to select data to index : SELECT email_id AS $(IDCOLUMN), texte, 
date FROM email_details WHERE email_id IN $(IDLIST)

email_id is a uuid field (primary key).

Regards
Victor


________________
Ce message et les éventuels documents joints peuvent contenir des informations confidentielles. Au cas où il ne vous serait pas destiné, nous vous remercions de bien vouloir le supprimer et en aviser immédiatement l'expéditeur. Toute utilisation de ce message non conforme à sa destination, toute diffusion ou publication, totale ou partielle et quel qu'en soit le moyen est formellement interdite. Les communications sur internet n'étant pas sécurisées, l'intégrité de ce message n'est pas assurée et la société émettrice ne peut être tenue pour responsable de son contenu. 

Re: Does manifoldcf supports sub entities/queries ?

Posted by Karl Wright <da...@gmail.com>.
Hi Victor,

It looks like you are setting up your Solr DIH to define an individual
document as being defined by a unique (email, destination) tuple?

If this is correct, some comments.

First, ManifoldCF only ever indexes a single document at a time.  It never
indexes pieces of documents.  I don't believe that Solr has that capacity
either.  So everything depends on your definition of a document is.

Second, you would want to use the MCF JDBC connector.  The JDBC connector
is relatively primitive and uses a flat model.  This requires you to
construct queries so that you define a document "ID", which in this case
would consist of the email ID PLUS the destination, plus whatever data is
required by the query.  Obviously you'd need a join in your seeding query
to produce the proper set of IDs in question.  In fact, ALL of your queries
will have to have a join in them in order to produce the information for
the email + destination ID.  Because the JDBC connector is this simple, you
may find that your underlying schema is a poor match for the queries that
would be necessary to plug into the JDBC connector and cannot support the
needed indexes.  In this case you can either modify your schema, use a
view, or write a custom connector that does more precisely what you need.

Hope this helps,
Karl


2016-03-24 7:56 GMT-04:00 Victor D'agostino <vi...@fiducial.net>
:

> Hi guys
>
> I'm testing manifoldcf 1.10 to crawl data from a postgresql database to a
> solr cloud ensemble.
> My database is used to store emails. For each email there is a details
> table entry and one or several recipients entry in an other table.
>
> I need help setting the data query in my crawling job.
>
> How can i avoid crawling the details each time there is a recipient ?
> In Solr DIH it's called a subentities :
>
> <dataSource type="JdbcDataSource" driver="org.postgresql.Driver" [...]"/>
>     <document>
>         <entity name="mail"
>         query="SELECT email_id, [...] emetteur_budget FROM email_details
> WHERE [ ...]
>           <field column="email_id" name="mail_id" />
>             [...]
>             <field column="emetteur_budget" name="emetteur_budget" />
>
>             <entity name="destinataires"
>             query="select utilisateur_id, adresse_email, [...] where
> email_id='${mail.email_id}' and date='${mail.date}'">
>                 <field column="utilisateur_id" name="destinataire_ids" />
>                 <field column="adresse_email" name="destinataire_mails" />
>                 [...]
>             </entity>
>
>         </entity>
>     </document>
>
>
> Does manifoldcf supports subentities ?
>
> Regards
> Victor
>
>
> 
> ________________
> Ce message et les éventuels documents joints peuvent contenir des
> informations confidentielles. Au cas où il ne vous serait pas destiné, nous
> vous remercions de bien vouloir le supprimer et en aviser immédiatement
> l'expéditeur. Toute utilisation de ce message non conforme à sa
> destination, toute diffusion ou publication, totale ou partielle et quel
> qu'en soit le moyen est formellement interdite. Les communications sur
> internet n'étant pas sécurisées, l'intégrité de ce message n'est pas
> assurée et la société émettrice ne peut être tenue pour responsable de son
> contenu.