代码之家  ›  专栏  ›  技术社区  ›  Chris Muench

mysql全文搜索布尔模式按关联顺序而不是我正在查找的顺序(短语匹配)

  •  0
  • Chris Muench  · 技术社区  · 6 年前

    我有下面的问题和相关排名似乎关闭。

    它排名

    iPhone 5C Used Verizon 8GB 58165 White 
    

    高于

    iPhone 8 Front Camera Flex
    

    它似乎在做的是在搜索阶段对单词计数的次数进行排序。如果单词相邻,我想给出更高的相关性(如上图所示)

    SELECT phppos_items.name, MATCH (phppos_items.name) AGAINST ('iphone 8*' IN BOOLEAN MODE) as rel 
    FROM phppos_items
    WHERE MATCH (phppos_items.name) AGAINST ('iphone 8*' IN BOOLEAN MODE)
    ORDER BY `rel` DESC;
    

    结果(太大,无法粘贴)

    https://gist.github.com/blasto333/d8f8fe470cc1cfb1f959922ea77f8134

    0 回复  |  直到 6 年前
        1
  •  1
  •   Jannes Botis    6 年前

    让我们先分析一下您使用的条件,并按下列条件排序:

    MATCH (phppos_items.name) AGAINST ('iphone 8*' IN BOOLEAN MODE)
    

    根据 Mysql Boolean Full-Text Searches ,您正在匹配任何包含 任何 其中:

    • 苹果手机

    意思是任何有 苹果手机 是匹配的。

    你想要的是匹配” iPhone 8 作为优先于“iphone”或“8*”的字符串。

    要做到这一点:

    • 添加“iphone 8*”作为字符串以匹配
    • 使用 >&; 算子
    • 给它一个 优先 在“iphone”和“8*

    将SQL查询更改为:

    AGAINST ('>"iphone 8*" >iphone <8*' IN BOOLEAN MODE)
    

    在select语句中

    它所赋予的意义 优先选择精确的iPhone 8*和iPhone 结束 8** .