ES(elasticsearch)搜索标题精准匹配度调节

/**
 * 搜索专辑
 * @param string $keywords     搜索词
 * @param int    $offset       偏移量
 * @param int    $limit        每页数量
 * @param array  $sort         排序条件, 默认按相关性排序, 支持多组(见self::$sort_*)
 * @param int    $content_type 专辑类型 -1:所有 0:音频 1:视频
 * @param array  $showTypes
 * @return array ['total' => 总数, 'data' => [故事ID, ...]]
 */
public static function searchAlbumByTitle($keywords, $offset = 0, $limit = 10, $sort = [], $content_type = -1, $showTypes = [ShowType::SHOW_TYPE_NORMAL])
{
    $query = [
        "query" => [
            "bool" => [
                "must" => [
                    [
                        "match" => [
                            'title' => [
                                "query" => $keywords,
                                "operator"=>"or",
                                "minimum_should_match"=>"75%",
                            ]
                        ]
                    ],
                    [
                        "term" => [
                            'status' => 1,
                        ]
                    ],
                ]
            ]
        ],
        "sort" => [],
        "_source" => "_id",
        "from" => $offset,
        "size" => $limit
    ];
    if ($content_type >= 0) {
        $query['query']['bool']['must'][] = [
            "term" => [
                'albumcontenttype' => $content_type,
            ]
        ];
    }
    if (count($showTypes) > 0) {
        $query['query']['bool']['must'][] = [
            "terms" => [
                'showtype' => $showTypes
            ]
        ];
    }

    $query["sort"] = self::getSort($sort);
    $ret = self::query($query);

    $ids = [];
    $total = empty($ret['hits']['total']) ? 0 : $ret['hits']['total'];
    if ($ret !== false) {
        foreach ($ret['hits']['hits'] as $v) {
            $ids[$v['_id']] = $v['_id'];
        }
    }

    return ['total' => $total, 'data' => $ids];
}

最主要的是这段代码
“query” => $keywords,
“operator”=>“or”,
“minimum_should_match”=>“75%”,

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值