我正在研究AWS Elastic Search。我在项目中遇到一种情况,在该情况下,我必须在报告中搜索“冠状病毒”之类的关键字。
但是结果应包含“Corona virus”和“corona”以及“virus”和“coronavirus”之类的关键字。
请指导我如何构建查询DSL。
注意:使用PHP语言。
感谢您的帮助。
//发出
最佳答案
您需要使用shingle token filter
制图
PUT index91
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"shingle_filter"
]
}
},
"filter": {
"shingle_filter": {
"type": "shingle",
"min_shingle_size": 2,
"max_shingle_size": 3,
"output_unigrams": true,
"token_separator": ""
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
数据:
POST index91/_doc
{
"title":"corona virus"
}
查询:
GET index91/_search
{
"query": {
"match": {
"title": "coronavirus"
}
}
}
结果:
"hits" : [
{
"_index" : "index91",
"_type" : "_doc",
"_id" : "gNmUZHEBrJsHVOidaoU_",
"_score" : 0.9438393,
"_source" : {
"title" : "corona virus"
}
}
它还适用于“电晕”,“电晕病毒”,“病毒”