【问题标题】:Nest update index settings嵌套更新索引设置
【发布时间】:2018-10-05 19:32:30
【问题描述】:

我正在关注Creating an index Nest 的帖子并尝试更新我的索引设置。一切运行良好,但 html_strip 过滤器没有剥离 HTML。我的代码是

var node = new Uri(_url + ":" + _port);
var settings = new ConnectionSettings(node);
settings.SetDefaultIndex(index);
_client = new ElasticClient(settings);

//to apply filters during indexing use folding to remove diacritics and html strip to remove html
_client.UpdateSettings(
        f = > f.Analysis(descriptor = > descriptor
                .Analyzers(
                        bases = > bases
                        .Add("folded_word", new CustomAnalyzer
                        {
                        Filter = new List < string > { "icu_folding", "trim" },
                                Tokenizer = "standard"
                        }
                        )
                        )
                .CharFilters(
                        cf = > cf.Add("html_strip", new HtmlStripCharFilter())
                        )
                )
        );      

【问题讨论】:

    标签: elasticsearch nest


    【解决方案1】:

    您遇到了错误:

    无法更新非动态 设置[[index.analysis.analyzer.folded_word.filter.0, index.analysis.char_filter.html_strip.type, index.analysis.analyzer.folded_word.filter.1, index.analysis.analyzer.folded_word.type, index.analysis.analyzer.folded_word.tokenizer]] 用于打开 索引[[my_index]]

    在您尝试更新设置之前,请先关闭索引,然后更新设置并重新打开。 Have a look.

    client.CloseIndex(..);
    
    client.UpdateSettings(..);
    
    client.OpenIndex(..);
    

    更新

    为您的自定义分析器添加html_strip char 过滤器:

    .Analysis(descriptor => descriptor
                        .Analyzers(bases => bases.Add("folded_word",
                            new CustomAnalyzer
                            {
                                Filter = new List<string> { "icu_folding", "trim" }, 
                                Tokenizer = "standard", 
                                CharFilter = new List<string> { "html_strip" }
                            }))
                    )
    

    现在您可以运行测试来检查此分析器是否返回正确的令牌:

    client.Analyze(a => a.Index(indexName).Text("this <a> is a test <div>").Analyzer("folded_word"));
    

    输出:

    this
    is
    a
    test
    

    希望对你有帮助。

    【讨论】:

    • Rob,非常感谢你的建议奏效了我可以看到过滤器但是在索引 html 的过程中没有被剥离。
    • @Ismail 你可以分享索引映射吗?
    • { umbracotest: { settings: { index: { uuid: "eb3hMpFrS8qyb3DxHZ4_eg", analysis: { char_filter: { html_strip: { type: "html_strip" } } }, number_of_replicas: "1", number_of_shards: "5", version: { created: "1020099" } } } } }
    • Rob,非常感谢您使用 Analyze 进行的更新和测试。但是,当我索引 html 时仍然存在。在做索引时,你必须传入要使用的分析器吗?我假设它是从客户端初始化期间设置的内容推断出来的?
    • @Ismail 我想我现在了解您的担忧。您的带有 html 标签的内容已使用 folded_word 分析器编入索引,但您得到的是原始内容而不是索引标记。希望它足够清楚。 Here 你可以找到更多关于 elasticsearch 如何在后台工作的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多