2012-07-04 41 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; }   
} 

現在我填Solr的100個系列產品。 產品的名稱是基於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.. 

正如您所看到的,這是不正確的。它看起來像solr分割從字符串號碼。奇怪的是,這不會發生在類別方面。

有誰知道什麼事情出錯/我做錯了。

回答

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的結果中訪問該複製字段中的值,則還需要將其添加到solrnet類中,除非您使用條目中所示的捕獲所有映射http://code.google.com/p/solrnet/wiki/Mapping的詞典映射和動態字段部分。 –