对具有模糊匹配的多个字段进行弹性搜索,并对多个字段的综合得分进行排序

问题描述 投票:1回答:1

我正在Laravel中使用Elastic Search,我的索引有3个字段text,mood,haloha_id。首先,如果要匹配,我想匹配"haloha_id"(将haloha_id视为帖子,将文本视为该帖子的注释),然后进行进一步匹配。假设现在已匹配"haloha_id",我想匹配“文本”字段中的子字符串,然后匹配“心情”(0、1,2等整数,则为整数)“仅当匹配某些“文本”时才应匹配心情我正在执行“像我的”查询,这意味着仅显示与特定帖子的用户评论匹配的评论。我的查询中的问题是

  • 我自己的评论未显示在顶部,因此匹配率100%

  • 如果某人的“心情”和“评论”匹配了我的100%,那么它就不会出现在顶部。

    我删除了与“情绪”相关的查询,但分数没有影响,这意味着分数不包括情绪匹配分数。

这是我的查询。

 "query"=>[      

    "bool"=>[                                
        "should"=>[
            "match"=>[
                "text"=>[
                    "query"=>$userHaloha->filtered_text,
                    "fuzziness"=>"AUTO",                
                ]
            ]                           
        ],
        "minimum_should_match"=>1,
        "must"=>[
            "match"=>[
                "mood"=>$userHaloha->mood,            
            ],
            "match"=>[
                "haloha_id"=>$userHaloha->haloha_id
            ]
        ] 
php laravel elasticsearch lumen fuzzy-search
1个回答
0
投票

查询不言自明。我已将haloha_id添加到必须阻止文件必须匹配“ haloha_id”,应阻止包含“文本”和心情。

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "haloha_id": $userHaloha->haloha_id
          }
        }
      ],
      "should": [
        {
          "match": {
            "text": {
              "query": $userHaloha->filtered_text,
              "fuzziness": "auto"
            }
          }
        },
        {
          "bool": {
            "must": [
              {
                "match": {
                  "text": $userHaloha->filtered_text
                }
              },
              {
                "term": {
                  "mood": {
                    "value": $userHaloha->mood
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.