用asp编写文档搜索页面

网络整理 - 08-09
查询语言

通过在查询表格中键入单词或短语,然后单击按钮执行查询,就可以在 Web 站点中搜索任意的单词或短语(例如,查询表格示例中的“执行查询”按钮)。本节将介绍以下主题:

逻辑和相近运算符:显示如何通过插入逻辑和相近运算符执行更精确的查询。

通配符:帮助您查找包含与所给单词相似的单词的页。

自由文本查询: 说明如何基于短语的意思来表述一个查询,而不是用精确的单词。

矢量空间查询:解释如何获得与单词和短语列表匹配的查询结果。

属性值查询:告诉您如何查询文件的属性值。

查询示例:给出各种查询的示例。

属性名列表:列出和说明可用于查询的属性名。



搜索产生一个文件列表,这些文件中包含某个单词或短语(不管单词或短语出现在文件中的任何地方)。下面列表给出表述查询的规则:

连续的单词作为短语对待,它们在匹配文档中必须以相同的顺序出现。

查询不区分大小写,因此可以用大写或小写键入查询。

可以搜索任何单词,但不包括在例外列表中列出的单词(对于英语,包括 a、an、and、as 和其他一些单词), 它们在查询中将被忽略。

在例外列表中的单词在短语中将作为占位符对待,用来进行相似查询。例如,如果查询“Word for Windows”,结果将给出“Word for Windows”和“Word and Windows” ,因为 for 是一个在例外列表中出现的虚词。

标点符号在搜索时将被忽略,如句号 (.)、冒号 (:)、分号 (;) 和逗号 (,)。

要在查询中使用特殊对待的字符,如 &、|、^、#、@、$、(、),请用引号 (“) 将查询括起来。

要搜索包含引号的单词或短语,请先用引号把整个短语括起来,并用两遍引号括住想用引号括起来的单词。例如,“World-Wide Web or ““Web””” 将搜索 World-Wide Web or “Web”。

可以插入逻辑运算符(AND、 OR 和 NOT)以及相近运算符 (NEAR) 来指定附加的搜索信息。

通配字符 (*) 可以用所给前缀匹配单词。查询 esc* 可以匹配词条 “ESC”、“escape” 等等。

自由文本查询可以不按查询语法指定查询。

可以指定矢量空间查询。

可以执行 ActiveX"! (OLE) 和文件属性的属性值查询。



逻辑和相近运算符

逻辑和相近运算符可以创建更精确的查询。

搜索目标

示例

结果

同一页中同时包含两个词条

access and basic
—或—
access & basic

包含单词“access”和“basic”的页。

同一页中包含两个词条之一

cgi or isapi
—或—
cgi | isapi

包含单词“cgi”或“isapi”的页。

包含第一个词条,但不包含第二个词条

access and not basic
—或—
access & ! basic

包含单词“access”,但不包含单词“basic”的页。

不匹配某个属性值的页

not @size = 100
—或—
! @size = 100

大小不是 100 字节的页。

同一页中同时包含两个词条,且互相靠近

excel near project
—或—
excel ~ project

包含互相靠近的单词“excel”和“project”的页。

提示:

可以在查询表达式中加入括弧,表达式中带括弧的部分比查询的其他部分先执行。

使用双引号 (“) 可以指明逻辑或 NEAR 运算符关键字在查询中需要忽略。例如,“Abbott and Costello”将匹配包含该短语的页,而不是匹配符合该逻辑表达式的页。作为运算符,单词 and 在英语中是一个虚词。

NEAR 运算符与 AND 运算符相似, NEAR 也返回一页中两个单词都包含的页。但是,NEAR 和 AND 运算符不同之处在于,NEAR 要看单词是否靠近。也就是说,包含搜索单词较近的页的等级将大于或等于单词相隔较远的页的等级。如果搜索的单词相隔大于 50 个单词,该页将定为等级零

在内容查询中,NOT 运算符只能用在 AND 运算符之后,它仅用来排除匹配前面内容约束的页。对于属性值查询,NOT 运算符可以不与 AND 运算符一起使用。

AND 运算符的优先级高于 OR。例如,下面的前三个查询相等,但第四个不同:
a AND b OR c
c OR a AND b
c OR (a AND b)
(c OR a) AND b



