eaglet

本博专注于基于微软技术的搜索相关技术
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

T-SFQL 0.1 讨论稿

Posted on 2009-04-27 18:37  eaglet  阅读(1236)  评论(12编辑  收藏  举报
T-SFQL 0

T-SFQL 0.1

 

Copy right 1

概述... 1

保留关键字... 2

T-SQL继承的关键字... 2

新增关键字... 3

基本T-SFQL 语句... 3

Insert 语句... 3

Syntax. 4

Arguments. 4

Examples. 5

Select 语句... 5

Syntax. 5

Arguments. 6

Examples. 7

Update 语句... 7

Syntax. 8

Examples. 8

Delete 语句... 8

Syntax. 8

Examples. 9

 

 

 

Copy right

Hubble.net

 

 

概述

 

T-SFQL (Transact-Structured Full-text Query Language) 是在T-SQL 标准基础上衍生出来的结构化全文查询语言。2009年由Hubble.net 提出,语言全文数据库的查询和管理。

T-SFQL 0.1 版本为T-SFQL 语言推出的第一个版本。该版本只提供基本的“增删改查”功能。其他功能将逐渐在后续版本中提供。

 

保留关键字

 

T-SQL继承的关键字

 

ADD    EXIT    PRIMARY

ALL     FETCH            PRINT

ALTER            FILE    PRIVILEGES

AND    FILLFACTOR             PROC

ANY    FLOPPY         PROCEDURE

AS       FOR    PROCESSEXIT

ASC    FOREIGN       PUBLIC

AUTHORIZATION    FREETEXT     RAISERROR

AVG    FREETEXTTABLE     READ

BACKUP        FROM             READTEXT

BEGIN            FULL   RECONFIGURE

BETWEEN      GOTO             REFERENCES

BREAK           GRANT           REPEATABLE

BROWSE        GROUP           REPLICATION

BULK HAVING         RESTORE

BY       HOLDLOCK RESTRICT

CASCADE      IDENTITY      RETURN

CASE IDENTITY_INSERT   REVOKE

CHECK           IDENTITYCOL          RIGHT

CHECKPOINT           IF         ROLLBACK

CLOSE            IN        ROWCOUNT

CLUSTERED INDEX            ROWGUIDCOL

COALESCE    INNER            RULE

COLUMN       INSERT           SAVE

COMMIT        INTERSECT   SCHEMA

COMMITTED             INTO   SELECT

COMPUTE     IS         SERIALIZABLE

CONFIRM      ISOLATION   SESSION_USER

CONSTRAINT           JOIN   SET

CONTAINS    KEY    SETUSER

CONTAINSTABLE    KILL   SHUTDOWN

CONTINUE    LEFT   SOME

CONTROLROW        LEVEL            STATISTICS

CONVERT      LIKE   SUM

COUNT          LINENO         SYSTEM_USER

CREATE         LOAD             TABLE

CROSS           MAX   TAPE

CURRENT      MIN    TEMP

CURRENT_DATE      MIRROREXIT            TEMPORARY

CURRENT_TIME       NATIONAL    TEXTSIZE

CURRENT_TIMESTAMP      NOCHECK     THEN

CURRENT_USER      NONCLUSTERED     TO

CURSOR        NOT    TOP

DATABASE    NULL TRAN

DBCC             NULLIF          TRANSACTION

DEALLOCATE           OF       TRIGGER

DECLARE       OFF     TRUNCATE

DEFAULT       OFFSETS        TSEQUAL

DELETE          ON      UNCOMMITTED

DENY             ONCE             UNION

DESC ONLY             UNIQUE

DISK   OPEN UPDATE

DISTINCT      OPENDATASOURCE            UPDATETEXT

DISTRIBUTED           OPENQUERY            USE

DOUBLE         OPENROWSET          USER

DROP OPTION         VALUES

DUMMY         OR       VARYING

DUMP             ORDER           VIEW

ELSE   OUTER           WAITFOR

END    OVER WHEN

ERRLVL          PERCENT       WHERE

ERROREXIT   PERM WHILE

ESCAPE          PERMANENT            WITH

EXCEPT          PIPE    WORK

EXEC PLAN WRITETEXT

EXECUTE       PRECISION     

EXISTS           PREPARE      

 

新增关键字

 

DOCID 该关键字用于表示文档ID

SCORE:该关键字用于表示查询结果的得分。

MATCH:该关键字类似LIKE 用于全文的模糊匹配。

 

 

基本T-SFQL 语句

Insert 语句

T-SFQL Insert 语句的语法和T-SQL 基本一致,0.1 版本省略了table hint limited 部分。

Syntax

INSERT [INTO]
    {
     table_name)
    }

    {    [(column_list)]
        { VALUES ( {    DEFAULT
                        |    NULL
                        |    expression
                        
}[,...n]
            )
        }
    }
    | DEFAULT VALUES

