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 Jean-Philippe Quéméner <je...@gmail.com> on 2015/11/25 12:27:27 UTC
Use dataimporthandler cache with stored procedures
Hi,
I'm trying to import my data from an sql database using the
dataimporthandler. For some nested entity I want to use the cache to cache
the result of my stored procedure. My config looks like this
<document>
> <entity name="product" dataSource="datawarehouse" query="CALL getSolrProducts();" transformer="RegexTransformer">
> <field column="pk" name="pk"/>
> ....
> <field column="brand_id" name="productbrand"/>
> <entity name="brand" dataSource="backend" query="CALL getBrandMeta(${product.brand_id});" cacheKey="id" cacheLookup="product.brand_id" cacheImpl="SortedMapBackedCache">
> <field column="productbrandname" name="productbrandname"/>
> <field column="productbrandurl" name="productbrandurl"/>
> <field column="productbrandimage" name="productbrandimage"/>
> <field column="productbranddata" name="productbranddata"/>
> </entity>
> ....
> </entity>
> </document>
>
>
For some reason the cache only save the first result and doesn't show the
entity in all other documents having a different brand_id.
I have around 300 different brand_id's so I would expect at least 300
queries to the database but only the first one is made
Am I missing something? .
Re: Use dataimporthandler cache with stored procedures
Posted by Mikhail Khludnev <mk...@griddynamics.com>.
Hello Jean-Philippe,
You either call it 300 times with the different param value, without cache
<entity name="brand" dataSource="backend" query="CALL
getBrandMeta(${product.brand_id});">
or load all rows once and cache them
<entity name="brand" dataSource="backend" query="CALL getALLBrandMeta();"
cacheKey="id" cacheLookup="product.brand_id"
cacheImpl="SortedMapBackedCache">
SQL examples in the doc explain this clear, I suppose.
On Wed, Nov 25, 2015 at 2:27 PM, Jean-Philippe Quéméner <
jeanphilippe.quemener@gmail.com> wrote:
> Hi,
> I'm trying to import my data from an sql database using the
> dataimporthandler. For some nested entity I want to use the cache to cache
> the result of my stored procedure. My config looks like this
>
> <document>
> > <entity name="product" dataSource="datawarehouse" query="CALL
> getSolrProducts();" transformer="RegexTransformer">
> > <field column="pk" name="pk"/>
> > ....
> > <field column="brand_id" name="productbrand"/>
> > <entity name="brand" dataSource="backend" query="CALL
> getBrandMeta(${product.brand_id});" cacheKey="id"
> cacheLookup="product.brand_id" cacheImpl="SortedMapBackedCache">
> > <field column="productbrandname" name="productbrandname"/>
> > <field column="productbrandurl" name="productbrandurl"/>
> > <field column="productbrandimage" name="productbrandimage"/>
> > <field column="productbranddata" name="productbranddata"/>
> > </entity>
> > ....
> > </entity>
> > </document>
> >
> >
> For some reason the cache only save the first result and doesn't show the
> entity in all other documents having a different brand_id.
>
> I have around 300 different brand_id's so I would expect at least 300
> queries to the database but only the first one is made
>
> Am I missing something? .
>
--
Sincerely yours
Mikhail Khludnev
Principal Engineer,
Grid Dynamics
<http://www.griddynamics.com>
<mk...@griddynamics.com>