zoukankan      html  css  js  c++  java
  • 全文索引——CONTAINS 语法

    Like直接在数据据中查找可以查到所有所需记录但是会扫描整个表会影响性能CONTAINS是基于全文索引进行查询,查询结果受系统全文索引分词的方法影响查询结果会不全。
    Select * FROM A Where CONTAINS(B,'"IT"Or"理论"')5257条记录
    Select * FROM A Where B Like'%IT%' or B LIKE '%理论%' 5468条记录
    结论:需要精确查询用Like如产品搜索,内容搜索可以用CONTAINS提高效率。


    我们通常在 WHERE 子句中使用 CONTAINS ,就象这样:SELECT * FROM table_name WHERE CONTAINS(fullText_column,'search contents')。

    我们通过例子来学习,假设有表 students,其中的 address 是全文本检索的列。
    1. 查询住址在北京的学生
    SELECT student_id,student_name
    FROM students
    WHERE CONTAINS( address, 'beijing' )
    remark: beijing是一个单词,要用单引号括起来。

    2. 查询住址在河北省的学生
    SELECT student_id,student_name
    FROM students
    WHERE CONTAINS( address, '"HEIBEI province"' )
    remark: HEBEI province是一个词组,在单引号里还要用双引号括起来。

    3. 查询住址在河北省或北京的学生
    SELECT student_id,student_name
    FROM students
    WHERE CONTAINS( address, '"HEIBEI province" OR beijing' )
    remark: 可以指定逻辑操作符(包括 AND ,AND NOT,OR )。

    4. 查询有 '南京路' 字样的地址
    SELECT student_id,student_name
    FROM students
    WHERE CONTAINS( address, 'nanjing NEAR road' )
    remark: 上面的查询将返回包含 'nanjing road','nanjing east road','nanjing west road' 等字样的地址。
    A NEAR B,就表示条件: A 靠近 B。

    5. 查询以 '湖' 开头的地址
    SELECT student_id,student_name
    FROM students
    WHERE CONTAINS( address, '"hu*"' )
    remark: 上面的查询将返回包含 'hubei','hunan' 等字样的地址。
    记住是 *,不是 %。

    6. 类似加权的查询
    SELECT student_id,student_name
    FROM students
    WHERE CONTAINS( address, 'ISABOUT (city weight (.8), county wright (.4))' )
    remark: ISABOUT 是这种查询的关键字,weight 指定了一个介于 0~1之间的数,类似系数(我的理解)。表示不同条件有不同的侧重。

    7. 单词的多态查询
    SELECT student_id,student_name
    FROM students
    WHERE CONTAINS( address, 'FORMSOF (INFLECTIONAL,street)' )
    remark: 查询将返回包含 'street','streets'等字样的地址。
    对于动词将返回它的不同的时态,如:dry,将返回 dry,dried,drying 等等。

    以上例子都使用英文,不使用中文是因为有的查询方式中文不支持,而且我的计算机是英文系统。
    全文索引——CONTAINS 语法
    我们通常在 WHERE 子句中使用 CONTAINS ,就象这样:SELECT * FROM table_name WHERE CONTAINS(fullText_column,'search contents')。


    如果你在选定字段中查询一个匹配的直接使用
    如:
    从company中检查是否有test1的则:
    select * from company
    where contains(*,'test1')
    如果要检查的是两个关键字,如是或地关系:
    select * from company
    where contains(*,'"北京" or "tttt"')
    注意:关键字“北京”和“tttt”必须用"",包括起来,or代表两个关键字之间是"或"的关系
    如果是与的关系:
    select * from company
    where contains(*,'"北京" and "tttt"')
    如果是三个关键字则:
    关键字前的那个or或者and 表示跟其他关键字的关系
    and 表示两个词是靠近的

    本文转自:小茂

  • 相关阅读:
    英语生活箴言
    Javascript中最常用的55个经典技巧
    深刻理解Java编程的7个例子
    定制Apache索引样式
    【Androidin全球首发】国产Android Broncho A1 评测,第一印象
    系统程序员成长计划写得又快又好的秘诀(五)
    让adb logcat打印内核调试信息
    系统程序员成长计划写得又快又好的秘诀(三)
    Projects owned by limodev.cn
    Apache Direcotry Indexes目录列表显示样式定制
  • 原文地址:https://www.cnblogs.com/sunny-539/p/3187755.html
Copyright © 2011-2022 走看看