0

我正在使用 Solr 分组结果。但它的行为是错误的。

在此处输入图像描述

我根据电子邮件字段进行分组。在我的数据库中,电子邮件地址“ashhaf63@hotmail.com”有 2 行,但 SOLR 显示 7147 numFound,这当然是错误的,应该是 2。

当我尝试使用带有分组的特定电子邮件地址(如“ashhaf63@hotmail.com”)进行搜索时,它会显示完美的结果,并且在 numFound 属性中显示 2 是正确的。

在此处输入图像描述

我相信,这是因为我的 Solr 模式中的字段类型,我在开始时使用文本字段类型,但我现在已将其更改为我自己的字段类型。我已经定义了自己的字段类型并现在使用自己的字段类型。

在此处输入图像描述

在此处输入图像描述

使用我自己的字段类型后,我面临同样的问题。

4

1 回答 1

2

如果您查看您的分组回复,您将看到它与 7147 文档匹配,因为该组包含地址中包含“hotmail”的所有电子邮件,<str name="groupValue">hotmail</str>而不是整个电子邮件地址。这种行为是因为您希望字段中的值被索引为完整的字符串,例如“ashhaf63@hotmail.com”,但是从您的emailfieldType 的定义中,您正在对字段值进行一些标记。这会导致该字段有多个索引值。特别是StandardTokenizerFactory,它在所有非字母数字字符上分割一个值。因此,相同的电子邮件地址被索引为三个单独的值,“ashhaf63”、“hotmail”和“com”。

因此,我建议创建一个使用简单字符串 fieldType 的新字段,如下所示:

<!-- 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字段上执行分组,它将根据整个电子邮件地址值进行分组。

于 2012-11-13T13:20:15.860 回答