elasticsearch嵌套-从开始、中间和结尾用连字符搜索短语

bn31dyow  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(0)|浏览(278)

例如,我有一段文字:lorem ipsum dolor sit amet,Conceteturum adipiscing umelit。
我希望伊普森多洛被当作一个词来对待。当我写“um”时,我希望elasticsearch返回文本:ipsum dolor,consecteturum,umelit。
同样,如果我键入'it am',它应该返回带有“sit amet”的文本。
如何编写自己的分析器来满足这些条件。如何搜索这些短语?
我的自定义分析器:

await _nestClient.IndicesCreateAsync(_settings.IndexName,
                index => index
                    .Settings(s => s
                        .Analysis(a => a
                            .Tokenizers(mt => mt
                                .EdgeNGram("custom_tokenizer", eng => eng
                                    .MinGram(3)
                                    .MaxGram(30)
                                    .TokenChars(
                                        TokenChar.Letter,
                                        TokenChar.Digit,
                                        TokenChar.Custom)
                                    .CustomTokenChars("-/")
                                )
                            )
                            .Analyzers(an => an
                                .Custom("custom_analyzer", cu => cu
                                    .CharFilters("html_strip")
                                    .Tokenizer("custom_tokenizer")
                                    .Filters("lowercase")
                                )
                                .Custom("search_analyzer", se => se
                                    .Tokenizer("lowercase"))
                            )
                        )
                    )
                    .Map<Product>(x => x.AutoMap()
                        .Properties(p => p
                            .Text(t => t
                                .Name(n => n.Attributes.First().Value)
                                .Analyzer("custom_analyzer")
                                .SearchAnalyzer("search_analyzer")
                            )
                        )
                    )
                );

ElasticSearch中的结构

{
   "Id": "Guid",
   "Attributes": [
   {
     "Code": "description"
     "Value": "Lorem ipsum-dolor sit amet, consecteturum adipiscing umelit."
   }
   ],
   ...
}

我的嵌套搜索:

.Path(pa => pa.Attributes)
            .Query(qu => qu                    
                .Bool(bo => bo
                    .Must(mu => mu
                        .Terms(er => er
                            .Field(ld => ld.Attributes.First().Code)
                            .Terms("description")
                        ), mu => mu
                        .Match(hh => hh
                            .Field(ii => ii.Attributes.First().Value)
                            .Query("um")
                            .Operator(Operator.Or)
                            .Fuzziness(Fuzziness.EditDistance(1))
                        )
                    )
                )
            )

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题