概述
全文索引是索引的一种,适用于高效搜索string
或text
类型的属性,尤其适用于描述、评论或文章等长文本字段。
全文索引对文本进行分词,得到一系列词元(Token)。执行查询时,引擎将指定的关键词与这些词元进行匹配,而非匹配完整的原始文本,从而快速检索相关结果。全文索引支持精确和模糊匹配。
显示全文索引
获取当前图点的所有全文索引:
SHOW NODE FULLTEXT
获取当前图边的所有全文索引:
SHOW EDGE FULLTEXT
全文索引信息展示在表格_nodeFulltext
和_edgeFulltext
中。全文索引信息有:
字段 |
描述 |
---|---|
name |
全文索引名称 |
properties |
全文索引关联的属性 |
schema |
全文索引所属的schema |
status |
全文索引当前状态,包括DONE 和CREATING |
创建全文索引
使用语句CREATE FULLTEXT
创建一个全文索引。请注意,每个属性只能有一个全文索引。全文索引的创建以作业形式执行,稍后可使用SHOW JOB
确认全文索引是否创建成功。
为提升查询性能,嬴图中的系统属性已完成优化,具有内建效率。这些属性不支持创建全文索引。
<create full-text index statement> ::=
"CREATE FULLTEXT" <full-text index name> "ON" < "NODE" | "EDGE" > <schema name>
"(" <property name> ")"
详情
- 点的全文索引不可重名,边的全文索引也不可重名,但点的全文索引可以和边的全文索引重名。命名规范如下:
- 2~64个字符
- 以字母开头
- 允许的字符:字母(A-Z,a-z),数字(0-9),下划线(
_
)
为product
点的属性description
创建名为prodDesc
的全文索引:
CREATE FULLTEXT prodDesc on NODE product (description)
为review
边的属性content
创建名为review
的全文索引:
CREATE FULLTEXT review on EDGE review (content)
删除全文索引
使用语句DROP NODE FULLTEXT
或DROP EDGE FULLTEXT
删除一个点或边的全文索引。删除全文索引不会影响存储在分片中的属性值。
有全文索引的属性无法被删除。删除属性需要先删除它的全文索引。
删除点的全文索引prodDesc
:
DROP NODE FULLTEXT prodDesc
删除边的全边索引review
:
DROP EDGE FULLTEXT review
使用全文索引
在搜索条件中使用全文索引时,需遵循语法~<fulltextName> CONTAINS "<keyword1> <keyword2> ..."
:
- 波浪号
~
标识全文索引。 - 运算符
CONTAINS
检查全文索引中的词元是否包含所有指定关键词。 - 多个关键词用空格隔开。关键词含双引号时,需在引号前加反斜杠
\
来转义。
全文索引有两种搜索模式:
- 精准搜索:将关键词与词元完全匹配。
- 模糊搜索:应用在关键词以星号
*
结尾时,匹配以该关键词开头的词元。
获取点或边
使用全文索引prodDesc
查找含有graph和database词元的点:
MATCH (n WHERE ~prodDesc CONTAINS "graph database")
RETURN n
使用全文索引prodDesc
查找含有graph或database词元的点:
MATCH (n WHERE ~prodDesc CONTAINS "graph" OR ~prodDesc contains "database")
RETURN n
使用全文索引prodDesc
查找含有graph词元和以ult开头的词元的边:
MATCH ()-[e WHERE ~review CONTAINS "graph ult*"]-()
RETURN e
获取路径
注意:在路径模板中,全文索引仅能作用在第一个点模板上。
例如,GQL不支持以下查询:
MATCH p = ()-[]-(WHERE ~prodDesc CONTAINS "graph")
RETURN p
该查询可修改为:
MATCH (n WHERE ~prodDesc CONTAINS "graph")
MATCH p = ()-[]-(n)
RETURN p
以下查询同样不受支持:
MATCH p = ()-[WHERE ~review CONTAINS "ult*"]-()
RETURN p
该查询可修改为:
MATCH ()-[e WHERE ~review CONTAINS "ult*"]-()
MATCH p = ()-[e]-()
RETURN p