注意 在所有语言中,符号(&、|、!、 ~)与英语关键字 AND、OR、NOT 和 NEAR 的作用相同(Index Server 支持)。如果浏览器被设置为下列六种语言,本地化的关键字也可以使用。

语言

关键字

德语

UND、ODER、NICHT、NAH

法语

ET、OU、SANS、 PRES

西班牙语

Y、O、NO、CERCA

荷兰语

EN、OF、NIET、 NABIJ

瑞典语

OCH、ELLER、INTE、N腞A

意大利语

E、O、NO、VICINO

注意 NEAR 运算符只能用于单词或短语。

通配符

通配符可以帮助您查找包含与所给单词相似的单词的页。

搜索目标

示例

结果

具有相同前缀的单词

comput*

包含前缀为“comput”的单词的页,例如“computer”、“computing”等等。

基于同一个本词的单词

fly**

包含基于相同本词“fly”的单词的页,例如“flying”、“flown”、“flew”等等。

自由文本查询

在自由文本查询中,查询引擎查找与单词或短语最佳匹配的页。这种查询匹配意思,而不是精确的单词。在自由文本查询中,逻辑、相近和通配运算符都将被忽略。自由文本查询以 $contents 为前缀。

搜索目标

示例

结果

匹配自由文本的文件

$contents how do I print in Microsoft Excel?

提到 printing 和 Microsoft Excel 的页。

矢量空间查询

查询引擎支持矢量空间查询。矢量查询返回匹配单词和短语列表的页,每页的排列指明了页面与查询匹配的程度。

搜索目标

示例

结果

包含指定单词的页

light, bulb

包含与搜索单词最匹配的单词的文件

包含加权的前缀、单词和短语的页

invent*, light[50], bulb[10], "light bulb"[400]

包含以“invent,”为前缀的单词、单词“light”、 “bulb”和短语“light bulb”的文件(词条被加权)




在矢量查询中的组件以逗号隔开。

矢量查询中的组件可以用 [weight] 语法加权。

矢量查询返回的页不必匹配查询的所有词条。

当结果按等级排序时,矢量查询最好。



属性值查询

用属性值查询,可以查找含有与所给标准相匹配的属性值的文件。可以用来查询的属性包括文件的基本信息(如文件名、文件大小)和 ActiveX 属性(包含在文档摘要中),ActiveX 属性由 ActiveX 应用程序创建并存储在文件中。

下面是两种类型的属性查询:

关系属性查询包括“at”字符 (@)、属性名、关系运算符和属性值。例如,要查找大小超过一兆字节的文件,可以执行查询 @size > 1000000。