Arguments

[INTO]

Is an optional keyword that can be used between INSERT and the target table.

table_name

Is the name of a table that is to receive the data.

 (column_list)

Is a list of one or more columns in which to insert data. column_list must be enclosed in parentheses and delimited by commas.

If a column is not in column_list, Microsoft® SQL Server™ must be able to provide a value based on the definition of the column; otherwise, the row cannot be loaded. SQL Server automatically provides a value for the column if the column:

·         Has an IDENTITY property. The next incremental identity value is used.

·         Has a default. The default value for the column is used.

·         Has a timestamp data type. The current timestamp value is used.

·         Is nullable. A null value is used.

column_list and VALUES list must be used when inserting explicit values into an identity column, and the SET IDENTITY_INSERT option must be ON for the table.

VALUES

Introduces the list of data values to be inserted. There must be one data value for each column in column_list (if specified) or in the table. The values list must be enclosed in parentheses.

If the values in the VALUES list are not in the same order as the columns in the table or do not have a value for each column in the table, column_list must be used to explicitly specify the column that stores each incoming value.

DEFAULT

Forces SQL Server to load the default value defined for a column. If a default does not exist for the column and the column allows NULLs, NULL is inserted. For a column defined with the timestamp data type, the next timestamp value is inserted. DEFAULT is not valid for an identity column.

expression

Is a constant, a variable, or an expression. The expression cannot contain a SELECT or EXECUTE statement.

 

DEFAULT VALUES

Forces the new row to contain the default values defined for each column.

 

Examples

 

INSERT T1 VALUES (1, 'Row #1')

 

INSERT INTO T1 (column_1,column_2) VALUES (-99,'Explicit identity value')

Select 语句

T-SFQL 0.1 版本的Select语句是 T-SQLSelect语句的子集,只提供单表的查询功能。不提供 Group by , Having 语句,不提供 Sum,Avg 等统计函数,不提供Distinct, Union等语法。Where 子句中增加了全文搜索的语法元素。分页的查询功能在Hubble.net 库中提供,不在SQL中提供,因此取消Top功能。Order by 语句只限定为单字段排序。

 

Syntax

SELECT [ ALL]
        <select_list>

    [ FROM {<table_source>} [,...n] ]    n =1

    [ WHERE <search_condition> ]       

    [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] }
        [,...n]    ] n=1

Arguments

ALL

      列出被查询表中所有的列,通常用 * 表示 ALL

 

select_list

       列出指定的列

 

FROM

      指定查询的源。

table_source

       表名,0.1 版本只提供单表查询,这里只能写一个表名。

 

WHERE

 

Where 子句和T-SQL的查询字句一致,0.1 版本不提供Where子句中使用函数等内容,只提供最简化的布尔表达式。为适应全文搜索的需要, T-SFQL 语句在T-SQL标准基础上做了增加,下面重点描述增加的部分:

  • 指定字段权重

