本节书摘来自华章计算机《深入理解ElasticSearch》一书中的第3章,第3.2节,作者:[美] 拉斐尔·酷奇(Rafa Ku) 马雷克·罗戈任斯基(Marek Rogoziński)更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.2 相似度模型配置
我们已经知道如何为索引中各个字段配置相似度模型了,现在来了解如何按需求配置它们。事实上,这相当容易。我们所要做的就是,在索引配置相关部分提供相应的相似度模型配置信息,就像下面的代码这样(本范例存储在posts_custom_similarity.json文件中):
尽管用户可以配置多个相似度模型,但此时还是先回到前面的范例。我们定义了一个名为mastering_similarity的新的相似度模型,它基于默认的TF/IDF相似度模型。接着将它的discount_overlaps属性值设置为false,指定该相似度模型用于name字段。关于不同相似度模型都有哪些属性本章后面会详细描述,现在,我们先讨论如何改变ElasticSearch的默认相似度模型。
3.2.1 选择默认的相似度模型
为了设置默认的相似度模型,我们需要提供关于一个名为default的相似度模型的配置信息。例如,要使用mastering_similarity模型作为默认的相似度模型,需要将前面的配置文件修改为如下形式(该范例存储在posts_default_similarity.json文件中):
虽然所有的相似度模型都全局使用了query norm和coord这两个评分因子(详见2.1节),但是它们又从default相似度模型的配置中移除出去了。然而,ElasticSearch允许用户根据需要改变这种状况。为了实现该目的,用户需要另外定义一个名为base的相似度模型,它的定义方式与前面的范例如出一辙,将相似度模型的名字由default改为base即可。参考下面的代码(该范例代码保存在posts_base_similarity.json文件中):
如果base相似度模型出现在索引配置中,那么当ElasticSearch使用其他相似度模型计算文档得分时,会使用base相似度模型来计算query norm和coord评分因子。
3.2.2 配置被选用的相似度模型
每个新增的相似度模型都可以根据用户需求进行配置,而ElasticSearch还允许用户不加配置地直接使用default和BM25相似度模型。因为它们是预先配置好的,而DFR和IB模型则需要进一步配置才能使用。现在,我们来看看各个相似度模型都提供了哪些可配置的属性。
配置TF/IDF相似度模型
在TF/IDF相似度模型案例中,我们可以只设置一个参数:discount_overlaps属性,其默认值为true。默认情况下,位置增量(position increment)为0(即该词条的position计数与前一个词条相同)的词条在计算评分时并不会被考虑进去。如果在计算文档时需要考虑这类词条,则需要将相似度模型的discount_overlaps属性值设置为false。
配置Okapi BM25相似度模型
在Okapi BM25相似度模型案例中,有如下参数可供配置:
- k1:该参数为浮点数,控制饱和度(saturation),即词频归一化中的非线性项。
- b:该参数为浮点数,用于控制文档长度对词频的影响。
- discount_overlaps :与TF/IDF相似度模型中的discount_overlaps参数作用相同。
配置DFR相似度模型
在DFR相似度模型案例中,有如下参数可供配置:
- basic_model:该参数值可设置为be、d、g、if、in和ine。
- after_effect:该参数值可设置为no、b和l。
- normalization :该参数值可设置为no、h1、h2、h3和z。
如果normalization参数值不是no,则需要设置归一化因子。归一化因子的设置依赖于所选的normalization参数值。参数值为h1时,使用normalization.h1.c属性;参数值为h2时,使用normalization.h2.c属性;参数值为h3时,使用normalization.h3.c属性;参数值为z时,使用normalization.z.z属性。这些属性值的数据类型均为浮点型。下面的代码展示了如何配置相似度模型:
配置IB相似度模型
在IB相似度模型案例中,有如下参数可供配置:
- distribution:该参数值可设置为ll或spl。
- lambuda:该参数值可设置为df或tff。
此外,IB模型也需要配置归一化因子,它的配置方式与DFR模型相同,这里不再赘述。下面的代码展示了如何配置IB相似度模型:
https://yqfile.alicdn.com/a1fb2e841067261ba298808b038c390c5a5b9bab.png" >