elasticsearch 使用不同的搜索词查询ES,结果包含最高优先级的第一个搜索词的内容

oyxsuwqo  于 2023-06-21  发布在  ElasticSearch
关注(0)|答案(1)|浏览(173)

我有一个现有的索引abc_index,其中包含titledescription字段。现在我已经将skill_ids添加到索引中。下面是索引中的几个文档
skill_idsMap为keyword
| 文档ID|标题|描述|技能ID|
| - -----|- -----|- -----|- -----|
| before_skill_doc_1|人工智能|AI的dec| []|
| before_skill_doc_2| AI的力量|人工智能的力量|[]|
| after_skill_doc_1|标题与技能001|技能描述001| ["12345"]|
| after_skill_doc_2|技能002|技能描述002| ["12345"]|
现在,我希望skill_id为“12345”的文档(即文档after_skill_doc_1和after_skill_doc_2)应该出现在顶部,然后在下面的标题和描述中有“人工智能”的文档。
下面是查询

{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must": [
            {
              "bool": {
                "should": [
                  {
                    "term": {
                      "skill_ids": {
                        "value": "12345",
                        "boost": 2.0
                      }
                    }
                  },
                  {
                    "multi_match": {
                      "query": "artificial intelligence",
                      "fields": [
                        "title^35",
                        "description^15"
                      ],
                      "type": "phrase"
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
  }
}
    • 实际结果**-标题或描述中包含“人工智能”的文档排名第一。
    • 预期结果**-匹配skill_ids的文档应被赋予最高优先级,然后显示标题或描述。
dluptydi

dluptydi1#

我做了这个查询,我把boost 100放在skill_ids中。

{
  "query": {
    "bool": {
      "minimum_should_match": 1, 
      "should": [
        {
          "term": {
            "skill_ids": {
              "value": "12345",
              "boost": 100
            }
          }
        },
        {
          "multi_match": {
            "query": "artificial intelligence",
            "fields": [
              "title^35",
              "description^15"
            ],
            "type": "phrase"
          }
        }
      ]
    }
  }
}

相关问题