T-SFQL 语句只允许对全文索引字段指定权重,对其它字段指定权值无效。

语法:

FieldName^Boost

^ 为分隔符,表示设置权重开始

Boost为权重,无符号整型,范围为 0-65535

 

 

例:

Select * from T where c1^5 match ‘BeiJing

 

  • 位置无关模糊匹配

位置无关模糊匹配指被匹配的关键字无论其位置关系如何,得到的记录得分都相同。

比如 匹配 China BeiJing BeiJing China 得到的结果是相同的。

 

语法:

FieldName Match ‘Query words[^Boost]’

 

Query words:要查询的单词,可以为多个单词,单词之间以空格分隔。

 

^ 分隔符,表示设置权重开始。

Boost:权重,无符号整型,范围为 0-65535。可选项,不指定权重则默认权重为1

 

 

例:

Select * from T where  C2 Match ‘China^256 BeiJing^100 ShangHai

 

 

  • 位置相关模糊匹配

位置无关模糊匹配指被匹配的关键字随其位置关系不同会得到不同的记录得分。

比如 匹配 China BeiJing BeiJing China 得到的结果是不同。前者会将全文中存在China BeiJing 这个顺序的文章得分提高,而将BeiJing China 这个顺序的文章得分降低。

 

T-SFQL 借用了SQL 中的Like 关键字来表示位置相关的模糊匹配。

 

语法:

FieldName Like ‘Query words[^Boost][^Position]’

 

Query words:要查询的单词,可以为多个单词,单词之间以空格分隔。

 

^ 分隔符,表示设置权重或者位置开始。

Boost:权重,无符号整型,范围为 0-65535。可选项,不指定权重则默认权重为1

Position: 单词的起始位置,无符号整型,可选项,必须在权重之后出现。如果不指定,则默认为单词出现在查询字符串中的位置。

例:

Select * from T where  C2 Like ‘China^256^0 BeiJing^100^6 ShangHai^1^13’

 

Select * from T where  C2 Like ‘中国^256^0 中国人^100^0’

 

Select * from T where  C2 Like ‘BeiJing China

 

 

Examples

Select * from T where c1 > 100 and c1 < 200 and c2 match ‘China^256 BeiJing^100 ShangHai

查找 T C1 大于100 且小于 200 并且 C2 匹配 China BeiJing ShangHai 三个单词的记录。

 

Update 语句

Update 语句的语法和SQLUpdate完全相同。Where 子句参加Select 语句。

Syntax

 

UPDATE
        {
         table_name WITH ( <table_hint_limited> [...n])
         | view_name
    
    | rowset_function_limited
        }
        SET
        {column_name = {expression | DEFAULT | NULL}
        | @variable = expression
        | @variable = column = expression } [,...n]

    {{[FROM {<table_source>} [,...n] ] n=1

        [WHERE
            <search_condition>] }
        }

Examples

Update T Set c1 = 12 where c1 > 100 and c1 < 200 and c2 match ‘China^256.3 BeiJing^100 ShangHai

查找 T C1 大于100 且小于 200 并且 C2 匹配 China BeiJing ShangHai 三个单词的记录。并将这些记录中c1 字段的值更改为 12

 

Delete 语句

Delete 语句的语法和SQLDelete完全相同。Where 子句参加Select 语句。

Syntax

 

DELETE
    [FROM ]
        {
         table_name WITH ( <table_hint_limited> [...n])
         | view_name
        
| rowset_function_limited
        }

        [ FROM {<table_source>} [,...n] ] n=1

    [WHERE
        { <search_condition>
             ]
        }
    ]



Examples

Delete T where c1 > 100 and c1 < 200 and c2 match ‘China^256.3 BeiJing^100 ShangHai

查找 T C1 大于100 且小于 200 并且 C2 匹配 China BeiJing ShangHai 三个单词的记录。并将这些记录删除。