zoukankan      html  css  js  c++  java
  • 【转】 Mysql全文搜索match...against的用法

    原文链接 http://blog.csdn.net/manbujingxin/article/details/6656992

    前提:mysql只支持英文内容的全文索引,所以只考虑英文的全文搜索。

    假定数据表名为post,有三列:id、title、content。id是自增长序号,

    title是varchar,content是text,给content添加全文索引。
    mysql全文搜索有三种模式:
    一、自然语言查找。这是mysql默认的全文搜索方式,sql示例:

    1 select  id,title FROM post WHERE MATCH(content) AGAINST ('search keyword')


    或者显式声明使用自然语言搜索方式

    1 select  id,title FROM post WHERE MATCH(content) AGAINST ('search keyword' IN NATURAL LANGUAGE MODE)


    由于自然语言搜索方式是默认模式,所以可以省略声明模式的“IN NATURAL LANGUAGE MODE”部分。
    自然语言搜索模式的么特点:

    • 忽略停词(stopword),英语中频繁出现的and/or/to等词被认为是没有实际搜索的意义,搜索这些不会获得任何结果。
    • 如果某个词在数据集中频繁出现的几率超过了50%,也会被认为是停词,所以如果数据库中只有一行数据,不管你怎么全文搜索都不能获得结果。
    • 搜索结果都具有一个相关度的数据,返回结果自动按相关度由高到低排列
    • 只针对独立的单词进行检索,而不考虑单词的局部匹配,如搜索box时,就不会将boxing作为检索目标。


    二、布尔查找。这种查找方式的特点是没有自然查找模式中的50%规则,即便有词语在数据集中频繁出现的几率超过50%,

    也会被作为搜索目标进行检索并返回结果,而且检索时单词的局部匹配也会被作为目标进行检索。sql示例

    1 select  id,title FROM post WHERE MATCH(content) AGAINST ('search keyword' IN BOOLEAN MODE)


    三、带子查询扩展的自然语言查找。

    1 select  id,title FROM post WHERE MATCH(content) AGAINST ('search keyword' IN BOOLEAN MODE WITH EXPANSION)


    暂时没有明白这种模式。
    在我的实际使用中还发现了以下细节:

      • 布尔查找时必须指定返回结果的排序方式,它不会像自然语言查找那样会自动将结果按相关度排序返回。
      • 即使是布尔查找,对长度小于等于3的单词也不会进行检索,因为mysql有一个系统变量FT_MIN_WORD_LE
        指定了全文检索时可接受的最小单词长度,默认值是4。.
  • 相关阅读:
    PHP开发用工具
    AS3与js的几种简单通讯方式
    圣斗士,饶了我吧。
    有关访问域的深入探讨
    Flex实现将Wrod文档和Excel文档转xml,以及读取csv
    [转]帝国cms目录结构与模板结构以及标签变量介绍
    flash的小技巧,查看操作代码
    在javascript中在function处提示missing(before function parameters错误
    窗口中的对象和元素(BOM)
    IE9下通过windows.status修改浏览器的状态栏,修改不能成功
  • 原文地址:https://www.cnblogs.com/ihongyan/p/4712259.html
Copyright © 2011-2022 走看看