MySQL全文搜索未按预期返回

时间:2018-06-08 14:58:41

标签: mysql mysqli full-text-search mysql-workbench where-clause

我在寻找桌面搜索解决方案方面遇到了很大麻烦。

表:

ID | NAME | DESCRIPTION | APPLICATION | BRAND | SUPPLIER_PRODUCT_ID | SUPPLIER_ID

定义:

int,text,text,text,text,varchar(55),int

此表填写了从不同供应商收集的产品数据'数据库。

我需要通过不同的词语创建搜索:

 'BUJE BARRA CHEVROLET CORSA' (1 & 2 NAME OR DESCRIPTION, 3 & 4 APPLICATION)

 'PASTILLA FRENO CORSA FRASLE' (1 & 2 NAME OR DESCRIPTION, 3 APPLICATION, 4 BRAND)

 'FR44451MX' (= SUPPLIER_PRODUCT_ID)

'PARRILLA CORSA' (1 NAME OR DESCRIPTION, 2 APPLICATION)

我已创建了一个存储过程来分隔每个单词然后返回临时表但我找不到正确的解决方案。我认为问题出在数据上,但我不能改变它。 例如,来自不同供应商的相同产品具有不同的名称或描述:

    'AMORTIGUADOR DELANTERO' NAME
    'DELANTERO DERECHO' DESCRIPTION
    'CHEVROLET CORSA' BRAND
    'FR44451MX' SUPPLIER_PRODUCT_ID
    '1' SUPPLIER_ID

和其他供应商:

    'AMORTIGUADOR' NAME
    'DELANTERO CHEVROLET CORSA' DESCRIPTION
    'NULL' BRAND
    'FR-44451' SUPPLIER_PRODUCT_ID
    '2' SUPPLIER_ID

我需要搜索返回与搜索词匹配的每个供应商的每件商品。

更新1

我创建了一个我在这里找到的功能来分割字符串:

DELIMITER $

CREATE FUNCTION 
   FN_SPLIT_STRING ( pSTRING TEXT , pDELIMITER CHAR(1) , pPOSITION INT)
   RETURNS TEXT
   DETERMINISTIC -- always returns same results for same input parameters
    BEGIN

        DECLARE N INT ;

        -- get max number of items
        SET N = LENGTH(pSTRING) - LENGTH(REPLACE(pSTRING, pDELIMITER, '')) + 1;

        IF pPOSITION > N THEN
            RETURN NULL ;
        ELSE
            RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(pSTRING, pDELIMITER, pPOSITION) , pDELIMITER , -1 ) ;        
        END IF;
    END$

DELIMITER ;

在我的WHERE子句中,我使用以下内容:

WHERE P.NAME LIKE CONCAT(FN_SPLIT_STRING(pFILTER, '|', 1),' %', FN_SPLIT_STRING(pFILTER, '|', 2), '%') 
    AND (P.APPLICATION LIKE CONCAT('%', FN_SPLIT_STRING(pFILTER, '|', 3), '%') OR (P.NAME LIKE CONCAT('%', FN_SPLIT_STRING(pFILTER, '|', 3), '%'))) 
    AND P.BRAND LIKE CONCAT('%', FN_SPLIT_STRING(pFILTER, '|', 4), '%')
    AND S.BUSINESS_NAME LIKE 
        CASE 
            WHEN FN_SPLIT_STRING(pFILTER, '|', 5) != '' 
            THEN  CONCAT(FN_SPLIT_STRING(pFILTER, '|', 5),'%')
            ELSE '%%'
        END

结果很完美,但表现并不好。 我可以对FULL-TEXT索引做同样的事吗?

任何帮助都会非常感激。

0 个答案:

没有答案