2013-05-15 33 views
1

我dynamicField在Solr的4.0刻面查詢會給dynamicfield錯誤輸出Solr中

「pa_mydynamicfieldname」我有儲值在這一領域爲:

我以系統編碼索引我的數據。 Web.HttpUtility.UrlEncode(pa_mydynamicfieldname)如 :2.2 + GHz的英特爾+ + +奔騰雙核E2200 +

當我申請方面的查詢得到的結果,那麼輸出是:

<lst name="facet_fields"> 
<lst name="pa_mydynamicfieldname"> 
    <int name="2.2">1</int> 
    <int name="2.5">1</int> 
    <int name="core">1</int> 
    <int name="dual">1</int> 
    <int name="e2200">1</int> 
    <int name="ghz">1</int> 
    <int name="intel">1</int> 
    <int name="pentium">1</int> 
</lst> 

取而代之的是我想作爲輸出:

<lst name="facet_fields"> 
<lst name="pa_mydynamicfieldname"> 
    <int name="2.2+GHz+Intel+Pentium+Dual-Core+E2200">1</int> 
</lst> 

如何在Solr的同時應用方面查詢做到這一點?

更新於15月13

從模式,文本字段定義爲:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 

和動態字段定義爲:

<dynamicField name="pa_*" type="text" indexed="true" stored="true" multiValued="true" required="false" /> 

我們需要它作爲多值字段,因爲文檔可能會爲每個產品定義多個值。

請幫幫我。

感謝

回答

3

爲了實現您希望的行爲,你將需要更改字段類型在您schema.xml中的充滿活力的領域。目前,您的pa_mydyanmicfieldname可能定義爲type="text_general"multivalued="true"。所以你的字段值被分解爲令牌,然後這些令牌被存儲爲多個值。這會產生您顯示的行爲,其中多個單詞/標記作爲構面值返回。

既然你希望保存爲您提交的原始值,請更改您的字段類型,只是一個普通的舊字符串,而不是多值:

<dynamicField name="*_mydynamicfeldname" type="string" 
      indexed="true" stored="true"/> 

或者你也可以交替利用基於動態的預定義的字符串的優勢在本例中schema.xml定義字段:

<dynamicField name="*_s" type="string" indexed="true" stored="true" /> 

您需要進行此更改您schema.xml中新的字段類型被妥善保存,並反映在搜索結果後,重新索引數據。

+0

感謝您的建議,我更新了附加信息的問題。今天我將再次嘗試將類型更改爲字符串,並在此處進行更新。再次感謝你。 – Herin

+0

根據您更新的問題,您可以打開多值,在這種情況下,它是字符串類型是關鍵。由於文本值是導致它被分解爲多個條目(2.2,GHZ等)的每個單個值的原因。 –

+1

謝謝,它現在通過將類型從「文本」更改爲「字符串」。 – Herin