elasticsearch 使用自定义ElasticSearch分析器,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 使用自定义ElasticSearch分析器,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 使用自定义ElasticSearch分析器

elasticsearch 使用自定义ElasticSearch分析器,elasticsearch,nest,elasticsearch,Nest,我有一个关于弹性搜索分析器的问题。 我创建了一个自定义分析器,如下所示: Analyzers(o => o.Custom("custom", m => m.CharFilters("icu_normalizer").Filters("lowercase", "asciifolding").Tokenizer("icu_tokenizer") _search?q=sodertorg&analyzer=custom 并尝试分析

我有一个关于弹性搜索分析器的问题。 我创建了一个自定义分析器,如下所示:

Analyzers(o => o.Custom("custom", 
                        m => m.CharFilters("icu_normalizer").Filters("lowercase", "asciifolding").Tokenizer("icu_tokenizer")
_search?q=sodertorg&analyzer=custom
并尝试分析仪,结果显示以下标记(良好):

我没有得到任何结果(糟糕)

我错过什么了吗?
谢谢。

在执行
查询字符串时,您将以
\u all
字段为目标。查询字符串中指定的
分析器
仅适用于如何分析查询;对内容进行索引时,
\u all
字段仍将使用
标准
分析器

要修复此问题,您需要确保自定义的
分析器
已应用于映射中的
\u all
字段,例如

var createIndexResponse = client.CreateIndex("my-index", c => c
    .Settings(s => s
        .Analysis(a => a
            .Analyzers(o => o
                .Custom("custom", m => m
                    .CharFilters("icu_normalizer")
                    .Filters("lowercase", "asciifolding")
                    .Tokenizer("icu_tokenizer")
                )
            )
        )
    )
    .Mappings(m => m
        .Map<Project>(mm => mm
            // apply to _all field
            .AllField(s => s
                .Analyzer("custom")
            )
            .AutoMap()
        )
    )
);
var createIndexResponse=client.CreateIndex(“我的索引”,c=>c
.Settings(s=>s
.分析(a=>a
.分析仪(o=>o
.Custom(“Custom”,m=>m
.CharFilters(“icu正常化器”)
.过滤器(“小写”、“ascifolding”)
.Tokenizer(“icu_Tokenizer”)
)
)
)
)
.Mappings(m=>m
.Map(mm=>mm
//适用于所有字段
.AllField(s=>s
.Analyzer(“自定义”)
)
.AutoMap()
)
)
);

在映射中以这种方式应用分析器时,您应该会得到预期的结果;您不再需要在查询中指定分析器,因为映射中的分析器将用于索引时间和查询时间分析。

如果使用存储数据的确切字段,即
\u search?q=field:sodertorg&analyzer=custom
,会发生什么情况。当我搜索“södertorg”(或“U search?q=name1:södertorg”)时,标准分析器将立即找到结果,但我的自定义分析器不工作,尽管它可用于其他搜索(例如,电子邮件字段中的“jarn”),自定义分析器存储在哪里?
{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 0,
        "max_score": null,
        "hits": []
    }
}
var createIndexResponse = client.CreateIndex("my-index", c => c
    .Settings(s => s
        .Analysis(a => a
            .Analyzers(o => o
                .Custom("custom", m => m
                    .CharFilters("icu_normalizer")
                    .Filters("lowercase", "asciifolding")
                    .Tokenizer("icu_tokenizer")
                )
            )
        )
    )
    .Mappings(m => m
        .Map<Project>(mm => mm
            // apply to _all field
            .AllField(s => s
                .Analyzer("custom")
            )
            .AutoMap()
        )
    )
);