当前位置: 首页 > 面试题库 >

C#Nest ElasticSearch无法将“ token_chars”映射到Nest fluentMapping

方建明
2023-03-14
问题内容

我已经通过ElasticSearch Sense浏览器插件创建了以下索引,并且还创建了C#Nest
Fluent映射。我可以在nGrams过滤器上表达Nest中除“ token_chars”以外的所有内容。我没有在C#嵌套上获得强类型属性来添加“
token_chars”。有人遇到过同样的问题吗?

json和c#设置如下所示。请帮忙

        "analysis": {
           "analyzer": {
              "str_index_analyzer": {
                 "filter": [
                    "lowercase",
                    "substring"
                 ],
                 "tokenizer": "keyword"
              },
           "filter": {
              "substring": {
                 "max_gram": "50",
                 "type": "nGram",
                 "min_gram": "2",
                 "token_chars": [ /*Not able to map */
                    "letter",
                    "digit"
                 ]
              }
           }

我没有在C#嵌套上获得强类型属性来添加“ token_chars”。有人面临同样的问题吗?

           var result = this._client.CreateIndex("mkfindex1", c => c
           .Analysis(a => a.Analyzers(an => an.Add("str_index_analyzer", new CustomAnalyzer()
            {
                Filter = new string[] { "lowercase", "substring" },
                Tokenizer = "keyword"
            })).TokenFilters(bases => bases.Add("substring", new NgramTokenFilter()
            {
                MaxGram = 50,
                MinGram = 2,

                /*"token_chars": [//Not able to map
                    "letter",
                    "digit"
                 */
             }))));

问题答案:

我遇到了同样的问题。解决方法是不使用Fluent Mapping,而仅通过Settings.Add()方法将您的分析设置直接指定为Fluent
Dictionary条目。下面是一个应正确配置索引的示例。

 var result = this._client.CreateIndex("mkfindex1", c => c
     .Settings.Add("analysis.analyzer", "str_index_analyzer")
     .Settings.add("analysis.analyzer.str_index_analyzer.type", "custom")
     .Settings.add("analysis.analyzer.str_index_analyzer.tokenizer", "keyword")
     .Settings.Add("analysis.analyzer.str_index_analyzer.filter.0", "lowercase")
     .Settings.Add("analysis.analyzer.str_index_analyzer.filter.1", "substring")
     .Settings.add("analysis.filter.substring.type", "nGram")
     .Settings.add("analysis.filter.substring.min_gram", "2")
     .Settings.add("analysis.filter.substring.max_gram", "50")
     .Settings.add("analysis.filter.substring.token_chars.0", "letter")
     .Settings.add("analysis.filter.substring.token_chars.0", "digit")
   );

希望这可以帮助。



 类似资料:
  • 将x-www-form-urlencode数据发布到Spring。这是有效的: 另一方面,这给出了一个例外: 不支持内容类型'application/x-www-form-urlencoded;charset=utf-8' 这将导致bean上的所有字段为空: FUD: 表单数据: POM:

  • 我使用http://jsonlint.com来验证JSON是否有效。因此,我要么需要更改JSON或代码,要么可能两者都需要。有什么想法吗?

  • 您好,在boost或std中是否有一个容器,其中键是类型名,值是对象/实例??? 我想要实现的是,对于每种数据类型,我都有一个对象池,当我想要构造那个对象时,我只想通过键获取。我已经有了工作代码,但如果我使用更标准的代码,我会更高兴。 目前我有这样一个代码: 编辑:我想要的是一个COMPILE-TIME映射。你可以想象一个std::元组

  • 我能够使用Json输出运行Jersey,并且能够在没有任何问题的情况下使用Json映射获得“get”请求。 我也有一些JSON方法,它们是“post”方法,它们映射到Java类,如下面的方法- 供您参考,我在这里或这里遵循指南 在给出一个有效的post请求时,它们都开始抛出下面的错误-

  • 错误: 我希望在列表中映射相同的字段名,而不需要另一个单独的方法,就像在另一个项目中使用旧的版本时一样。

  • 例如,我有以下接口映射器: 在代码中,您可以看到映射和一些默认方法,其中包含其他映射。如何在Mapstruct映射中使用这些方法,以便Mapstruct使用这些方法在字段中填充值?