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' –