0

내가 SOLR에 새로운 해요,이 그것을 할 수있는 최선의 방법 인 경우 나도 몰라 :SOLR : 패싯 범주 태양 흑점

나는 몇 가지 범주로 분류되는 일부 제품을 보유하고 있습니다. 카테고리는

- Electronics 
    - Computer 
    - Apple 
     - iPads 
     - Macbooks 
    - Samsung 
    - Notebooks 
    - Photo 
- Fashion 
    - Women 
    - Men 
    - Shirts 

과 같은 계층 구조로 구성됩니다. 모든 제품에는 여러 카테고리가있을 수 있습니다. 예를 들어 제품은 Electronics > Computer > Apple > MacbooksElectronics > Computer > Notebooks 일 수 있습니다. Electronics의 제품을 나열하면 모든 하위 범주를 포함한 모든 기본 제품이 반환됩니다. Electronics > Computer에 제품을 나열하면 해당 하위 카테고리의 제품 만 반환됩니다.

내 가게는 레일에 있으며, sunspot을 Solr 용 DSL로 사용합니다. 흑점에서는 category_names이라는 필드가 있는데이 필드는 multiple: truestored: true입니다. 이 분야에서는이 같은 SOLR에 저장되어있는 루트에서 가장 깊은 하위 범주에 여러 범주를 저장 :

<arr name="category_names_sms"> 
    <str>Electronics</str> 
    <str>Electronics#Computer</str> 
    <str>Electronics#Computer#Notebooks</str> 
    <str>Electronics#Computer#Apple</str> 
    <str>Electronics#Computer#Apple#Macbooks</str> 
</arr> 

나는면 검색 모든 카테고리를 검색하려면, 난 그냥 facet=true&facet.field=category_names와 SOLR 전화, 난 단지 특정 카테고리에서 제품을 가져 오기 할 때, 그리고 내가 fq=category_names:Electronics와 SOLR를 호출하고 있는데이 해당 범주에서 모든 제품을 반환

<lst name="facet_counts"> 
    <lst name="facet_queries"/> 
    <lst name="facet_fields"> 
    <lst name="taxon_names_sms"> 
     <int name="Electronics">2831</int> 
     <int name="Electronics#Computer">1988</int> 
     <int name="Electronics#Computer#Apple">543</int> 
     ... 
    </lst 
    </lst 
</lst> 

같은 STH를 반환합니다. 또한 모든 제품에는 루트 카테고리에 대한 경로가 포함되어 있으므로 하위 카테고리에서 제품을 얻을 수도 있습니다.

피어싱 패싯, 계층 적 패싯에 대한 기사를 읽었습니다 ... 솔라 기능을 올바르게 사용하면 약간 혼란 스럽습니다. 내 질문 :

  • 이 방법이 좋은 방법입니까? 또는 상상할 수있는 단점이 있습니까? 나는 클라이언트 측에서 범주를 분할하고 구문 분석하기 위해 # 해시 태그를 사용하고 있습니다. 그 점은 내가 좋아하지 않는 점입니다.
  • 또 다른 문제점은 Solr에서 카테고리를 가져올 때 범주 이름 만 있다는 것입니다. 그러나 카테고리에 ID 또는 퍼머 링크가 필요합니다. Solr에 그러한 정보를 저장하는 방법이 있습니까? 나는이 정보를 얻기 위해 데이터베이스에 접근하고 싶지 않다.
  • Solr의 솔루션이 더 좋을까요?이 전체 계층 카테고리를 더 잘 처리 할 수 ​​있습니까?
  • 나는 sunspot의 기본 solr XML configs 만 사용합니다. 필자는 필드 정의에 대해 읽었습니다. 누군가 나를 설명 할 수 있나요, 흑점과 함께 사용하는 방법?

고맙습니다. 누군가가 올바른 방향으로 나를 밀어 주길 바랍니다.

답변

0

당신이 가지고있는 구조가 꽤 복잡하다는 것을 알 수 있습니다. 솔라와 같이 가지 않는 것이 좋습니다.

Solr 4.0+는 제한된 조인 기능을 수행 할 수 있지만 이는 그의 장점이 아닙니다. 이 문서에서 찾아 보게한다 (expecially에 부분을 "관계의 계층과 관계가 SOLR 슬프게") : http://bibwild.wordpress.com/2011/01/24/thinking-like-solr-its-not-an-rdbms/

및 SOLR에서 가장 잘 작동하는 데이터베이스를 비정규 화하는 방법에 대한 도움말이 하나 http://mysolr.com/tips/denormalized-data-structure/

0
  1. 나는 또한 그 해결책을 좋아하지 않는다.

  2. cattegory 이름을 변경하면 어떻게됩니까? 해당 카테고리의 모든 제품을 다시 색인해야합니다. 나는 하나의 db 쿼리를하는 것이 더 좋은 방법이라고 생각한다.

  3. Solr은 피벗 패싯을 지원합니다. 그래서 당신은 그것을 사용할 수 있습니다 (에 대한 당신이 전자 만 제품 를 가져하려면

    <field name="categories" type="int" indexed="true" stored="true" multiValued="true"/>

    <dynamicField name="category_*" type="int" indexed="true" stored="true" multiValued="true"/>

    :

    카테고리의 수준이 동적 필드를 사용한다 무제한 인 경우 예를 들어 ID는 20이고 수준은 1입니다.) :

    fq=categories:20&fq={!tag=no_subcat}NOT category_2:[* TO *]

    그리고 당신은 전자 아이 subchild 범주 측면을 구축 할 수 있습니다 : 나는 루비를 사용한 적이

    facet.pivot={!ex=no_subcat}category_2,category_3

  4. .

관련 문제