相似性(得分/排名模型)定义了匹配文档如何进行评分。相似性是针对字段的,意味着通过映射可以对每个字段定义不同的相似性模块。
大多数现有或自定义相似性具有可以通过索引设置进行配置的配置选项,如下所示,可以在创建索引或更新索引设置时提供索引选项。
"similarity" : {
"my_similarity" : {
"type" : "DFR",
"basic_model" : "g",
"after_effect" : "l",
"normalization" : "h2",
"normalization.h2.c" : "3.0"
}
}
这里我们配置DFRSimilarity,所以它可以在映射中被引用为my_similarity,如下例所示:
{
"book" : {
"properties" : {
"title" : { "type" : "text", "similarity" : "my_similarity" }
}
}
基于TF / IDF的相似性,内置了tf标准化,并且对短字段(如名称)效率更高。有关详细信息,请参阅Okapi_BM25。这种相似性有以下选项:
| k1 | 控制非线性索引词频率标准(饱和度)。默认值为1.2 | | b | 控制文档长度标准化到tf值的程度。默认值为0.75 | | discount_overlaps | 决定重叠词元(词元的位置增量为0)是否要被忽略。默认值为true,意味着重叠词元不会被统计 |
类型名:BM25
基于TF / IDF模型的classic相似性。这种相似性有以下选项:
| discount_overlaps | 决定重叠词元(词元的位置增量为0)是否要被忽略。默认值为true,意味着重叠词元不会被统计 |
类型名:classic
实现divergence from randomness框架。这种相似性有以下选项:
| basic_model | 可能的值有:**be**,``**d**,
**g**,
**if**,
**in**,
ine
和 p
|
| after_effect | 可能的值有: no
,b
和 l
|
| normalization | 可能的值有: **no**,``**h1**,
**h2**,
h3
和 z
|
类型名:DFR
实现divergence from independence模块,这种相似性有以下选项:
| independence_measure | 可能的值 standardized
,**saturated**
,chisquared
|
类型名:DFI
Information based model 。该算法基于以下概念:任何符号分布序列中的信息内容主要由其基本元素的重复使用决定。对于书面文本,这个方式会对比不同作者的写作风格。这种相似性有以下选项:
| distribution | 可能的值: ll
和 spl
|
| lambda | 可能的值:df
和 ttf
|
| normalization | 与DFR相似度相同。 |
类型名:IB
LM Dirichlet similarity。这种相似性有以下选项:
| mu | 默认值为2000 |
类型名:LMDirichlet
LM Jelinek Mercer similarity。该算法尝试捕获文本中的图像并去除噪点。这种相似性有以下选项:
| lambda | 最优值取决于采集和查询。标题查询的最佳值约为0.1,长查询的最优值为0.7。默认为0.1。当值接近0时,匹配更多查询索引词的文档会比匹配较少索引词的文档的排列位置更靠前。 |
类型名:LMJelinekMercer
默认情况下,Elasticsearch将使用任何配置为default的相似性模块。然而,queryNorm()和coord()的相似度函数不是每个字段都会执行。因此,对于想要更改用于这两种方法的实现的专家用户,在不更改默认值的情况下,可以使用base名配置相似性。这种相似性将用于这两种方法。
创建索引时,可以更改索引中所有字段的默认相似度:
PUT /my_index
{
"settings": {
"index": {
"similarity": {
"default": {
"type": "classic"
}
}
}
}
}
如果要在创建索引后更改默认的相似性,则必须关闭索引,然后发送以下请求并重新打开:
PUT /my_index/_settings
{
"settings": {
"index": {
"similarity": {
"default": {
"type": "classic"
}
}
}
}
}