搜索多个嵌套文档中存在的多个术语| Elasticsearch

时间:2020-01-09 12:34:50

标签: elasticsearch search nested mapping ranking

我试图获取查询中给出的具有任何术语的所有文档,并将那些在该字段中具有大多数术语的文档排在较高的位置,但是我要搜索的字段是嵌套的。因此,当我尝试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更高。

0 个答案:

没有答案