2012-07-04 6 views
0

면 처리 검색 잘못된 결과 :SolrNet - 나는 다음과 같은 클래스를 가지고

public class Product 
{ 
    public Product() 
    { 
     Categories = new List<Category>(); 
    } 

    [SolrUniqueKey("id")] 
    public int Id { get; set; } 

    [SolrField("name")] 
    public string Name { get; set; } 

    [SolrField("cat")] 
    public virtual List<Category> Categories { get; set; }   
} 

는 지금은 100 개 제품 SOLR 입력합니다. 제품의 이름은 을 기준으로합니다. testitem [i] 여기서 은 제품 번호입니다. (0-99).

이제는 잘 작동하는 범주에 대해서도 마찬가지입니다. 그러나 이름에 패싯을 묻는다면 다음과 같은 결과를 얻게됩니다.

<int name="testitem">100</int> 
<int name="0">1</int> 
<int name="1">1</int> 
<int name="10">1</int> 
<int name="11">1</int> 
<int name="12">1</int> 
<int name="13">1</int> 
<int name="14">1</int> 
<int name="15">1</int> 
<int name="16">1</int> 
etc.. 

이 부분은 올바르지 않습니다. 예를 들어, 문자열에서 분할합니다. 이상한 일은 이것이 카테고리 패싯에서 발생하지 않는다는 것입니다.

잘못되고있는 사람이 누구인지 아나요/잘못하고 있습니다.

답변

2

아마도 이것은 인덱스의 name 필드에 사용중인 Solr 필드 유형 때문일 가능성이 큽니다. name에 대한 schema.xml의 fieldType 정의를 자세히 살펴 본다면 그 숫자는 text_general 일 것입니다.이 필드는 사용자가 입력 한 값을 토큰 화합니다. 따라서 이름 값을 텍스트와 숫자 값으로 나눌 수 있습니다. 이 경우, 새 값 필드를 저장하기 위해 별도의 필드를 사용하고 Copy Field 지시문을 사용하여 이름 값을이 새 필드로 이동하는 것이 좋습니다.

그래서 스키마는

<field name="name" type="text_general" stored="true" indexed="true" /> 
<field name="name_facet" type="string" stored="true" indexed="true" /> 

<copyField source="name" dest="name_facet" /> 

는 그 다음 name_facet 필드에 대한 당신의 패싯 쿼리를 실행 ... 다음과 같이 보일 것입니다 그리고 당신은 예상 된 결과를 볼 수 있습니다.

+0

감사합니다. Solr을 처음 접했고 모든 필드도 schema.xml에 지정해야한다는 것을 알지 못했습니다. 내 스키마가 변경되어 이제는 완벽하게 작동합니다. 감사! – Julian

+0

복사 필드를 사용하면 solrnet 클래스에서 선언합니까 ??? 아니면 그냥 스키마에서 변경하고 그것은 작동합니다 .. ?? –

+0

@DharmikBhandari 둘 다 업데이트해야합니다. 스키마에 copyField 지시문을 추가 한 다음 Solr의 결과에서 해당 copyField의 값에 액세스하려면 항목에 표시된대로 모두 캐치 매핑을 사용하지 않는 한 Solrnet 클래스에도이 값을 추가해야합니다 사전 매핑 및 동적 입력란 아래의 http://code.google.com/p/solrnet/wiki/ 매핑을 참조하십시오. –

관련 문제