0

我正在为 dot.net 使用 elasticsearch 6 nest 我使用 _all 字段来搜索所有索引,但现在由于它已被弃用,我需要一个新的解决方案

我找到了足够好的 copy_to 选项。

我的问题是:出于我的项目原因,我曾经向 _all 字段定义它应该使用哪个分析器(ngram)以及它应该使用哪个搜索分析器(空白)。

现在,由于未在映射中声明 copy_to 字段,因此我无法定义它,因此将不胜感激。

var res = client1.CreateIndex(INDEX_NAME, desc => desc
            .InitializeUsing(indexState)
             .Settings(x => x
                .Analysis(g => g
                    .Tokenizers(t => t
                        .NGram("ngram_tokenizer", y => y
                        .MinGram(3)
                        .MaxGram(7)
                        .TokenChars(
                            TokenChar.Letter,
                            TokenChar.Digit,
                            TokenChar.Punctuation,
                            TokenChar.Symbol
                        )))
                    .Analyzers(o => o
                        .Custom("ngram_analyzer", w => w.Tokenizer("ngram_tokenizer").Filters("lowercase"))
                        .Whitespace("whitespace_analyzer")
                        .Standard("standard_analyzer", e => e.MaxTokenLength(1111)))))
            .Mappings(ms => ms
                .Map<SampleClass>(m => m
                    .AutoMap() //Still auto map exists if there are attributes on the class definition
                    .Properties(ps => ps //Override auto map
                        .Text(s => s
                            .Name(n => n.SampleString)
                            .CopyTo(am=>am.Field("searchallfield")))
                        .Number(s => s
                            .Name(n => n.SampleInteger))
                        .Date(s => s
                            .Name(n => n.SampleDateTime)
                            .Format("MM-DD-YY"))
            ))));
4

1 回答 1

1

显然您可以在映射中定义 copy_to 字段

                    .Map<SampleClass>(m => m
                    .AutoMap() //Still auto map exists if there are attributes on the class definition
                    .Properties(ps => ps //Override auto map
                        .Text(yy=>yy
                            .Name("searchallfield")
                            .SearchAnalyzer("whitespace_analyzer")
                            .Analyzer("ngram_analyzer"))
                        .Text(s => s
                            .Name(n => n.SampleString)
                            .CopyTo(am=>am.Field("searchallfield")))
                        .Number(s => s
                            .Name(n => n.SampleInteger))
                        .Date(s => s
                            .Name(n => n.SampleDateTime))
于 2018-02-11T15:46:39.330 回答