有一个 n
产品表,以及这些产品的特性表。每个产品都有很多功能。给定 Solr DataImportHandler 配置:
<document name="products">
<entity name="item" query="select id, name from item">
<field column="ID" name="id" />
<field column="NAME" name="name" />
<entity name="feature"
query="select feature_name, description from feature where item_id='${item.ID}'">
<field name="feature_name" column="description" />
<field name="description" column="description" />
</entity>
</entity>
</document>
Solr 将运行
n + 1
查询来获取这些数据。 1
用于主查询,n
用于获取特征的查询。这对于大量项目是低效的。是否可以将 Solr 配置为单独运行这些查询并将它们加入内存中?将提取两个表中的所有行。 最佳答案
这可以使用 CachedSqlEntityProcessor 来完成:
<document name="products">
<entity name="item" query="select id, name from item">
<field column="ID" name="id" />
<field column="NAME" name="name" />
<entity name="feature"
query="select item_id, feature_name, description from feature"
cacheKey="item_id"
cacheLookup="item.ID"
processor="CachedSqlEntityProcessor">
<field name="feature_name" column="description" />
<field name="description" column="description" />
</entity>
</entity>
</document>
由于Solr的索引是'flat',所以
feature_name
和description
没有任何联系;每个 product
都将具有多值字段。关于performance - Solr 可以连接内存中的表吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9119063/