Hybris:使用相同的字段进行搜索和构面

Hybris: Use same field for search and facet

我必须在 Hybris 中为 solr 搜索和 solr facet 使用字段 "manufacturerName"。虽然solr自由文本搜索要求字段类型为文本,但facet仅在字符串类型中才能正常工作。

有没有办法将同一字段用于搜索和分面。我认为使用 "copyField" 有一种方法,但我搜索了很多,仍然不知道如何使用它?

非常感谢任何帮助!

PS:在保留字段类型字符串的情况下,自由文本搜索无法获取正确的结果。在保留字段类型文本时,facet 显示截断值。

使用 copyField 指令是可行的方法,但这需要您定义一个替代字段 - 这意味着您有一个类型为 text 和相关标记化的字段,以及一个类型为 string 不以任何方式处理。据我所知,Solr 无法将这些组合到一个字段中。

然后您将使用字符串字段的名称生成分面,而在查询时使用其他字段。

<copyField source="text_search_field" dest="string_facet_field" />

然后,当您在该字段上进行筛选或分面时,您将不得不参考名称 string_facet_field。在用户选择一个构面后,您将希望针对构面字段进行过滤,否则您最终会得到来自其他构面的文档可能会泄漏到您的文档结果集中(例如,如果该构面是 "Foo Bar",您d 突然得到以 "Baz Foo Bar Spam" 作为构面的文档,因为这两个词都出现在搜索字符串中。

我无法实施 "copyField" 方法,但我找到了另一种简单的方法。在 solr.impex 中,我已经添加了字符串类型的新字段 manufacturerNameFacet,但是有一个参数 "fieldValueProvider" 和 "valueProviderParameter"。我将这些值提供为 "springELValueProvider" 以及我想用于搜索和分面的字段 "manufacturerName"。在 solr 完整索引之后,它就像一个魅力。不需要其他设置。搜索和分面都按预期工作。