2012-11-13 42 views
0

我正在使用Solr分組結果。但它表現錯誤。Solr - 給出錯誤計數的分組結果

enter image description here

我的電子郵件領域的基礎上進行分組。在我的數據庫中,我有2行的電子郵件地址「[email protected]」,但SOLR顯示7147 numFound這當然是錯誤的,它應該是2.

當我嘗試使用特定的電子郵件地址搜索,如「ashhaf63 @ hotmail.com「進行分組,然後顯示完美結果,並在numFound屬性中顯示2,這是正確的。

enter image description here

我認爲,這是因爲在我的Solr模式字段類型的,我是用開始的文本字段類型,但我現在已經改成了我自己的字段類型。我已經定義了我自己的字段類型,現在使用我自己的字段類型。

enter image description here

enter image description here

用我自己的字段類型後,我面臨着同樣的問題。

回答

2

如果你看看你的分組響應,你會看到它匹配7147文檔,因爲該組由所有在他們的地址<str name="groupValue">hotmail</str>中有「hotmail」的電子郵件組成,而不是整個電子郵件地址。這種行爲是因爲您希望字段中的值被編入索引爲完整的字符串,例如「[email protected]」,但是從您的字段類型的定義中,您正在對字段值進行一些標記。這會導致該字段的多個索引值。具體而言,StandardTokenizerFactory可分割所有非字母數字字符的值。因此,同一個電子郵件地址被索引爲三個單獨的值,「ashhaf63」,「hotmail」和「com」。

正因爲如此,我建議創建一個使用一個簡單的字符串的字段類型,如下面的一個新的領域:

<!-- The StrField type is not analyzed, but indexed/stored verbatim. --> 
<fieldType name="string" class="solr.StrField" sortMissingLast="true" /> 

然後建立這樣一個新的領域:

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

然後執行您的分組在這個新的emailaddress字段中,該字段將對整個電子郵件地址值進行分組。