当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch 7:未能分析映射[_doc]:根映射定义包含不支持的参数:

常博裕
2023-03-14

我的NEST代码用于Elasticsearch版本6,在Elastichsearch版本7中抛出以下错误:

无法分析映射[_doc]:根映射定义包含不支持的参数:

我见过这个问题,它解释了ES 7中不推荐的映射类型。。。我不确定这是否是我的问题?如何解决这个问题?

这是我生成索引的代码:

var createIndexResponse = ElasticClient.CreateIndex(IndexName, c => c
    .Settings(st => st
        .Analysis(an => an
            .Analyzers(anz => anz
                .Custom("result_suggester_analyzer", rsa => rsa
                    .Tokenizer("standard")
                    .CharFilters("html_strip", "mapped_words_char_filter")
                    .Filters(new string[] { "english_possessive_stemmer", "lowercase", "asciifolding", "stop_words", "english_stemmer", "edge_ngram_token_filter", "unique" })
                )
                .Custom("custom_english_analyzer", ce => ce
                    .Tokenizer("standard")
                    .CharFilters("html_strip", "mapped_words_char_filter")
                    .Filters(new string[] { "english_possessive_stemmer", "lowercase", "asciifolding", "stop_words", "english_stemmer", "unique" })
                )
            )
            .Normalizers(nor => nor
                .Custom("custom_ignore_case_normalizer", icn => icn
                    .CharFilters("mapped_words_char_filter")
                    .Filters(new string[] { "lowercase", "asciifolding" })
                )
            )
            .CharFilters(cf => cf
                .Mapping("mapped_words_char_filter", md => md
                    .Mappings(
                        "C# => csharp"
                    )
                )
            )
            .TokenFilters(tfd => tfd
                .EdgeNGram("edge_ngram_token_filter", engd => engd
                    .MinGram(2)
                    .MaxGram(10)
                )
                .Stop("stop_words", sfd => sfd.StopWords(_stopWords))
                .Stemmer("english_stemmer", esd => esd.Language("english"))
                .Stemmer("english_possessive_stemmer", epsd => epsd.Language("possessive_english"))
            )
        )
    )
    .Mappings(m => m.Map<AdDocument>(d => d.AutoMap()))); 

这是我的文档

[ElasticsearchType(Name = "ad")]
public class AdDocument
{
    public long Id { get; set; }

    [Text(Analyzer = "custom_english_analyzer", SearchAnalyzer = "custom_english_analyzer")]
    public string FirstName { get; set; }

    // searchable properties from AdBase
    public bool IsActive { get; set; }

    [Text(Analyzer = "custom_english_analyzer", SearchAnalyzer = "custom_english_analyzer")]
    public string Title { get; set; }

    public short AdDurationInDays { get; set; }

    public DateTime AdStartTime { get; set; }

    [Keyword(Index = false)]   // Keyword => not analyzed
    public string MainPhotoUrl { get; set; }

    [Text(Analyzer = "custom_english_analyzer", SearchAnalyzer = "custom_english_analyzer")]
    public string StoreName { get; set; }

    // searchable properties from Address
    public GeoLocation GeoLocation { get; set; }

    [Keyword(Normalizer = "custom_ignore_case_normalizer")]   // keywords => not analyzed, use ignore case normalizer otherwise search would be case sensitive
    public string Suburb { get; set; }

    // Price is used when something is being sold, in case of real estate rental it indicates the rent value, in case of Jobs it is not used (we use salary) and services have not price
    public decimal? Price { get; set; }

    public DateTime? AvailableFrom { get; set; }

    public bool? IsFurnished { get; set; }

    public long? LandArea { get; set; }

    public short? JobTypeId { get; set; }
}

以下是Elasticsearch的响应(错误):

Failed to parse mapping [_doc]: Root mapping definition has unsupported parameters:

[ad : {
    properties= {
        landArea={
            type=long
        }, 
        isFurnished={
            type=boolean
        }, isActive={
            type=boolean
        }, title={
            search_analyzer=custom_english_analyzer, 
            analyzer=custom_english_analyzer, 
            type=text
        }, 
        availableFrom={
            type=date
        }, 
        mainPhotoUrl={
            index=false, 
            type=keyword
        }, 
        price={
            type=double
        }, 
        storeName={
            search_analyzer=custom_english_analyzer, 
            analyzer=custom_english_analyzer, 
            type=text
        }, 
        id={
            type=long
        }, 
        firstName={
            search_analyzer=custom_english_analyzer, 
            analyzer=custom_english_analyzer, 
            type=text
        }, 
        geoLocation={
            type=geo_point
        }
    }
}]

共有1个答案

濮阳君浩
2023-03-14

您以前使用Elasticsearch版本6,现在使用版本7。

我认为你的云弹性搜索客户端版本仍然是版本6。这导致了您的错误。在Elasticsearch 7中,映射类型已被删除。https://www.elastic.co/guide/en/elasticsearch/reference/6.5/removal-of-types.html

将你的云也升级到7版。

 类似资料:
  • 我是Elasticsearch的新手。我尝试了堆栈溢出和其他网站上提供的不同解决方案,但它们对我不起作用,这就是为什么我发布这个问题。 我正在尝试添加标记器“:“uax\u url\u email”,以便我可以轻松地使用查询搜索电子邮件。 但是,当我设置映射时,弹性搜索给了我以下错误: 根映射定义有不受支持的参数(mapper_parsing_exception) 我试图删除索引并重新创建它,但也

  • 问题内容: 大家好,我正在尝试创建架构测试。 我收到以下错误 请帮助我解决此错误 问题答案: 您快到这里了,只是缺少了一些东西: 更新 如果您的索引已经存在,您还可以像这样修改映射: 更新 : 从ES 7开始,已删除映射类型。您可以在这里阅读更多详细信息

  • 在我的搜索引擎中,用户可以选择搜索大小写敏感或不敏感。如果他们选择这样做,查询将搜索使用自定义区分大小写分析器的字段。这是我的设置: 获取/candidates/_settings 因此,我从这个答案中创建了一个名为的自定义分析器。我试图定义我的,如下所示: 把/candidates/_mapping/candidate 因此,在查询区分大小写的匹配时,我可以执行以下操作: 我甚至没有进入最后一步

  • 前端将这个json发送到我的API 控制器:

  • 我一直试图通过一个名为Guardian的中间类映射两个用户之间的一些“OneToOne”关系。当我试图检索一个用户(和他的监护人)时,从Glassfish(Open edition V4.0)返回一个内部服务器错误。但是,日志中没有显示任何类型的堆栈跟踪或任何错误。我怀疑问题是我在JPA类中的映射。 启动服务器时,我得到两个与Guardian类有关的警告,但我并不真正理解: 警告:映射到元素[me