You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
4.8 KiB
XML
81 lines
4.8 KiB
XML
<?xml version="1.0" encoding="UTF-8" ?>
|
|
<!DOCTYPE mapper
|
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
<mapper namespace="com.ruoyi.portal.mapper.HwSearchMapper">
|
|
|
|
<resultMap id="SearchRawRecordResult" type="com.ruoyi.portal.domain.dto.SearchRawRecord">
|
|
<result property="sourceType" column="source_type"/>
|
|
<result property="bizId" column="biz_id"/>
|
|
<result property="title" column="title"/>
|
|
<result property="content" column="content"/>
|
|
<result property="webCode" column="web_code"/>
|
|
<result property="typeId" column="type_id"/>
|
|
<result property="deviceId" column="device_id"/>
|
|
<result property="menuId" column="menu_id"/>
|
|
<result property="documentId" column="document_id"/>
|
|
<result property="score" column="score"/>
|
|
<result property="updatedAt" column="updated_at"/>
|
|
</resultMap>
|
|
|
|
<select id="searchByKeyword" resultMap="SearchRawRecordResult">
|
|
<!-- 统一 UNION 各分支的字符集和排序规则,避免历史表结构 collation 不一致时搜索兜底 SQL 直接失败 -->
|
|
SELECT *
|
|
FROM (
|
|
SELECT CONVERT('web' USING utf8mb4) COLLATE utf8mb4_general_ci AS source_type,
|
|
CONVERT(CAST(w.web_id AS CHAR) USING utf8mb4) COLLATE utf8mb4_general_ci AS biz_id,
|
|
CONVERT(CONCAT('页面#', w.web_code) USING utf8mb4) COLLATE utf8mb4_general_ci AS title,
|
|
CONVERT(IFNULL(w.web_json_string, '') USING utf8mb4) COLLATE utf8mb4_general_ci AS content,
|
|
CONVERT(CAST(w.web_code AS CHAR) USING utf8mb4) COLLATE utf8mb4_general_ci AS web_code,
|
|
CAST(NULL AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_general_ci AS type_id,
|
|
CAST(NULL AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_general_ci AS device_id,
|
|
CAST(NULL AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_general_ci AS menu_id,
|
|
CAST(NULL AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_general_ci AS document_id,
|
|
80 AS score,
|
|
w.update_time AS updated_at
|
|
FROM hw_web w
|
|
WHERE w.is_delete = '0'
|
|
AND w.web_json_string LIKE CONCAT('%', #{keyword}, '%')
|
|
|
|
UNION ALL
|
|
|
|
SELECT CONVERT('web1' USING utf8mb4) COLLATE utf8mb4_general_ci AS source_type,
|
|
CONVERT(CAST(w1.web_id AS CHAR) USING utf8mb4) COLLATE utf8mb4_general_ci AS biz_id,
|
|
CONVERT(CONCAT('详情#', w1.web_code, '-', w1.typeId, '-', w1.device_id) USING utf8mb4) COLLATE utf8mb4_general_ci AS title,
|
|
CONVERT(IFNULL(w1.web_json_string, '') USING utf8mb4) COLLATE utf8mb4_general_ci AS content,
|
|
CONVERT(CAST(w1.web_code AS CHAR) USING utf8mb4) COLLATE utf8mb4_general_ci AS web_code,
|
|
CONVERT(CAST(w1.typeId AS CHAR) USING utf8mb4) COLLATE utf8mb4_general_ci AS type_id,
|
|
CONVERT(CAST(w1.device_id AS CHAR) USING utf8mb4) COLLATE utf8mb4_general_ci AS device_id,
|
|
CAST(NULL AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_general_ci AS menu_id,
|
|
CAST(NULL AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_general_ci AS document_id,
|
|
90 AS score,
|
|
w1.update_time AS updated_at
|
|
FROM hw_web1 w1
|
|
WHERE w1.is_delete = '0'
|
|
AND w1.web_json_string LIKE CONCAT('%', #{keyword}, '%')
|
|
|
|
UNION ALL
|
|
|
|
SELECT CONVERT('document' USING utf8mb4) COLLATE utf8mb4_general_ci AS source_type,
|
|
CONVERT(IFNULL(d.document_id, '') USING utf8mb4) COLLATE utf8mb4_general_ci AS biz_id,
|
|
CONVERT(IFNULL(NULLIF(d.json, ''), d.document_id) USING utf8mb4) COLLATE utf8mb4_general_ci AS title,
|
|
CONVERT(IFNULL(d.json, '') USING utf8mb4) COLLATE utf8mb4_general_ci AS content,
|
|
CONVERT(IFNULL(d.web_code, '') USING utf8mb4) COLLATE utf8mb4_general_ci AS web_code,
|
|
CONVERT(IFNULL(d.type, '') USING utf8mb4) COLLATE utf8mb4_general_ci AS type_id,
|
|
CAST(NULL AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_general_ci AS device_id,
|
|
CAST(NULL AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_general_ci AS menu_id,
|
|
CONVERT(IFNULL(d.document_id, '') USING utf8mb4) COLLATE utf8mb4_general_ci AS document_id,
|
|
70 AS score,
|
|
d.update_time AS updated_at
|
|
FROM hw_web_document d
|
|
WHERE d.is_delete = '0'
|
|
AND (
|
|
d.json LIKE CONCAT('%', #{keyword}, '%')
|
|
OR d.document_id LIKE CONCAT('%', #{keyword}, '%')
|
|
)
|
|
) s
|
|
ORDER BY s.score DESC, s.updated_at DESC
|
|
LIMIT 500
|
|
</select>
|
|
</mapper>
|