正则表达式查询包括号码符号 (#)、属性名和属性值的正则表达式。例如,要查找所有视频 (.avi) 文件,可以执行查询 #filename *.avi。正则表达式不会匹配特定的属性内容 (#contents) 和全部 (#all)。 在查询中不能检索的属性不能用于 # 查询,包括未存储在属性缓存中的 HTML META 属性。



本节包含以下主题:

属性名

关系运算符

属性值



属性名

属性名以“at”(@) 或号码符号 (#) 开头,@ 用于关系查询,# 用于正则表达式查询。

如果未指定属性名,将假定为 @contents。

所有文件中都可用的属性包括:

属性名

说明

All

匹配单词、短语和任何属性

Contents

文件中单词和短语

Filename

文件的名称

Size

文件大小

Write

文件的最后一次修改时间

ActiveX 属性值也可以用于查询,绝大多数由 ActiveX 应用程序创建的 Web 站点文件可以用下列属性查询:

属性名

说明

DocTitle

文档的标题

DocSubject

文档的主题

DocAuthor

文档的作者

DocKeywords

文档中的关键字

DocComments

文档中的注释

属性名的完整列表,请参阅本页后面的属性名列表 。

关系运算符

关系运算符用于关系属性查询中。

搜索目标

示例

结果

与固定值相关的属性值

@size < 100
@size <= 100
@size = 100
@size != 100
@size >= 100
@size > 100

大小与查询匹配的文件

拥有全部比特集的属性值

@attrib ^a 0x820

拥有存档属性的压缩文件

拥有一些比特集的属性值

@attrib ^s 0x20

拥有存档属性的文件

属性值

搜索目标

示例

结果

指定值

@DocAuthor = Bill Barnes

由“Bill Barnes”创作的文件

以前缀开始的值

#DocAuthor George*

作者名字是以“George”打头的文件

带扩展名集中任何一种扩展名的文件

#filename *.|(exe|,dll|,sys|)

带 .exe、.dll 或 .sys 扩展名的文件

在某个日期之后修改过的文件

@write > 96/2/14 10:00:00

在 1996 年 2 月 14 日 10:00 GMT 之后修改过的文件

在相对日期之后修改过的文件

@write > -1d2h

在最近 26 小时之内修改过的文件

匹配一个矢量的矢量

@vectorprop = { 10, 15, 20 }

矢量值为 { 10, 15, 20 } 的 ActiveX 文档

每一个值都与标准匹配的矢量

@vectorprop >^a 15

矢量值的每一个值都大于 15 的 ActiveX 文档

至少有一个值与标准匹配的矢量

@vectorprop =^s 15

矢量值中至少有一个值大于 15 的 ActiveX 文档



当使用正则表达式查询时,请确保在属性值之前带上 (#) 字符,否则请带上“at”(@) 字符。等于 (=) 关系运算符假定为用于正则表达式查询。

文件名 (#filename) 是唯一支持在文字左边出现通配符的正则表达式的属性。

日期和时间值为 yyyy/mm/dd hh:mm:ss 或 yyyy-mm-dd hh:mm:ss 格式。年的前两位和整个时间都可以忽略。如果忽略年的前两位,那么小于等于 29 的数字将解释为二十一世纪,大于或等于 30 的数字将解释为二十世纪。所有日期和时间都是格林尼治时间 (GMT)。

相对与当前时间的日期和时间可以用减号 (-) 跟上零或整数单位和时间单位对来表示。时间单位解释为:(y) 年、(m) 月、(w) 周、(d) 天、(h) 小时、(n) 分钟和 (s) 秒。作为可选项,在时间表达式后还可以指定三位毫秒值。例如,1997/12/8 10:10:03:452

货币值为 x.y 格式。在此,x 是金额的整数值,y 是小数值。单位没有假定值。

逻辑值为:(t) 或 (true) 对应与 TRUE, (f) 或 (false) 对应与 FALSE。

矢量 (VT_VECTOR) 表示为:左大括号 ({) 开始、紧跟逗号分隔的值列表,以右大括号 (}) 结束。

单值表达式与矢量相比较表示为:关系运算符,然后是 (^a)(对应于全部)或 (^s)(对应于一些)。

数字值可以是十进制或十六进制(前面加 0x)。

contents 属性值不支持关系运算符,如果指定关系运算符,将找不到任何结果。例如,@contents Microsoft 将查找包含 Microsoft 的文档,但 @contents=Microsoft 将什么也找不到。



正则表达式

属性查询中的正则表达式定义如下:

除了星号 (*)、逗号 (.)、问号 (?) 和竖线 (|) 之外的任何字符都默认为匹配自己。

正则表达式可以用引号 (“) 括起来,如果包含空格 ( ) 或右括号 ()),则必须用引号括起来。

字符 *、.、和 ? 的作用与它们在 Windows 中的作用一样,星号匹配任意字符,句号匹配 (.) 或字符串结尾,问号匹配任何单个字符。

字符 | 是转意字符,在 | 之后的字符具有特殊含义:

( 开始一个组,后面必须有 ) 相对。


) 结束一个组,前面必须有 ( 相对。


[ 开始一个字符类,后面必须有 ](不转意)相对。


{ 开始计数的匹配,后面必须有 } 相对。


} 结束计数的匹配,前面必须有 { 相对。


, 分隔 OR 子句。


* 匹配前面表达式的零次或多次出现。


? 匹配前面表达式的零次或一次出现。


+ 匹配前面表达式的一次或多次出现。


其他字符,包括 |,匹配自己。


方括号 ([]) 之间的下列字符具有特殊含义:

^ 除了下面的类,匹配任意。它必须是第一个字符。


] 匹配 ]。只能在 ^ 之后,否则起结束类的作用。


- 范围运算符。前面和后面可以是普通字符。


其他匹配自己(范围的开始或结束)。


大括号 ({}) 之间适用下列语法:

|{m|} 精确匹配前面表达式的 m 次出现。(0 < m < 256)。


|{m,|} 匹配前面表达式的至少 m 次出现。(1 < m < 256)。


|{m,n|} 匹配前面表达式从 m 到 n 次的出现,包含m 和 n。(0 < m < 256, 0 < n < 256)。


要匹配 *、.、和 ?,请用括号括起来(例如,|[*]sample 将匹配 “*sample”)。



查询示例

示例

结果

@size > 1000000

大于一兆字节的页

@write > 95/12/23

该日期后修改过的页

Apple tree

包含短语“apple tree”的页

"apple tree"

同上

@contents apple tree

同上

Microsoft and @size > 1000000

包含单词“Microsoft”,并且大于大于一兆字节的页

"microsoft and @size > 1000000"

包含指定短语的页(与上面不同)

#filename *.avi

视频文件(因为查询包含正则表达式,所以使用 # 前缀)

@attrib ^s 32

带存档属性的页

@docauthor = John Smith

由所给作者创作的页

$contents why is the sky blue?

匹配查询的页

@size < 100 & #filename *.gif

大于 100 字节的 GIF 文件

属性名列表

这些属性在查询时都可用,附加的属性要看 Web 服务器的配置。

友好名称

数据类型

属性

A_HRef

DBTYPE_WSTR | DBTYPE_BYREF

HTML HREF 的文字,该属性名由 Microsoft?Site Server 创建,与 Index Server 属性名 HtmlHRef 相对。可以查询,但不能检索。

Access

VT_FILETIME

文件的最后访问时间。

All

(不适用)

搜索字符串的每一个属性。可以查询,但不能检索。

AllocSize

DBTYPE_I8

为文件分配的磁盘大小。

Attrib

DBTYPE_UI4

文件属性,在 Win32 SDK 文档中说明。

ClassId

DBTYPE_GUID

对象的类标识,例如 WordPerfect、Word 等等。

Characterization

DBTYPE_WSTR | DBTYPE_BYREF

文档的描述或摘要,由 Index Server 使用。

Contents

(不适用)

文件的主要内容。可以查询,但不能检索。

Create

VT_FILETIME

文件的创建时间。

Directory

DBTYPE_WSTR | DBTYPE_BYREF

文件的物理路径,不包含文件名。

DocAppName

DBTYPE_WSTR | DBTYPE_BYREF

创建文件的应用程序的名称。

DocAuthor

DBTYPE_WSTR | DBTYPE_BYREF

文档的作者。

DocByteCount

DBTYPE_14

文档的字节数。

DocCategory

DBTYPE_STR | DBTYPE_BYREF

文档的类别,如备忘录、计划或便笺。

DocCharCount

DBTYPE_I4

文档的字符数。

DocComments

DBTYPE_WSTR | DBTYPE_BYREF

关于文档的注释。

DocCompany

DBTYPE_STR | DBTYPE_BYREF

文档写作的公司名称。

DocCreatedTm

VT_FILETIME

文档创建的时间。

DocEditTime

VT_FILETIME

编辑文档所用的全部时间。

DocHiddenCount

DBTYPE_14

Microsoft?PowerPoint 文档中的隐藏幻灯片数。

DocKeywords

DBTYPE_WSTR | DBTYPE_BYREF

文档关键字。

DocLastAuthor

DBTYPE_WSTR | DBTYPE_BYREF

最近编辑文档的用户。

DocLastPrinted

VT_FILETIME

文档的最近一次打印时间。

DocLastSavedTm

VT_FILETIME

文档的最近一次保存时间。

DocLineCount

DBTYPE_14

文档包含的行数。

DocManager

DBTYPE_STR | DBTYPE_BYREF

文档作者的经理的名称。

DocNoteCount

DBTYPE_14

PowerPoint 文档中带注释的页数。

DocPageCount

DBTYPE_I4

文档的页数。

DocParaCount

DBTYPE_14

文档的图形数量。

DocPartTitles

DBTYPE_STR | DBTYPE_VECTOR

文档部分的名称。例如,在 Excel 中,部分标题是电子工作表的名称;在 PowerPoint 中是幻灯片的标题;在 Word for Windows 中是主文档中各个分文档的名称。

DocPresentationTarget

DBTYPE_STR|DBTYPE_BYREF

PowerPoint 演示文稿的目标格式(35mm、打印机、视频等等)。

DocRevNumber

DBTYPE_WSTR | DBTYPE_BYREF

文档的当前版本。

ā??僐??????儸???绘?? DocSlideCount

DBTYPE_14

PowerPoint 文档的幻灯片数。

DocSubject

DBTYPE_WSTR | DBTYPE_BYREF

文档的主题。

DocTemplate

DBTYPE_WSTR | DBTYPE_BYREF

文档的模板。

DocTitle

DBTYPE_WSTR | DBTYPE_BYREF

文档的标题

DocWordCount

DBTYPE_I4

文档的字数。

FileIndex

DBTYPE_I8

文件的唯一标识。

FileName

DBTYPE_WSTR | DBTYPE_BYREF

文件名。

HitCount

DBTYPE_I4

文件中的命中次数(单词匹配查询)。

HtmlHRef

DBTYPE_WSTR | DBTYPE_BYREF

HTML HREF 的文字。可以查询,但不能检索。

HtmlHeading1

DBTYPE_WSTR | DBTYPE_BYREF

HTML 文档中样式为 H1 的文字。可以查询,但不能检索。

HtmlHeading2

DBTYPE_WSTR | DBTYPE_BYREF

HTML 文档中样式为 H2 的文字。可以查询,但不能检索。

HtmlHeading3

DBTYPE_WSTR | DBTYPE_BYREF

HTML 文档中样式为 H3 的文字。可以查询,但不能检索。

HtmlHeading4

DBTYPE_WSTR | DBTYPE_BYREF

HTML 文档中样式为 H4 的文字。可以查询,但不能检索。

HtmlHeading5

DBTYPE_WSTR | DBTYPE_BYREF

HTML 文档中样式为 H5 的文字。可以查询,ā??僐?????儸?疀??但不能检索。

HtmlHeading6

DBTYPE_WSTR | DBTYPE_BYREF

HTML 文档中样式为 H6 的文字。可以查询,但不能检索。

Img_Alt

DBTYPE_WSTR | DBTYPE_BYREF

标记的候补文字。可以查询,但不能检索。

Path

DBTYPE_WSTR | DBTYPE_BYREF

文件的物理路径,包含文件名。

Rank

DBTYPE_I4

行的等级,范围从 0 到 1000,数字越大表示越匹配。

RankVector

DBTYPE_I4 | DBTYPE_VECTOR

矢量查询的独立组件的等级。

ShortFileName

DBTYPE_WSTR | DBTYPE_BYREF

短 (8.3) 文件名。

Size

DBTYPE_I8

文件大小,单位是字节。

USN

DBTYPE_I8

更新序列号,仅用于 NTFS 驱动器。

VPath

DBTYPE_WSTR | DBTYPE_BYREF

指向文件的完整虚拟路径,包括文件名。如果有多个可能的路径,将选择最符合查询的一个。

WorkId

DBTYPE_I4

文件的 Internal ID,Index Server 使用。

Write

VT_FILETIME

最近一次写文件的时间。

定义新属性名

要定义不在前面列表中的属性,必须把它们列在 .idq 文件的 [Names] 节中。要在限制、排序方法或作为检索的列中使用这些在 .idq 文件中定义的属性,请使用下面格式:

[Names]
#不在标准列表中的属性
Propertyname ( Datatype ) = GUID ["Name" | propid]


语法中,"Name" 是属性名(下面的例子是 "Sales"),propid 是十六进制的属性 ID 。注意,要用引号把友好名称括起来,但属性 ID 不要用引号。

例如,假设想定义 HTML meta 标记作为属性名,以便某人可以搜索,要定义的属性是 Sales。

定义 Sales 属性


在 .idq 文件中的 [Names] 节下,添加下面的行:

MetaDescription(DBTYPE_WSTR) = d1b5d3f0-c0b3-11cf-9a92-00a0c908dbf1 "Sales"


GUID 号来自注册表的 MetaTagClsid 参数,该参数在下面位置:


HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Control
\HtmlFilter
\MetaTagClsid

然后,在 HTML 文件中想要出现标记的地方,定义 meta 说明。

例如,假设以后想搜索所有包含销售计划的文件:


在 File1.htm 中:





在 File2.htm 中:





在 File3.htm 中:







注意 请确保将 META NAME 标记添加到文件开始的 和 HTML 标记之间。

现在就可以搜索所有关于销售计划的文件,请发送下面查询:

@metadescription projections


该查询返回所有在 META 标记的 CONTENT 字段中包含单词 projections 的文件。在该例子中,将返回 File1.htm 和 File2.htm。

但是,假如要按年搜索销售情况,例如 1997 年的销售列表,请发送下面查询:

@metadescription 1997


将返回 File3.htm。