elasticsearch 数组搜索,元素匹配,包含与,完全包含。

/**
 * 根据标签ID获取相关专辑
 *
 * @param array $tag_ids 标签ID, 支持多个
 * @param int   $offset  偏移量
 * @param int   $limit   每页数量
 *                       * @param array $sort 排序
 * @param array $filter_types 专辑类型
 * @param array $albumContentTypes 专辑内容类型
 *
 * @return array ['total' => 总数, 'data' => [专辑id 1, ...]]
 */
public static function searchAlbumByTagIds1(array $tag_ids, int $offset = 0, int $limit = 10, $sort = [], $filter_types = [], $albumContentTypes = []): array
{

    $query = [
        "query"   => [
            "bool" => [
                "must" => [
                    [
                        "term" => [
                            "status" => 1
                        ],
                    ],

// [
// “terms” => [ //包含一个就可以
// “tags” => t a g i d s / / ] , / / ] , ] ] ] , " s o r t " = > s e l f : : g e t S o r t ( tag_ids // ], // ], ] ] ], "sort" => self::getSort( tagids//],//],]]],"sort"=>self::getSort(sort),
“_source” => “_id”,
“from” => $offset,
“size” => $limit
];

    foreach ($tag_ids as $tag_id) {             //完全匹配
        $query['query']['bool']['must'][] = [
            "term" => [
                "tags" => [
                    "value" => $tag_id
                ]
            ]
        ];
    }

    if (!empty($albumContentTypes)) {
        $query['query']['bool']['must'][] = [
            'terms' => [
                'albumcontenttype' => $albumContentTypes
            ]
        ];
    }

    if (count($filter_types) > 0) {
        $query["query"]["bool"]["filter"] = [
            "bool" => [
                "must" => [
                    "terms" => [
                        "albumtype" => $filter_types
                    ]
                ]
            ]
        ];
    }

    $ret = self::query($query);

    return self::getFormatDataWithNoSource($ret);
}

数组里面的元素匹配
tags里面包含任意一个元素就可以进进行匹配了
// [
// “terms” => [ //包含一个就可以
// “tags” => $tag_ids
// ],

tags里面包含所有元素才可以进行匹配
foreach ($tag_ids as $tag_id) { //完全匹配
$query[‘query’][‘bool’][‘must’][] = [
“term” => [
“tags” => [
“value” => $tag_id
]
]
];
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值