MST
星途 面试题库

面试题:ElasticSearch中存储字段如何影响搜索相关性

在ElasticSearch中,我们知道存储字段对于搜索结果至关重要。请阐述存储字段是怎样影响搜索相关性评分的?如果有一个包含商品描述和价格的索引,如何通过合理设置存储字段提升价格相关搜索的相关性?
31.4万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

存储字段对搜索相关性评分的影响

  1. 词频(Term Frequency):存储字段中搜索词出现的频率会影响评分。出现频率越高,在其他条件相同的情况下,文档相关性得分可能越高。例如,在商品描述字段中,若某个搜索词多次出现,说明该文档与搜索意图关联更紧密。
  2. 逆文档频率(Inverse Document Frequency):在整个索引中,包含特定词的文档数量越少,该词的逆文档频率越高,其在搜索评分中的权重越大。存储字段内容决定了词在文档中的分布,进而影响逆文档频率计算。
  3. 字段长度归一化(Field - length normalization):较短的存储字段,其中的词权重相对更高。因为在短字段中出现的词,被认为对该文档主题更具代表性。例如,标题字段通常较短,其中的词在评分时权重较高。

通过合理设置存储字段提升价格相关搜索的相关性

  1. 价格字段类型设置:将价格字段设置为合适的数值类型,如 longdouble,这样ElasticSearch可以进行数值范围查询等操作。在搜索时,对于价格相关的查询,如 “价格低于100元的商品”,数值类型的字段能准确匹配,提高相关性。
  2. 多字段处理:除了原始价格字段,可创建一个专门用于价格范围匹配的字段。例如,按价格区间(如0 - 100,101 - 200等)进行分类存储。搜索时,可根据用户输入的价格范围优先匹配对应的区间字段,若匹配成功,文档相关性可显著提高。
  3. 权重设置:在进行搜索时,对价格字段设置较高的权重。比如,在商品描述和价格都包含搜索词时,让价格字段中的词对相关性评分贡献更大。可以通过 function_score 查询来实现,例如:
{
    "query": {
        "function_score": {
            "query": {
                "multi_match": {
                    "query": "用户输入词",
                    "fields": ["商品描述", "价格"]
                }
            },
            "functions": [
                {
                    "field_value_factor": {
                        "field": "价格",
                        "modifier": "log1p",
                        "factor": 10
                    }
                }
            ]
        }
    }
}

通过上述方式,合理设置存储字段能有效提升价格相关搜索的相关性。