CN102737133A - 一种实时搜索的方法 - Google Patents

一种实时搜索的方法 Download PDF

Info

Publication number
CN102737133A
CN102737133A CN2012102179464A CN201210217946A CN102737133A CN 102737133 A CN102737133 A CN 102737133A CN 2012102179464 A CN2012102179464 A CN 2012102179464A CN 201210217946 A CN201210217946 A CN 201210217946A CN 102737133 A CN102737133 A CN 102737133A
Authority
CN
China
Prior art keywords
data
search
buffer memory
index
section
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2012102179464A
Other languages
English (en)
Other versions
CN102737133B (zh
Inventor
龚伟坚
孙海涛
崔金峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing City Network Neighbor Technology Co Ltd
Original Assignee
Beijing City Network Neighbor Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing City Network Neighbor Technology Co Ltd filed Critical Beijing City Network Neighbor Technology Co Ltd
Priority to CN201210217946.4A priority Critical patent/CN102737133B/zh
Publication of CN102737133A publication Critical patent/CN102737133A/zh
Application granted granted Critical
Publication of CN102737133B publication Critical patent/CN102737133B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种实时搜索的方法,该方法包括以下步骤:将数据文档按照时间顺序生成多段索引;从各索引段中提取部分数据,予以缓存,其中,根据各段的生成时间确定提取该段进行缓存的数据量;搜索数据时,先从缓存中搜索各索引段的文档,缓存中存在目标数据时,则返回目标数据;否则,从其他存储单元中搜索数据;将从缓存所搜索的目标数据和/或从存储单元中所搜索的目标数据予以合并,返回合并的数据。本发明提供的方案针对不同时间段的数据,采用不同的缓存方案,提高了实时搜索的效率和灵活性。

Description

一种实时搜索的方法
技术领域
本发明涉及搜索技术,尤其涉及一种实时搜索的方法。
背景技术
互联网的飞速发展,给搜索引擎提出了新的难题,由于网络信息的爆炸性增长,大规模的web搜索引擎平均每秒需要处理上万次搜索请求,每个搜索的处理需要涉及到海量的索引,因此,索引处理已经成为搜索引擎的主要的性能瓶颈。
现有的搜索方案中,对于实时搜索,虽然可以一边提供查询的功能,一边提供修改的数据排序字段,例如一张员工数据表中,存储了员工的编号、姓名、工作日期共三个字段的信息,而索引是按照“编号”的排序字段进行建立的,则用户需要查询以“工作日期”为排序字段的前十名员工的信息,则可以一边返回查询的数据给用户,一边修改数据的排序字段,以便于下次较快地返回以“工作日期”为排序字段的所有员工的信息,但是,由于没有适用缓存,针对每一次新的搜索请求,都需要从索引中检索数据,并对索引中的数据进行重新排序,由此,延长了数据搜索的时间,降低了搜索系统的性能。
发明内容
根据对大量用户的搜索习惯和规律进行调查发现,在一段时间内大量用户会对一些当前热门关键词进行搜索,而搜索过程中生成的索引和搜索结果在预定时间内是保持不变。如果能够充分利用先前已经形成的索引和搜索结果可以减少为相同的搜索请求重复生成搜索结果的服务器时间和负荷。为此本发明的目的是提供一种实时搜索的方法,该方法包括以下步骤:
将数据文档按照时间顺序生成多段索引;
从各索引段中提取部分数据,予以缓存,其中,根据各段的生成时间确定提取该段进行缓存的数据量;
搜索数据时,先从缓存中搜索各索引段的文档,缓存中存在目标数据时,则返回目标数据;否则,从其他存储单元中搜索数据;
将从缓存所搜索的目标数据和/或从存储单元中所搜索的目标数据予以合并,返回合并的数据。
与现有技术相比,本发明具有以下优点:
1)通过采用缓存的方案,提高了实时搜索的效率;
2)针对不同时间段的数据,采用不同的缓存方案,提高了实时搜索的灵活性。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为根据本发明一个优选实施例的实时搜索方法的流程图;
图2为根据本发明的一个优选实施例的数据搜索的方法流程图;
具体实施方式
下面结合附图对本发明作进一步详细描述。
根据本发明,提供了一种实时搜索的方法。下文中,将对本发明提供的实时搜索的方法进行详细说明。该方法包括以下步骤:
步骤S101,将数据文档按照时间顺序生成多段索引。
具体地,索引的建立和数据搜索的方法可以参照现有技术,例如包括以下步骤:
a)在内存中预设存储单元的大小和个数,初始化相应的内存空间,记录包括数据类型和数据内容在内的数据信息,如文本数据及内容;
b)初始化索引,在所述索引中存储对应数据信息的各存储单元的地址信息;
c)收到搜索请求,通过索引进行数据搜索;
d)判断是否搜索得到所需数据,是,则将搜索结果返回;否,则从本地或远程磁盘中搜索并读取所需数据。
本技术方案中,根据时间顺序建立多段索引,如建立三段索引,第一段索引中所包含的数据包括一天以内被搜索或更新的数据;第二段索引中所映射的数据包括一天之前三个月以内被搜索或更新的数据;第三段索引中所映射的数据包括前三个月之前被搜索或更新的数据,也就是不同段的索引,所包含的是不同时间段的数据。所述索引段中包括搜索请求和相应的搜索结果。
当然,本领域的技术人员应该知晓,索引中由于可以只包含数据中的关键字值和记录号,如索引中包含一张员工表中的“工号”值和排序号,因此,索引比数据本身的内容要小得多,并且,建立索引后,索引中的内容会随着数据的增减或修改而更新。
一个完整的索引由多个段组成,每个段是一份可搜索的最小单元,它由多个文档生成,每个文档在段中具有唯一的标识,各个文档可以分别为不同的数据对象类型,包括:文本数据对象、图像数据对象、音频数据对象、视频数据对象、可执行程序数据对象等等,并且,每个文档包含一个全局的、唯一的键值,即主键,例如文档的标识号。在每个索引段中,文档按照主键进行排序。
步骤S102,从各索引段中提取部分数据,予以缓存,其中,各段所提取的数据量根据段的生成时间予以确定。
具体地,对于不同的索引段,从中提取不同量的数据用于缓存。对于较新的段,其缓存的数据量可以多一些,对于时间较早的段,其缓存的数据量可以少一些。为了区分不同段的时间先后,可以对每个段打上其生成的时间戳。所谓时间戳,指的是数据经过每一个路由器时的当地时间。在本发明中,时间戳可以指每个索引段的生成时间。
通常,每个索引段的缓存数据在一段时间内需要合并,本实施例中,优选地,每个索引段一天内合并一次所缓存的数据,也就是每个索引段的缓存失效时间是一天,例如,索引结构中原有三个索引段,第一个索引段包含的是一天以内的数据,第二个索引段包含的是一天之前三个月以内的数据,第三个索引段包含的是三个月之前的数据,则在每天晚上的十二点对各个索引段的数据进行合并,对于第二天而言,新产生的数据则建立新的索引段予以缓存,当新的索引段中数据累计到一定数量时,不再加入新的数据,由此,按时间戳的顺序,可以对各索引段进行排序。
而对于各索引段中所要缓存的数据,即每个索引段所确定的缓存空间,则根据段的生成时间予以确定。例如,对于一天以内生成或更新的数据,由于此类数据较新,被用户搜索的可能性很大,因此,尽可能多地将这些数据予以缓存,以提高实时搜索的效率。而对于三个月以前生成或更新过的数据,由于此类数据的时间较为久远,被用户搜索的可能性很小,因此,可以只提取小部分的数据予以缓存,就能满足用户实时搜索的需求。
再例如,原有两段索引,第一段索引存储的是一天以内的数据(包括本数),第二段索引存储的是一天之前的数据,那么,对于第一段索引,由于该段中生成的数据相对较新,被搜索的可能性较大,并且,该段中数据文档的排序由于搜索的不确定性可能波动较大,那么,对于这样的段,该段中缓存的数据文档相对要多一些,否则,如果缓存过小,有些数据文档之前由于排序字段的原因被排在后面而不能缓存,但是由于是新数据,排序字段波动较大,当新数据突然置于搜索的热门位置时,由于没有缓存,只能从其他存储单元中进行搜索,使得实时搜索的效率大大降低。因此,为了提高热门数据的实时搜索效率,不因数据的排序字段一时排后而突然超前时,数据没有能够缓存而影响数据搜索的效率,需要根据不同索引段的生成时间,设定不同的缓存空间,甚至,对于最新的索引段,将用户所需要搜索的与该索引段相关的所有数据予以缓存,提高实时搜索的效率。在缓存的索引段中包括部分重复搜索请求的搜索结果。具体来说,将预定时间内超过预定次数的搜索请求的搜索结果进行缓存,当再次接收到相同搜索请求时直接调出已缓存的搜索结果。例如统计过去3天内被重复超过10000次的搜索请求。假设,搜索“出租房屋”在过去3天被请求12000次。则将该搜索请求的搜索结果包含在索引段中进行缓存。当再次请求该搜索时,直接从缓存中调出缓存的搜索结果。该缓存的搜索结果可以实时更新。
当然,由于时间较新的索引段,其内容更新的速度较快,为了满足用户的数据搜索需求,也需要将该段中较多的数据予以缓存。例如,用户需要搜索50篇文档,如果缓存中有50篇文档,而由于文档更新速度快,其中1篇已被删除或者其中的信息已过期,因此,只能从缓存中返回49篇有效的文档给用户,这就降低了实时搜索的效率;如果缓存的文档数为52篇,那么,就可以较快地从缓存中返回50篇有效的文档给用户。对于时间较为久远的段,由于其更新的速度较慢,可以在缓存中存入的文档数相对少一些,如此,也可以节省缓存空间。
步骤S 103,搜索数据时,先从缓存中搜索各索引段的文档,缓存中存在目标数据时,则返回目标数据;否则,从其他存储单元中搜索数据。
具体地,由上文可知,一个完整的索引由多个段组成,每个段是一份可搜索的最小单元,它由多个文档生成。由于从缓存中返回数据比从其他存储单元中返回数据的速度更快,因此,参照图2,图2为根据本发明的一个优选实施例的搜索数据的方法流程图,根据图2,搜索数据的具体过程包括:
步骤S201,搜索数据时,先从缓存中搜索各索引段的文档。
步骤S202,判断缓存中是否存在所要搜索的数据,如果不存在,进入步骤S203;如果存在,进入步骤S204。
步骤S203,如果缓存中不存在目标数据,则从其他存储单元中搜索数据,并将搜索的目标数据所对应的文档,按照上文中所设定的主键予以排序,置入缓存。例如,用户从搜索引擎中输入关键词,第一页搜索结果中得到50个数据文档,这50个数据文档都没有缓存,那么可以将这50个数据文档按照文档号予以排序,并将排好序的数据文档从其他存储单元置入缓存,以便于下次从搜索引擎中输入相同关键词时,直接从缓存中返回数据,提高实时搜索的效率。
步骤S204,如果缓存中存在目标数据(即所要搜索的数据),则进一步判断,目标数据对应的文档的排序字段是否被更改,如果没有被更改,则进入步骤S205,否则,进入步骤S206。
步骤S205,直接取得缓存的目标数据,返回。
步骤S206,如果目标数据对应的文档的排序字段被更改,如文档的标识号被更改,则对该文档按照排序字段重新排列到合适位置,并将其重新写回缓存,并将重新排列的文档中的数据返回。
步骤S104,将从相应索引段中所搜索的目标数据,和/或存储单元中所搜索的目标数据予以合并,返回合并的数据。
具体地,一个完整的搜索结果由多个段的结果合并而成,取得各个段的搜索结果后,作合并,返回到客户端。通常,收到索引的搜索请求后,解析该搜索请求并判断所要搜索的目标段,并串行搜索各个目标段,最后,将搜索的结果排好序后,发送到客户端。例如,索引分为两段予以缓存,一段中生成的是一天以内的数据,另一段中生成的是一天之前的数据,而用户需要搜索50篇有关租房的文档信息,那么,从第一段所缓存的数据中返回50篇文档,同样,从第二段所缓存的数据中也可以返回50篇文档,共返回100篇文档。当从这100篇文档中返回用户所需的50篇有关租房的文档信息时,可以根据这些文档与用户需求的相关度,如按照用户租房的要求对这些文档进行打分,然后根据分数的高低予以排序,将前50篇文档返回给用户。
如上文,部分数据在缓存中没有存储时,则从这些非缓存的存储单元中搜索到目标数据时,将缓存中所搜索的目标数据和这些非缓存的目标数据一起合并,然后返回给用户。同样地,所要搜索的数据在缓存中都没有存储时,则从其他存储单元中搜索数据,并将所搜索的目标数据予以合并,返回给用户。
上文中,每个索引段的缓存空间根据索引段的生成时间可以不同,但是,每个索引段进行更新时,可以有相同的更新方法,例如,更新时,判断每个索引段的缓存空间是否写满,若写满,则覆盖部分已写入的数据;若未写满,则写入所更新的数据。
当然,本领域的技术人员应该清楚,本发明的索引结构的建立可以采用其他通用的方法,只要最终将索引按照时间予以分段,都属于本方案的内容,为了简明起见,在此不再赘述。
本发明所提供的实时搜索的方法具有以下优点:
1)通过采用缓存的方案,提高了实时搜索的效率;
2)针对不同时间段的数据,采用不同的缓存方案,提高了实时搜索的灵活性。
以上所揭露的仅为本发明的一种较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

