如何解决Elasticsearch NEST-以连字符开头,中间和结尾搜索短语
例如,我有一段文字: Lorem ipsum-dolor atmet,consecteturum adipiscing umelit。
我希望将 ipsum-dolor 视为一个字。 当我写'um'时,我希望Elasticsearch返回带有以下内容的文本: ips 嗯-美元, consectetur um , 嗯成功。
同样,如果我键入“是” ,则应返回带有“ s 它是等”的文本。
如何编写自己的分析器以满足这些条件。如何搜索这些短语?
我的自定义分析器:
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))
)
)
)
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。