我正在将Elasticsearch实例从1.7升级到5.4.3,并注意到两个系统之间的搜索结果不同,即使使用相同的查询也是如此。
Elasticsearch 1.7查询
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "something",
"fields": [
"field1",
"field2",
"field3"
],
"operator": "and"
}
}
]
}
}
}
Elasticsearch 5.4查询
_explain
Elasticsearch 1.7中的第一个搜索结果成为Elasticsearch 5.4的第71个结果。当我使用{
"_index": "...",
"_type": "...",
"_id": "...",
"matched": true,
"explanation": {
"value": 9.963562,
"description": "max of:",
"details": [
{
"value": 3.1413355,
"description": "sum of:",
"details": [
{
"value": 1.0609967,
"description": "weight(field1:something in 13) [PerFieldSimilarity], result of:",
"details": [
...remainder removed for brevity
端点查看1.7和5.4之间的相同搜索结果时,我发现评分的完成方式不同。此外,此查询还包括搜索查询匹配的同义词。
解释Elasticsearch 1.7
{
"_index": "...",
"_type": "...",
"_id": "...",
"matched": true,
"explanation": {
"value": 7.1987557,
"description": "sum of:",
"details": [
{
"value": 7.1987557,
"description": "max of:",
"details": [
{
"value": 6.659632,
"description": "weight(Synonym(field1:something field1:something2 field1:something3) in 113) [PerFieldSimilarity], result of:",
"details": [
...remainder removed for brevity
解释Elasticsearch 5.4
_explain
问题
max of
查询是否显示sum of
高于const hasEmpty = myVariables.some(v => typeof v === 'undefined');
的计算结果,而Elasticsearch 5.4的相反表明问题的一部分?答案 0 :(得分:0)
默认"相似度"在Elasticsearch 5.0中已更改,从TF / IDF更改为BM25
从技术上讲,移动到Lucene 6.2(默认为Elasticsearch 5.0.0)时,这实际上是一个变化。
Elasticsearch 5.0.0 Release Notes包括以下一行:
您可以阅读有关Elasticsearch similarity here的更多信息。这是两个字段相互比较的方式(特别是那些带有" text"映射的字段)。在5.0.0之前的版本中,默认相似度为TF / IDF(术语频率,逆文档频率),后来更改为BM25(最佳匹配25)。此更改将导致一组不同的结果,这些结果旨在成为更好的搜索结果集。
如果您想使用以前的行为,您可以更改映射文件中的similarity
以使用classic
(指TF / IDF)。例如,您的YAML映射文件可以包含:
description:
type: text
similarity: classic
有用链接以及更多信息: