0
我有许多领域的指标,一个场“ServiceCategories”有类似这样的数据:自定义“选项卡”标记者在ElasticSearch NEST 2.4
|管理案例|发育残疾
我需要通过分隔符“|”分解数据我试图用这个可以这样做:
var descriptor = new CreateIndexDescriptor(_DataSource.ToLower())
.Mappings(ms => ms
.Map<ProviderContent>(m => m
.AutoMap()
.Properties(p => p
.String(s => s
.Name(n => n.OrganizationName)
.Fields(f => f
.String(ss => ss.Name("raw").NotAnalyzed())))
.String(s => s
.Name(n => n.ServiceCategories)
.Analyzer("tab_delim_analyzer"))
.GeoPoint(g => g.Name(n => n.Location).LatLon(true)))))
.Settings(st => st
.Analysis(an => an
.Analyzers(anz => anz
.Custom("tab_delim_analyzer", td => td
.Filters("lowercase")
.Tokenizer("tab_delim_tokenizer")))
.Tokenizers(t => t
.Pattern("tab_delim_tokenizer", tdt => tdt
.Pattern("|")))));
_elasticClientWrapper.CreateIndex(descriptor);
我对ServiceCategories搜索代码(serviceCategories到ES)使用一个简单TermQuery设置为小写的值。
它没有得到使用这个搜索参数的结果(其他工作正常)。预期的结果是至少从上述一个术语得到完全匹配。
我试图得到它使用的是经典标记生成器以及工作:
var descriptor = new CreateIndexDescriptor(_DataSource.ToLower())
.Mappings(ms => ms
.Map<ProviderContent>(m => m
.AutoMap()
.Properties(p => p
.String(s => s
.Name(n => n.OrganizationName)
.Fields(f => f
.String(ss => ss.Name("raw").NotAnalyzed())))
.String(s => s
.Name(n => n.ServiceCategories)
.Analyzer("classic_tokenizer")
.SearchAnalyzer("standard"))
.GeoPoint(g => g.Name(n => n.Location).LatLon(true)))))
.Settings(s => s
.Analysis(an => an
.Analyzers(a => a.Custom("classic_tokenizer", ca => ca
.Tokenizer("classic")))));
这也不工作。任何人都可以帮助我确定我要出错的地方吗?
这里的搜索请求:
### ES REQEUST ###
{
"from": 0,
"size": 10,
"sort": [
{
"organizationName": {
"order": "asc"
}
}
],
"query": {
"bool": {
"must": [
{
"match_all": {}
},
{
"term": {
"serviceCategories": {
"value": "developmental disabilities"
}
}
}
]
}
}
}
完善和简单!我在这一段时间里一直在绞尽脑汁!谢谢。最后一个问题是......分析仪 - 这个回归的对象是什么,所以我知道如何在将来最好地处理它? – Michael
@Michael不确定你的意思 - “.Analyze()'方法调用返回的是什么?它返回一个'IAnalyzeResponse' –