我正在使用Solr分组结果。但它表现不对。
我在电子邮件字段的基础上分组。在我的数据库中,我有2行电子邮件地址“ashhaf63@hotmail.com”,但SOLR显示7147 numFound当然是错误的,应该是2。
当我尝试使用特定的电子邮件地址(例如“ashhaf63@hotmail.com”)进行分组搜索时,它会显示完美的结果,并且在numFound属性中显示2是正确的。
我相信,这是因为我的Solr架构中的字段类型,我在开始时使用了文本字段类型,但我现在已将其更改为我自己的字段类型。我已经定义了自己的字段类型,现在使用我自己的字段类型。
使用我自己的字段类型后,我面临同样的问题。
答案 0 :(得分:2)
如果您查看分组响应,您会看到它与7147个文档相匹配,因为该组包含在其地址<str name="groupValue">hotmail</str>
中包含“hotmail”的所有电子邮件,而不是整个电子邮件地址。这种行为是因为您希望将字段中的值编入索引为完整字符串,例如“ashhaf63@hotmail.com”,但是根据您的email
fieldType的定义,您正在对字段值进行一些标记。这导致该字段的多个索引值。特别是在所有非字母数字字符上拆分值的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
字段上执行分组,该字段将对整个电子邮件地址值进行分组。