Claims (9)

1.一种实时搜索的方法,该方法包括以下步骤:
将数据文档按照时间顺序生成多段索引;
从各索引段中提取部分数据,予以缓存,其中,根据各段的生成时间确定提取该段进行缓存的数据量;
搜索数据时,先从缓存中搜索各索引段的文档,缓存中存在目标数据时,则返回目标数据;否则,从其他存储单元中搜索数据;
将从缓存所搜索的目标数据和/或从存储单元中所搜索的目标数据予以合并,返回合并的数据。
2.根据权利要求1所述的方法,其特征在于,所述的按照时间顺序将数据文档生成多段索引的步骤还包括:对各个索引段打上其生成时间的时间标记。
3.根据权利要求1或2所述的方法,其特征在于,所述根据各段的生成时间确定提取该段进行缓存的数据量的步骤还包括:从新生成的段中所提取的用于缓存的数据量比之前生成的段所用于缓存的数据量大。
4.根据权利要求1或2所述的方法,其特征在于,所述根据各段的生成时间确定提取该段进行缓存的数据量的步骤还包括:对于最新的索引段,将用户所需要搜索的与该索引段相关的所有数据予以缓存。
5.根据权利要求1或2所述的方法,其特征在于,所述返回合并的数据的步骤还包括:
缓存中存在所要搜索的数据,则返回目标数据;
缓存中不存在所要搜索的数据,则从其他存储单元中搜索数据,并将搜索的目标数据所对应的文档,按照标识予以排序并置入缓存。
6.根据权利要求1或2所述的方法,其特征在于,所述缓存中存在所要搜索的数据则返回目标数据的步骤还包括以下步骤:
目标数据对应的文档的排序字段被更改,则对该文档按照排序字段重新排列到合适位置,并将其重新写回缓存,并将重新排列的文档中的数据返回;
否则,直接取得缓存的目标数据。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述索引由多个段组成,每个段由多个文档生成,其中,每个文档在段中具有唯一的标识。
8.根据权利要求1或2所述的方法,其特征在于,所述被缓存的索引段中包括搜索请求和相应的搜索结果。
9.根据权利要求8所述的方法,其特征在于,将预定时间内超过预定次数的搜索请求的搜索结果进行缓存,当再次接收到相同搜索请求时直接调出已缓存的搜索结果。
CN201210217946.4A 2012-06-27 2012-06-27 一种实时搜索的方法 Active CN102737133B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210217946.4A CN102737133B (zh) 2012-06-27 2012-06-27 一种实时搜索的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210217946.4A CN102737133B (zh) 2012-06-27 2012-06-27 一种实时搜索的方法

