需要关于Elasticsearch的帮助。我尝试获取第一个完全匹配结果,然后使用以下查询匹配一个字段的文档,但没有运气。基本上,试图首先获得最高分,然后不太准确,并且只匹配总搜索结果中的一个字段。如何获得弹性搜索以返回结果中的完全匹配和其他匹配
的映射如下:
{
"palsx1493": {
"mappings": {
"pals": {
"properties": {
"aboutme": {
"type": "string"
},
"dob": {
"type": "date",
"format": "date"
},
"fccode": {
"type": "string"
},
"fcname": {
"type": "string"
},
"learning": {
"type": "nested",
"properties": {
"skillslevel": {
"type": "string"
},
"skillsname": {
"type": "string"
}
}
},
"name": {
"type": "string"
},
"rating": {
"type": "string"
},
"teaching": {
"type": "nested",
"properties": {
"skillslevel": {
"type": "string"
},
"skillsname": {
"type": "string"
}
}
},
"trate": {
"type": "string"
},
"treg": {
"type": "string"
}
}
}
}
} }
搜索时,我需要的结果返回精确匹配的文档,然后在优先次序与教学skillname匹配分数较低。现在发生的事情是,我首先得到正确的匹配,然后我得到了匹配的learning.skillname,然后teach.skillname匹配。我希望这两个最后一个交换了具有完全匹配结果后的teaching.skillname。
完全匹配: 1. fcname(克罗姆是国名,可以是一个特定的名称,或只是设置为“任何国家” 2.出生日期:出生日期是一个范围值 - 一个范围值给出作为输入 3.教学:skillname 4.学习:skillname
这是我已经没有运气尝试:
{
"query": {
"bool": {
"should": [
{ "match": { "fcname": "spain"}},
{ "range": {
"bod": {
"from": "1950-10-10",
"to": "1967-12-12"
}
}
},
{
"nested": {
"path": "learning",
"score_mode": "max",
"query": {
"bool": {
"must": [
{ "match": { "learning.skillname": learningSkillName}}
]
}
}
}
},
{
"nested": {
"path": "teaching",
"query": {
"bool": {
"must": [
{ "match": { "teaching.skillname": teachingSkillName}}
]
}
}
}
}
]
}
}
}
感谢您的意见,但这不是真正的问题,因为我有一个词匹配技能名称。 – mrezzz