CompletionSuggester 在添加自定义分析器时停止工作。嵌套 C#

CompletionSuggester stops working when adding custom analyzer. NEST C#

我们在 AWS 上使用 ElasticSearch 并使用 NEST 创建索引。

访问我们的服务器 URL _mapping 时,我可以看到这样的完成建议:

"matchSuggest": {
"type": "completion",
"analyzer": "simple",
"payloads": true,
"preserve_separators": true,
"preserve_position_increments": true,
"max_input_length": 50
}

MatchIndex 声明如下:

 public class MatchIndex
 {
        ...
        public CompletionField<object> MatchSuggest { get; set; }
 }

但随后我们尝试为另一个 class 添加一个自定义分析器到我们的索引,它打破了所有的完成建议。

client.CreateIndex("search", i => i
    .Settings(s => s
        .NumberOfShards(5)
        .NumberOfReplicas(1)
        .Analysis(analysis => analysis
        .TokenFilters(tokenfilters => tokenfilters
            .AsciiFolding("folding-preserve", ft => ft
                .PreserveOriginal()
            )
        )

.Mappings(m => m
    .Map<PlayerIndex>(map => map
        .AutoMap().Properties(ps => ps
         .String( s => s
            .Name(n => n.Name)
            .Fields(f => f
                .String(ss => ss
                    .Name("folding")
                    .Analyzer("folding-analyzer")
                    )
             )
             .NotAnalyzed()
         )
        .Completion(c => c
            .Name(p => p.SquadMemberSuggest)
            .Payloads()
        )

        )       

    )

当我现在访问 _mapping 端点时,所有建议都不再列为完成建议。没有给出错误。每次我们尝试添加自定义分析器时,这似乎都会发生。这有什么理由吗? Elasticsearch 是否有任何我们可以查看的错误日志来找出发生这种情况的原因?

"matchSuggest": {
    "properties": {
      "input": {
        "type": "string"
      },
      "output": {
        "type": "string"
      },
      "payload": {
        "properties": {
          "awayTeamId": {
            "type": "string"
          },
          "homeTeamId": {
            "type": "string"
          },
          "id": {
            "type": "string"
          }
        }
      },
      "weight": {
        "type": "long"
      }
    }
  },
  "name": {
    "type": "string"
  },
  "parentLeagueId": {
    "type": "string"
  },
  "statusId": {
    "type": "long"
  }
}

完成类型字段使用 FST(有限状态传感器)数据结构来提供自动完成功能。每个索引的每个字段 创建一个 FST ,因此在同一索引中有两种类型并将相同的字段设置为 completion 字段将意味着字段映射设置两个字段都需要相同。其实同一个索引下不同类型的同名字段也有这个限制。

您可以考虑通过在完成字段的类型上使用不同的字段名称或每个索引只使用一种类型来解决此问题。