例如,我有一段文字: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))
)
)
)
)
暂无答案!
目前还没有任何答案,快来回答吧!