我已经下载了包含技能分类法的onet数据集,并将其上传到了Elasticsearch中。在技能分类中,有一些技能,例如c ++ 、. net,C#。我想给c#并且只获得c#的技能。通过检查一些链接,我已如下设置索引的映射和设置。
{ "onnet_taxonomy": { "mappings": { "text": { "properties": { "Occupation": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "Skill": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "Skill Type": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } }, "keywords": { "properties": { "Occupation": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "Skill": { "type": "text", "fields": { "analyzed": { "type": "text", "analyzer": "analyzer_keyword", "search_analyzer": "analyzer_shingle" }, "keyword": { "type": "keyword", "ignore_above": 256 } } }, "Skill Type": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } }, "settings": { "index": { "number_of_shards": "5", "provided_name": "onnet_taxonomy", "creation_date": "1583114276039", "analysis": { "filter": { "my_shingle_filter": { "max_shingle_size": "8", "min_shingle_size": "2", "output_unigrams": "true", "type": "shingle" } }, "analyzer": { "analyzer_keyword": { "filter": [ "lowercase" ], "char_filter": [ "code_mapping" ], "type": "custom", "tokenizer": "keyword" }, "analyzer_shingle": { "filter": [ "lowercase", "my_shingle_filter" ], "char_filter": [ "code_mapping" ], "tokenizer": "standard" } }, "char_filter": { "code_mapping": { "type": "mapping", "mappings": [ "++ => plusplus", "c# => csharp", "C# => csharp", "F# => fsharp", "f# => fsharp", ".net => dotnet", ".Net => dotnet", ".NET => dotnet", "( => map_lp", ") => map_rp", "& => and", "# => hash", "+ => plus" ] } } }, "number_of_replicas": "1", "uuid": "LNf2frW1S8WmHSOJWVrvLA", "version": { "created": "5030399" } } } } }
当我使用如下查询
{ "query": { "bool": { "must": [ { "match": { "Skill": "c++" } } ] } }, "size": 10
我正在获得所有具有“ c”的技能
当我使用以下查询时假设应用了分析器
{ "query": { "bool": { "must": [ { "match": { "Skill.analyzed": "c++" } } ] } }, "size": 10 }
我得到空输出。我是否正确包括了分析仪,或者我的查询错误?
我只是简化了你的问题,为简单起见,我们假设你只需要1场被称为title包含了像不同的语言c,c++,c# f#。
title
c
c++
c#
f#
该title字段的索引设置和映射。
{ "settings": { "index": { "analysis": { "analyzer": { "my_analyzer": { "filter": [ "lowercase" ], "char_filter": [ "code_mapping" ], "tokenizer": "standard" --> notice `standard` } }, "char_filter": { "code_mapping": { "type": "mapping", "mappings": [ "++ => plusplus", "c# => csharp", "C# => csharp", "F# => fsharp", "f# => fsharp", ".net => dotnet", ".Net => dotnet", ".NET => dotnet", "( => map_lp", ") => map_rp", "& => and", "# => hash", "+ => plus" ] } } } } }, "mappings": { "properties": { "title": { "type": "text", "analyzer": "my_analyzer" --> using custom analyzer created in settings } } } }
POST / _doc / {doc-is}
{ "title": "c#" } { "title": "c++" } { "title": "c" } { "title": "F#" }
搜索查询,这是为您提供的问题中提取包含的所有记录的问题c。
{ "query": { "bool": { "must": [ { "match": { "title": "c++" } } ] } }, "size": 10 }
现在对我而言,它仅检索仅包含c++我的搜索API结果中所示的文档。
"hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 0.9808292, "hits": [ { "_index": "cplus", "_type": "_doc", "_id": "1", "_score": 0.9808292, "_source": { "title": "c++" } } ] }