2012-02-02 4 views
3

n 제품 표와이 제품의 기능 표가 있습니다. 각 제품에는 많은 기능이 있습니다.Solr은 테이블을 메모리에 조인 할 수 있습니까?

<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 쿼리를 실행하십시오 SOLR DataImportHandler 구성을 감안할 때. 기본 쿼리의 경우 1이고 기능을 가져 오는 쿼리의 경우 n입니다. 이는 많은 수의 항목에 비효율적입니다. Solr이 이러한 쿼리를 별도로 실행하고 메모리에 대신 참여하도록 구성 할 수 있습니까? 두 테이블의 모든 행을 가져옵니다.

답변

3

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의 인덱스이기 때문에

'평면', feature_namedescription 어떤 식 으로든 연결되어 있지 않습니다; 각 product에는 각각에 대해 여러 값 필드가 있습니다.

1

Solr이이 작업을 수행 할 수 있는지는 잘 모르지만 데이터베이스는 가능합니다. MySQL을 사용하고 있다고 가정 할 경우 JOINGROUP_CONCAT을 사용하여 이것을 단일 쿼리로 변환하십시오. 쿼리는 다음과 같이 보일 것이다 :

SELECT id, name, GROUP_CONCAT(description) AS desc FROM item INNER JOIN feature ON (feature.item_id = item.id) GROUP BY id

는 여러 값을 분리하는 descRegexTransformer를 사용하는 것을 잊지 마십시오.

+0

이미 태그와 같은 단일 값 하위 엔티티에이 기술을 사용하고 있지만 여러 필드가있는 하위 엔티티에 대해이 작업을 수행하는 방법은 무엇입니까? * 이것을 반영하도록 질문을 업데이트했습니다. * – beerbajay

+1

GROUP_CONCAT()은 주어진 ID에 대한 설명의 모든 값을 가져 와서 결과의 단일 열에 반환합니다. 설명의 개별 값은 쉼표로 구분됩니다. 그런 다음 RegexTransformer를 사용하여 인덱싱하기 전에 쉼표로 구분할 수 있습니다. – nikhil500

+0

당신은 내가 의미했던 것을 오해했습니다. 하위 엔터티에 ** ** ** ** 필드가있는 경우 함께 포함됩니다 (예 : 각 제품에는 많은 기능이 있으며 각 기능은 이름 * 및 * 설명으로 구성됩니다. – beerbajay

관련 문제