我试图获取查询中给出的具有任何术语的所有文档,并将那些在该字段中具有大多数术语的文档排在较高的位置,但是我要搜索的字段是嵌套的。因此,当我尝试multi_match查询时,该字段中的匹配项不超过1个。它会找到第一个匹配项,并考虑该匹配项的得分,但不匹配其余术语以增加该文档的得分。
这是我要搜索的字段的映射:
{
"skills": {
"type": "nested",
"properties": {
"name": {
"type": "text",
"analyzer": "standard_analyzer",
"search_analyzer": "search_analyzer",
},
"rating": {
"type":"byte"
},
"description": {
"type": "text",
"analyzer": "standard_analyzer",
"search_analyzer": "search_analyzer"
}
}
}
}
样本数据:
doc1: {
skills: [
{
name: "HTML",
rating: 4,
description: "Whatever..."
}
]
}
doc2: {
skills: [
{
name: "Javascript",
rating: 5,
description: "Whatever..."
}
]
}
doc3: {
skills: [
{
name: "HTML",
rating: 5,
description: "Whatever..."
},
{
name: "Javascript",
rating: 4,
description: "Whatever..."
},
]
}
搜索查询:
GET my-index/_search
{
"query": {
"nested": {
"path": "skills",
"score_mode": "sum",
"query": {
"multi_match": {
"query": "HTML Javascript",
"fields": [
"skills.name"
],
"operator": "or",
"type": "most_fields"
}
}
}
},
"explain": true
}
例如当我查询“ HTML Javascript”时,由于某种原因,它会将具有最后一项(“ Javascript”)的文档排名更高,甚至找不到“ HTML”。我可以确认该拆分是根据空格正确完成的,当这些术语出现在同一字段中并且没有无关紧要的嵌套文档时,它将对文档进行正确排名。 在这种情况下,我想对具有“ HTML”和“ Javascript”的文档进行更高的排名,doc3应该比doc1和doc2更高。