Hybris SOLR 文本、模糊、通配符和短语自由文本查询

Nex*_*nts 2 solr solrj solrcloud hybris-data-hub sap-commerce-cloud

我正在尝试自定义 Hybris 的搜索,禁用某些属性(如“manufactureName”)并允许其他属性在搜索自动完成和拼写检查中工作,但是,例如:我发现 SolrSearchQueryProperty“manufacturerName”有多个“属性”:

在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述

所有这些属性(自由文本、模糊文本、通配符和短语)意味着什么?

Yon*_*oni 9

基于此配置,将构建 solr 查询以在 solr 上进行搜索。如果这些类型中至少有一种设置为 true,则该类型的查询将添加到查询中。如果 multiple 设置为 true,则所有内容都将附加到搜索查询中。

\n

一般参数

\n

促进

\n

通过该boost参数,您可以配置此类型的匹配将获得更好的匹配。例如,如果某些内容完全匹配,您通常希望它看起来比接近匹配时更高,因此您在此处添加更大的提升。

\n

最小长度

\n

你也有min length参数。这定义了激活此类搜索之前应输入的最小字符数。您可以定义在模糊搜索激活之前,您需要输入至少 5 个字符。这是为了防止某些搜索类型返回字符数量较少的大量结果

\n

类型的含义是什么

\n

假设在示例中,我们有一个 solr 索引,其中 ManufacturingName 字段有 3 个条目:test, testing, real test。所有示例均针对ManufacturerName 字段。

\n

自由文本查询

\n

这是完全匹配搜索。只有在 solr 索引中找到确切的关键字时,才会得到结果。请注意,这并不意味着它必须匹配整个值。在 solr 的情况下,real test考虑realtest单独的关键字。如果您要搜索多个关键字,例如在“real test”上,solr 将搜索关键字“real”和关键字“test”

\n

Solr查询

\n

(manufactureName_text : test)

\n

结果

\n
test\nreal test\n
Run Code Online (Sandbox Code Playgroud)\n

自由文本通配符查询

\n

顾名思义,这是通配符搜索。这意味着您可以输入搜索词的一部分。通过通配符类型,您可以确定通配符在搜索中的放置位置。您想要完整的通配符,还是只在最后。

\n

使用 postFix 查询类型的 Solr 查询

\n
(manufactureName_text : test*)\n
Run Code Online (Sandbox Code Playgroud)\n

结果

\n
test\ntesting\nreal test\n
Run Code Online (Sandbox Code Playgroud)\n

自由文本模糊查询

\n

当您允许搜索中出现错误时,将使用模糊查询。这意味着您还将匹配具有一些错误字符的搜索关键字。该fuzzyness因素决定了结果显示的错误程度。请注意,模糊搜索没有通配符。它的行为更像是精确匹配

\n

Solr 查询有 1 个字符错误

\n
(manufactureName_text : tast\xe2\x88\xbc)\n
Run Code Online (Sandbox Code Playgroud)\n

结果

\n
test\nreal test\n
Run Code Online (Sandbox Code Playgroud)\n

自由文本短语查询

\n

最后我们有一个文本短语搜索。通过短语搜索,我们还会考虑空格,而不仅仅是关键字。通过短语搜索,您可以输入slop factor. 草率定义了字符可以移动到仍能找到匹配项的最大位置数。这是为了即使搜索与结果略有不同,仍然可以找到结果。斜率因子为 2 时,test real将给出与 的匹配real test,因为使用 1 个位置开关,我们可以找到结果。

\n

Solr查询

\n
(manufactureName_text:"real test")\n
Run Code Online (Sandbox Code Playgroud)\n

结果

\n
real test\n
Run Code Online (Sandbox Code Playgroud)\n

组合

\n

如果您激活多种搜索样式,所有这些 solr 查询部分都会附加一个OR. 通过 boost 规则和 solr 中的计算,最匹配的项目将显示在结果列表的顶部。基本上,您决定允许什么类型的搜索,以及它们如何影响返回的结果

\n

自由文本查询和自由文本短语查询处于活动状态的示例查询

\n

(manufactureName_text : real) OR (manufactureName_text : test) OR (manufactureName_text:"real test")

\n

结果

\n
real test\ntest\n
Run Code Online (Sandbox Code Playgroud)\n