Publications (2)

Publication Number Publication Date
CN102737133A true CN102737133A (zh) 2012-10-17
CN102737133B CN102737133B (zh) 2016-02-17

Family

ID=46992634

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210217946.4A Active CN102737133B (zh) 2012-06-27 2012-06-27 一种实时搜索的方法

Country Status (1)

Country Link
CN (1) CN102737133B (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102890722A (zh) * 2012-10-25 2013-01-23 国家电网公司 应用于时序历史数据库的索引方法
CN103198108A (zh) * 2013-03-27 2013-07-10 新浪网技术(中国)有限公司 一种索引数据更新方法、检索服务器及系统
CN103778129A (zh) * 2012-10-18 2014-05-07 腾讯科技(深圳)有限公司 一种博客数据搜索方法及系统
CN104216901A (zh) * 2013-05-31 2014-12-17 北京新媒传信科技有限公司 信息搜索的方法和系统
CN104516920A (zh) * 2013-10-08 2015-04-15 北大方正集团有限公司 数据查询方法和数据查询系统
WO2016008389A1 (zh) * 2014-07-16 2016-01-21 谢成火 一种快速翻阅历史信息的方法和时间段信息查询系统
CN108804477A (zh) * 2017-05-05 2018-11-13 广东神马搜索科技有限公司 动态截断方法、装置及服务器
CN111966887A (zh) * 2019-05-20 2020-11-20 北京沃东天骏信息技术有限公司 动态缓存方法及装置、电子设备、存储介质
CN112334891A (zh) * 2018-06-22 2021-02-05 易享信息技术有限公司 用于搜索服务器的集中式存储
CN112907218A (zh) * 2021-03-23 2021-06-04 广联达科技股份有限公司 一种工程报表生成方法、装置及电子设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101127048A (zh) * 2007-08-20 2008-02-20 华为技术有限公司 一种查询结果处理方法与装置
WO2008092400A1 (fr) * 2007-01-25 2008-08-07 Beijing Sogou Technology Development Co., Ltd. Procédé simplifié de recherche d'informations, système correspondant et système de saisie de caractères
CN101641674A (zh) * 2006-10-05 2010-02-03 斯普兰克公司 时间序列搜索引擎

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101641674A (zh) * 2006-10-05 2010-02-03 斯普兰克公司 时间序列搜索引擎
WO2008092400A1 (fr) * 2007-01-25 2008-08-07 Beijing Sogou Technology Development Co., Ltd. Procédé simplifié de recherche d'informations, système correspondant et système de saisie de caractères
CN101127048A (zh) * 2007-08-20 2008-02-20 华为技术有限公司 一种查询结果处理方法与装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
吕冬冬等: "一种基于分段的网络流媒体代理缓存策略", 《《南京邮电大学学报(自然科学版)》》, vol. 31, no. 1, 28 February 2011 (2011-02-28), pages 78 - 79 *

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103778129A (zh) * 2012-10-18 2014-05-07 腾讯科技(深圳)有限公司 一种博客数据搜索方法及系统
CN103778129B (zh) * 2012-10-18 2019-02-05 腾讯科技(深圳)有限公司 一种博客数据搜索方法及系统
CN102890722B (zh) * 2012-10-25 2015-03-11 国家电网公司 应用于时序历史数据库的索引方法
CN102890722A (zh) * 2012-10-25 2013-01-23 国家电网公司 应用于时序历史数据库的索引方法
CN103198108B (zh) * 2013-03-27 2016-08-10 新浪网技术(中国)有限公司 一种索引数据更新方法、检索服务器及系统
CN103198108A (zh) * 2013-03-27 2013-07-10 新浪网技术(中国)有限公司 一种索引数据更新方法、检索服务器及系统
CN104216901B (zh) * 2013-05-31 2017-12-05 北京新媒传信科技有限公司 信息搜索的方法和系统
CN104216901A (zh) * 2013-05-31 2014-12-17 北京新媒传信科技有限公司 信息搜索的方法和系统
CN104516920A (zh) * 2013-10-08 2015-04-15 北大方正集团有限公司 数据查询方法和数据查询系统
CN104516920B (zh) * 2013-10-08 2018-06-05 北大方正集团有限公司 数据查询方法和数据查询系统
WO2016008389A1 (zh) * 2014-07-16 2016-01-21 谢成火 一种快速翻阅历史信息的方法和时间段信息查询系统
CN108804477A (zh) * 2017-05-05 2018-11-13 广东神马搜索科技有限公司 动态截断方法、装置及服务器
CN112334891A (zh) * 2018-06-22 2021-02-05 易享信息技术有限公司 用于搜索服务器的集中式存储
CN112334891B (zh) * 2018-06-22 2023-10-17 硕动力公司 用于搜索服务器的集中式存储
CN111966887A (zh) * 2019-05-20 2020-11-20 北京沃东天骏信息技术有限公司 动态缓存方法及装置、电子设备、存储介质
CN111966887B (zh) * 2019-05-20 2024-05-17 北京沃东天骏信息技术有限公司 动态缓存方法及装置、电子设备、存储介质
CN112907218A (zh) * 2021-03-23 2021-06-04 广联达科技股份有限公司 一种工程报表生成方法、装置及电子设备

Also Published As

Publication number Publication date
CN102737133B (zh) 2016-02-17

Similar Documents

Publication Publication Date Title
CN102737133A (zh) 一种实时搜索的方法
CN101604324B (zh) 一种基于元搜索的视频服务网站的搜索方法及系统
US8140495B2 (en) Asynchronous database index maintenance
US20040205044A1 (en) Method for storing inverted index, method for on-line updating the same and inverted index mechanism
CN103020281B (zh) 一种基于空间数据数值索引的数据存储与检索方法
CN105224546B (zh) 数据存储和查询方法及设备
CN107103032B (zh) 一种分布式环境下避免全局排序的海量数据分页查询方法
CN102819586B (zh) 一种基于高速缓存的url分类方法和设备
CN101510209A (zh) 实现实时检索的方法、系统和服务器
CN101488147B (zh) 用于信息搜索的设备、系统和方法
US11567681B2 (en) Method and system for synchronizing requests related to key-value storage having different portions
CN102737123B (zh) 一种多维数据分布方法
CN102103603A (zh) 用户行为数据分析方法和装置
KR20090025535A (ko) 쿼리별 검색 컬렉션 생성 방법 및 시스템
CN104516979A (zh) 一种基于二次检索的数据查询方法及系统
CN105117502A (zh) 一种基于大数据的检索方法
US11748357B2 (en) Method and system for searching a key-value storage
JP2017535860A (ja) マルチメディア内容の提供方法および装置
CN104111898A (zh) 基于多维数据相似性的混合存储系统及数据管理方法
CN104516920A (zh) 数据查询方法和数据查询系统
CN103353901A (zh) 基于Hadoop分布式文件系统的表数据的有序管理方法以及系统
CN111191111A (zh) 内容推荐方法、装置及存储介质
CN108647266A (zh) 一种异构数据快速分布存储、交互方法
CN101963993B (zh) 一种数据库单表记录快速查找的方法
JPH11265393A (ja) 情報検索装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant