创建、显示和删除索引
CREATE INDEX
创建索引使用CREATE … INDEX …
命令完成。如果在创建命令中未指定索引类型,则将创建范围索引。
最佳实践是在创建索引时为其命名。如果未显式命名索引,则会获得自动生成的名称。
索引名称在索引和约束之间必须唯一。 |
CREATE INDEX
命令可以选择性地幂等。这意味着其默认行为是在尝试创建相同的索引两次时抛出错误。如果将IF NOT EXISTS
附加到命令,则不会抛出错误,并且如果已存在具有相同名称或相同模式和索引类型的索引,则不会发生任何事情。如果存在冲突的约束,例如具有相同名称或模式和后备索引类型的约束,它仍可能会抛出错误。从 Neo4j 5.17 开始,将返回一个信息通知,显示阻止创建的现有索引。
可以使用OPTIONS
子句指定索引提供程序和配置设置。[1]
但是,并非所有索引都具有可用的配置设置或多个提供程序。在这些情况下,无需指定任何内容,并且应从查询中省略OPTIONS
映射。
创建索引需要CREATE INDEX 权限。 |
新创建的索引不会立即可用,而是在后台创建。
创建范围索引
可以使用CREATE INDEX
命令创建范围索引。请注意,索引名称必须唯一。
范围索引只有一个可用的索引提供程序,range-1.0
,并且没有支持的索引配置。
支持的谓词
范围索引支持大多数类型的谓词
谓词 | 语法 |
---|---|
相等性检查。 |
|
列表成员资格检查。 |
|
存在性检查。 |
|
范围搜索。 |
|
前缀搜索。 |
|
示例
为节点创建单属性范围索引
以下语句将在所有标记为Person
且具有surname
属性的节点上创建一个名为范围索引。
CREATE INDEX node_range_index_name FOR (n:Person) ON (n.surname)
为关系创建单属性范围索引
以下语句将在所有具有关系类型KNOWS
和属性since
的关系上创建一个名为范围索引。
CREATE INDEX rel_range_index_name FOR ()-[r:KNOWS]-() ON (r.since)
为节点创建复合范围索引
在多个属性上的范围索引也称为复合索引。对于节点范围索引,只有具有指定标签并包含所有指定属性的节点才会添加到索引中。
以下语句将在所有标记为Person
且同时具有age
和country
属性的节点上创建一个名为复合范围索引。
CREATE INDEX composite_range_node_index_name FOR (n:Person) ON (n.age, n.country)
为关系创建复合范围索引
在多个属性上的范围索引也称为复合索引。对于关系范围索引,只有具有指定类型并包含所有指定属性的关系才会添加到索引中。
以下语句将在所有标记为PURCHASED
且同时具有date
和amount
属性的关系上创建一个名为复合范围索引。
CREATE INDEX composite_range_rel_index_name FOR ()-[r:PURCHASED]-() ON (r.date, r.amount)
使用参数创建范围索引
此功能在 Neo4j 5.16 中引入。
以下语句将在所有具有 Person
标签和 firstname
属性的节点上创建一个命名范围索引,并使用参数指定索引名称。
{
"name": "range_index_param"
}
CREATE INDEX $name FOR (n:Person) ON (n.firstname)
仅当范围索引不存在时创建它
如果不确定索引是否存在,请添加 IF NOT EXISTS
以确保其存在。
IF NOT EXISTS
创建范围索引CREATE INDEX node_range_index_name IF NOT EXISTS
FOR (n:Person) ON (n.surname)
如果已经存在具有相同模式和类型、相同名称或两者兼有的索引,则不会创建该索引。从 Neo4j 5.17 开始,将返回信息通知。
`CREATE RANGE INDEX node_range_index_name IF NOT EXISTS FOR (e:Person) ON (e.surname)` has no effect.
`RANGE INDEX node_range_index_name FOR (e:Person) ON (e.surname)` already exists.
创建文本索引
可以使用 CREATE TEXT INDEX
命令创建文本索引。请注意,索引名称必须唯一。
文本索引没有支持的索引配置,并且从 Neo4j 5.1 开始,它们有两个可用的索引提供程序,text-2.0
(默认)和 text-1.0
(已弃用)。
支持的谓词
文本索引仅解决对 STRING
值进行操作的谓词。
以下仅对 STRING
值进行操作的谓词始终可以通过文本索引解决
-
STARTS WITH
-
ENDS WITH
-
CONTAINS
但是,只有在已知属性与 STRING
进行比较时,才会使用其他谓词
-
n.prop = "string"
-
n.prop IN ["a", "b", "c"]
这意味着文本索引无法解决例如 a.prop = b.prop
,除非该属性上也存在属性类型约束。
文本索引支持以下谓词
谓词 | 语法 |
---|---|
相等性检查。 |
|
列表成员资格检查。 |
|
前缀搜索。 |
|
后缀搜索。 |
|
子字符串搜索。 |
|
从 Neo4j 5.11 开始,可以通过使用属性类型约束来扩展上述谓词集。有关更多信息,请参阅有关索引兼容性和属性类型约束的部分。
文本索引仅用于精确查询匹配。要执行近似匹配(包括例如变体和错字),以及计算 STRING 值之间的相似度分数,请改用语义全文索引。 |
示例
创建节点文本索引
以下语句将在所有标记为 Person
且具有 nickname
STRING
属性的节点上创建命名文本索引。
CREATE TEXT INDEX node_text_index_nickname FOR (n:Person) ON (n.nickname)
创建关系文本索引
以下语句将在所有具有关系类型 KNOWS
和 STRING
属性 interest
的关系上创建命名文本索引。
CREATE TEXT INDEX rel_text_index_name FOR ()-[r:KNOWS]-() ON (r.interest)
使用参数创建文本索引
此功能在 Neo4j 5.16 中引入。
以下语句将在所有具有 Person
标签和 favoriteColor
STRING
属性的节点上创建命名文本索引,并使用参数指定索引名称。
{
"name": "text_index_param"
}
CREATE TEXT INDEX $name FOR (n:Person) ON (n.favoriteColor)
仅当文本索引不存在时创建它
如果不确定索引是否存在,请添加 IF NOT EXISTS
以确保其存在。
以下语句将尝试在所有标记为 Person
且具有 nickname
STRING
属性的节点上创建命名文本索引。
IF NOT EXISTS
创建文本索引CREATE TEXT INDEX node_index_name IF NOT EXISTS FOR (n:Person) ON (n.nickname)
请注意,如果已经存在具有相同模式和类型、相同名称或两者兼有的索引,则不会创建该索引。从 Neo4j 5.17 开始,将返回信息通知。
`CREATE TEXT INDEX node_index_name IF NOT EXISTS FOR (e:Person) ON (e.nickname)` has no effect.
`TEXT INDEX node_text_index_nickname FOR (e:Person) ON (e.nickname)` already exists.
指定索引提供程序创建文本索引
要使用特定索引提供程序创建文本索引,请使用 OPTIONS
子句。索引提供程序的有效值为 text-2.0
和 text-1.0
(已弃用)。默认提供程序为 text-2.0
。
CREATE TEXT INDEX text_index_with_indexprovider FOR ()-[r:TYPE]-() ON (r.prop1)
OPTIONS {indexProvider: 'text-2.0'}
文本索引没有支持的索引配置。
创建点索引
可以使用 CREATE POINT INDEX
命令创建点索引。请注意,索引名称必须唯一。
点索引具有支持的索引配置,但只有一个可用的索引提供程序,point-1.0
。
支持的谓词
点索引仅解决对 POINT
值进行操作的谓词。
点索引支持以下谓词
谓词 | 语法 |
---|---|
属性点值。 |
|
在边界框内。 |
|
距离。 |
|
从 Neo4j 5.11 开始,可以通过使用属性类型约束来扩展上述谓词集。有关更多信息,请参阅索引兼容性和属性类型约束。
要了解有关 Cypher 支持的空间数据类型的更多信息,请参阅有关空间值的页面。 |
示例
创建节点点索引
以下语句将在所有标记为 Person
且具有 sublocation
POINT
属性的节点上创建命名点索引。
CREATE POINT INDEX node_point_index_name FOR (n:Person) ON (n.sublocation)
创建关系点索引
以下语句将在所有具有关系类型 STREET
和 POINT
属性 intersection
的关系上创建命名点索引。
CREATE POINT INDEX rel_point_index_name FOR ()-[r:STREET]-() ON (r.intersection)
使用参数创建点索引
此功能在 Neo4j 5.16 中引入。
以下语句将在所有具有关系类型 STREET
和 POINT
属性 coordinate
的关系上创建命名点索引,并使用参数指定索引名称。
{
"name": "point_index_param"
}
CREATE POINT INDEX $name FOR ()-[r:STREET]-() ON (r.coordinate)
仅当点索引不存在时创建它
如果不确定索引是否存在,请添加 IF NOT EXISTS
以确保其存在。
IF NOT EXISTS
创建点索引CREATE POINT INDEX node_point_index IF NOT EXISTS
FOR (n:Person) ON (n.sublocation)
请注意,如果已经存在具有相同模式和类型、相同名称或两者兼有的索引,则不会创建该索引。从 Neo4j 5.17 开始,将返回信息通知。
`CREATE POINT INDEX node_point_index IF NOT EXISTS FOR (e:Person) ON (e.sublocation)` has no effect.
`POINT INDEX node_point_index_name FOR (e:Person) ON (e.sublocation)` already exists.
指定索引配置创建点索引
要使用特定索引配置创建点索引,请在 OPTIONS
子句中使用 indexConfig
设置。有效的配置设置是
-
spatial.cartesian.min
(默认值:[-1000000.0
,-1000000.0
]) -
spatial.cartesian.max
(默认值:[1000000.0
,1000000.0
]) -
spatial.cartesian-3d.min
(默认值:[-1000000.0
,-1000000.0
,-1000000.0
]) -
spatial.cartesian-3d.max
(默认值:[1000000.0
,1000000.0
,1000000.0`
]) -
spatial.wgs-84.min
(默认值:[-180.0
,-90.0
]) -
spatial.wgs-84.max
(默认值:[-180.0
,-90.0
]) -
spatial.wgs-84-3d.min
(默认值:[-180.0
,-90.0
,-1000000.0
]) -
spatial.wgs-84-3d.max
(默认值:[180.0
,90.0
,1000000.0
])
以下语句将创建一个指定 spatial.cartesian.min
和 spatial.cartesian.max
设置的点索引。
CREATE POINT INDEX point_index_with_config
FOR (n:Label) ON (n.prop2)
OPTIONS {
indexConfig: {
`spatial.cartesian.min`: [-100.0, -100.0],
`spatial.cartesian.max`: [100.0, 100.0]
}
}
请注意,本例中未指定的 wgs-84 和 3D cartesian 设置将设置为其各自的默认值。
创建令牌查找索引
在创建 Neo4j 数据库时,默认情况下会创建两个令牌查找索引(一个节点标签查找索引和一个关系类型查找索引)。同时只能存在一个节点标签和一个关系类型查找索引。
如果已删除令牌查找索引,则可以使用 CREATE LOOKUP INDEX
命令重新创建它。请注意,索引名称必须唯一。
令牌查找索引只有一个可用的索引提供程序,token-lookup-1.0
,并且没有支持的索引配置。
支持的谓词
令牌查找索引默认存在,并且仅解决节点标签和关系类型谓词
谓词 | 语法(示例) |
---|---|
节点标签谓词。 |
|
关系类型谓词。 |
|
令牌查找索引可以提高 Cypher 查询的性能以及其他索引的填充速度。删除这些索引可能会导致严重的性能下降。 |
示例
创建节点标签查找索引
以下语句将在所有具有一个或多个标签的节点上创建命名节点标签查找索引
CREATE LOOKUP INDEX node_label_lookup_index FOR (n) ON EACH labels(n)
一次只能存在一个节点标签查找索引。 |
创建关系类型查找索引
以下语句将在所有具有任何关系类型的关系上创建命名关系类型查找索引。
CREATE LOOKUP INDEX rel_type_lookup_index FOR ()-[r]-() ON EACH type(r)
一次只能存在一个关系类型查找索引。 |
仅当令牌查找索引不存在时创建它
如果不确定索引是否存在,请添加 IF NOT EXISTS
以确保其存在。
IF NOT EXISTS
创建节点标签查找索引CREATE LOOKUP INDEX node_label_lookup IF NOT EXISTS FOR (n) ON EACH labels(n)
如果已经存在具有相同模式和类型、相同名称或两者兼有的索引,则不会创建该索引。从 Neo4j 5.17 开始,将返回信息通知。
`CREATE LOOKUP INDEX node_label_lookup IF NOT EXISTS FOR (e) ON EACH labels(e)` has no effect.
`LOOKUP INDEX node_label_lookup_index FOR (e) ON EACH labels(e)` already exists.
存在冲突索引或约束时创建索引
无法创建已存在的索引
在具有 Book
标签的节点上为属性 title
创建索引,而该索引已存在。
CREATE INDEX bookTitleIndex FOR (book:Book) ON (book.title)
在这种情况下,无法创建索引,因为它已经存在。
There already exists an index (:Book {title}).
在创建索引时使用 IF NOT EXISTS
将不会导致错误,也不会创建新索引。
无法创建与已存在的索引同名的索引
在具有 Book
标签的节点上为属性 numberOfPages
创建命名索引,而具有给定名称的索引已存在。现有索引的索引类型无关紧要。
CREATE INDEX indexOnBooks FOR (book:Book) ON (book.numberOfPages)
在这种情况下,无法创建索引,因为已经存在具有给定名称的索引。
There already exists an index called 'indexOnBooks'.
在创建索引时使用 IF NOT EXISTS
将不会导致错误,也不会创建新索引。
存在约束时无法创建索引
在具有 Book
标签的节点上为属性 isbn
创建索引,而该模式上已存在索引支持的约束。这仅与范围索引相关。
CREATE INDEX bookIsbnIndex FOR (book:Book) ON (book.isbn)
在这种情况下,无法创建索引,因为在该标签和属性组合上已存在索引支持的约束。
There is a uniqueness constraint on (:Book {isbn}), so an index is already created that matches this.
无法创建与已存在的约束同名的索引
在具有 Book
标签的节点上为属性 numberOfPages
创建命名索引,而具有给定名称的约束已存在。
CREATE INDEX bookRecommendations FOR (book:Book) ON (book.recommendations)
在这种情况下,无法创建索引,因为已经存在具有给定名称的约束。
There already exists a constraint called 'bookRecommendations'.
SHOW INDEXES
可以使用 SHOW INDEXES
列出索引。
列出索引需要SHOW INDEX 权限。 |
示例
列出所有索引
要列出所有具有默认输出列的索引,可以使用 SHOW INDEXES
命令。如果需要所有列,请使用 SHOW INDEXES YIELD *
。
SHOW INDEXES
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | id | name | state | populationPercent | type | entityType | labelsOrTypes | properties | indexProvider | owningConstraint | lastRead | readCount | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 3 | "composite_range_node_index_name" | "ONLINE" | 100.0 | "RANGE" | "NODE" | ["Person"] | ["age", "country"] | "range-1.0" | NULL | NULL | 0 | | 4 | "composite_range_rel_index_name" | "ONLINE" | 100.0 | "RANGE" | "RELATIONSHIP" | ["PURCHASED"] | ["date", "amount"] | "range-1.0" | NULL | 2023-03-13T11:41:44.537Z | 1 | | 16 | "example_index" | "ONLINE" | 100.0 | "RANGE" | "NODE" | ["Book"] | ["title"] | "range-1.0" | NULL | 2023-04-10T15:41:44.537Z | 2 | | 17 | "indexOnBooks" | "ONLINE" | 100.0 | "TEXT" | "NODE" | ["Label1"] | ["prop1"] | "text-2.0" | NULL | NULL | 0 | | 14 | "node_label_lookup_index" | "ONLINE" | 100.0 | "LOOKUP" | "NODE" | NULL | NULL | "token-lookup-1.0" | NULL | 2023-04-13T08:11:15.537Z | 10 | | 10 | "node_point_index_name" | "ONLINE" | 100.0 | "POINT" | "NODE" | ["Person"] | ["sublocation"] | "point-1.0" | NULL | 2023-04-05T16:21:44.692Z | 1 | | 1 | "node_range_index_name" | "ONLINE" | 100.0 | "RANGE" | "NODE" | ["Person"] | ["surname"] | "range-1.0" | NULL | 2022-12-30T02:01:44.537Z | 6 | | 6 | "node_text_index_nickname" | "ONLINE" | 100.0 | "TEXT" | "NODE" | ["Person"] | ["nickname"] | "text-2.0" | NULL | 2023-04-13T11:41:44.537Z | 2 | | 12 | "point_index_param" | "ONLINE" | 100.0 | "POINT" | "RELATIONSHIP" | ["STREET"] | ["coordinate"] | "point-1.0" | NULL | NULL | 0 | | 13 | "point_index_with_config" | "ONLINE" | 100.0 | "POINT" | "NODE" | ["Label"] | ["prop2"] | "point-1.0" | NULL | NULL | 0 | | 5 | "range_index_param" | "ONLINE" | 100.0 | "RANGE" | "NODE" | ["Person"] | ["firstname"] | "range-1.0" | NULL | 2023-12-13T08:23:53.338Z | 2 | | 11 | "rel_point_index_name" | "ONLINE" | 100.0 | "POINT" | "RELATIONSHIP" | ["STREET"] | ["intersection"] | "point-1.0" | NULL | 2023-03-03T13:37:42.537Z | 2 | | 2 | "rel_range_index_name" | "ONLINE" | 100.0 | "RANGE" | "RELATIONSHIP" | ["KNOWS"] | ["since"] | "range-1.0" | NULL | 2023-04-12T10:41:44.692Z | 5 | | 7 | "rel_text_index_name" | "ONLINE" | 100.0 | "TEXT" | "RELATIONSHIP" | ["KNOWS"] | ["interest"] | "text-2.0" | NULL | 2023-04-01T10:40:44.537Z | 3 | | 15 | "rel_type_lookup_index" | "ONLINE" | 100.0 | "LOOKUP" | "RELATIONSHIP" | NULL | NULL | "token-lookup-1.0" | NULL | 2023-04-12T21:41:44.537Z | 7 | | 8 | "text_index_param" | "ONLINE" | 100.0 | "TEXT" | "NODE" | ["Person"] | ["favoriteColor"] | "text-2.0" | NULL | NULL | 0 | | 9 | "text_index_with_indexprovider" | "ONLINE" | 100.0 | "TEXT" | "RELATIONSHIP" | ["TYPE"] | ["prop1"] | "text-2.0" | NULL | NULL | 0 | | 18 | "uniqueBookIsbn" | "ONLINE" | 100.0 | "RANGE" | "NODE" | ["Book"] | ["isbn"] | "range-1.0" | "uniqueBookIsbn" | 2023-04-13T11:41:44.692Z | 6 | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 18 rows
SHOW INDEXES
的输出列之一是索引的名称。这可用于使用DROP INDEX
命令删除索引。
列出特定列
可以使用 YIELD
子句仅返回可用索引的特定列
SHOW INDEXES
YIELD name, type, indexProvider AS provider, options, createStatement
RETURN name, type, provider, options.indexConfig AS config, createStatement
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | name | type | provider | config | createStatement | +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | "composite_range_node_index_name" | "RANGE" | "range-1.0" | {} | "CREATE RANGE INDEX `composite_range_node_index_name` FOR (n:`Person`) ON (n.`age`, n.`country`)" | | "composite_range_rel_index_name" | "RANGE" | "range-1.0" | {} | "CREATE RANGE INDEX `composite_range_rel_index_name` FOR ()-[r:`PURCHASED`]-() ON (r.`date`, r.`amount`)" | | "example_index" | "RANGE" | "range-1.0" | {} | "CREATE RANGE INDEX `example_index` FOR (n:`Book`) ON (n.`title`)" | | "indexOnBooks" | "TEXT" | "text-2.0" | {} | "CREATE TEXT INDEX `indexOnBooks` FOR (n:`Label1`) ON (n.`prop1`) OPTIONS {indexConfig: {}, indexProvider: 'text-2.0'}" | | "index_343aff4e" | "LOOKUP" | "token-lookup-1.0" | {} | "CREATE LOOKUP INDEX `index_343aff4e` FOR (n) ON EACH labels(n)" | | "index_f7700477" | "LOOKUP" | "token-lookup-1.0" | {} | "CREATE LOOKUP INDEX `index_f7700477` FOR ()-[r]-() ON EACH type(r)" | | "node_point_index_name" | "POINT" | "point-1.0" | {`spatial.cartesian.min`: [-1000000.0, -1000000.0], `spatial.wgs-84.min`: [-180.0, -90.0], `spatial.wgs-84.max`: [180.0, 90.0], `spatial.cartesian.max`: [1000000.0, 1000000.0], `spatial.wgs-84-3d.max`: [180.0, 90.0, 1000000.0], `spatial.cartesian-3d.min`: [-1000000.0, -1000000.0, -1000000.0], `spatial.cartesian-3d.max`: [1000000.0, 1000000.0, 1000000.0], `spatial.wgs-84-3d.min`: [-180.0, -90.0, -1000000.0]} | "CREATE POINT INDEX `node_point_index_name` FOR (n:`Person`) ON (n.`sublocation`) OPTIONS {indexConfig: {`spatial.cartesian-3d.max`: [1000000.0, 1000000.0, 1000000.0],`spatial.cartesian-3d.min`: [-1000000.0, -1000000.0, -1000000.0],`spatial.cartesian.max`: [1000000.0, 1000000.0],`spatial.cartesian.min`: [-1000000.0, -1000000.0],`spatial.wgs-84-3d.max`: [180.0, 90.0, 1000000.0],`spatial.wgs-84-3d.min`: [-180.0, -90.0, -1000000.0],`spatial.wgs-84.max`: [180.0, 90.0],`spatial.wgs-84.min`: [-180.0, -90.0]}, indexProvider: 'point-1.0'}" | | "node_range_index" | "RANGE" | "range-1.0" | {} | "CREATE RANGE INDEX `node_range_index` FOR (n:`Person`) ON (n.`surname`)" | | "node_text_index_nickname" | "TEXT" | "text-2.0" | {} | "CREATE TEXT INDEX `node_text_index_nickname` FOR (n:`Person`) ON (n.`nickname`) OPTIONS {indexConfig: {}, indexProvider: 'text-2.0'}" | | "point_index_with_config" | "POINT" | "point-1.0" | {`spatial.cartesian.min`: [-100.0, -100.0], `spatial.wgs-84.min`: [-180.0, -90.0], `spatial.wgs-84.max`: [180.0, 90.0], `spatial.cartesian.max`: [100.0, 100.0], `spatial.wgs-84-3d.max`: [180.0, 90.0, 1000000.0], `spatial.cartesian-3d.min`: [-1000000.0, -1000000.0, -1000000.0], `spatial.cartesian-3d.max`: [1000000.0, 1000000.0, 1000000.0], `spatial.wgs-84-3d.min`: [-180.0, -90.0, -1000000.0]} | "CREATE POINT INDEX `point_index_with_config` FOR (n:`Label`) ON (n.`prop2`) OPTIONS {indexConfig: {`spatial.cartesian-3d.max`: [1000000.0, 1000000.0, 1000000.0],`spatial.cartesian-3d.min`: [-1000000.0, -1000000.0, -1000000.0],`spatial.cartesian.max`: [100.0, 100.0],`spatial.cartesian.min`: [-100.0, -100.0],`spatial.wgs-84-3d.max`: [180.0, 90.0, 1000000.0],`spatial.wgs-84-3d.min`: [-180.0, -90.0, -1000000.0],`spatial.wgs-84.max`: [180.0, 90.0],`spatial.wgs-84.min`: [-180.0, -90.0]}, indexProvider: 'point-1.0'}" | | "rel_point_index_name" | "POINT" | "point-1.0" | {`spatial.cartesian.min`: [-1000000.0, -1000000.0], `spatial.wgs-84.min`: [-180.0, -90.0], `spatial.wgs-84.max`: [180.0, 90.0], `spatial.cartesian.max`: [1000000.0, 1000000.0], `spatial.wgs-84-3d.max`: [180.0, 90.0, 1000000.0], `spatial.cartesian-3d.min`: [-1000000.0, -1000000.0, -1000000.0], `spatial.cartesian-3d.max`: [1000000.0, 1000000.0, 1000000.0], `spatial.wgs-84-3d.min`: [-180.0, -90.0, -1000000.0]} | "CREATE POINT INDEX `rel_point_index_name` FOR ()-[r:`STREET`]-() ON (r.`intersection`) OPTIONS {indexConfig: {`spatial.cartesian-3d.max`: [1000000.0, 1000000.0, 1000000.0],`spatial.cartesian-3d.min`: [-1000000.0, -1000000.0, -1000000.0],`spatial.cartesian.max`: [1000000.0, 1000000.0],`spatial.cartesian.min`: [-1000000.0, -1000000.0],`spatial.wgs-84-3d.max`: [180.0, 90.0, 1000000.0],`spatial.wgs-84-3d.min`: [-180.0, -90.0, -1000000.0],`spatial.wgs-84.max`: [180.0, 90.0],`spatial.wgs-84.min`: [-180.0, -90.0]}, indexProvider: 'point-1.0'}" | | "rel_range_index_name" | "RANGE" | "range-1.0" | {} | "CREATE RANGE INDEX `rel_range_index_name` FOR ()-[r:`KNOWS`]-() ON (r.`since`)" | | "rel_text_index_name" | "TEXT" | "text-2.0" | {} | "CREATE TEXT INDEX `rel_text_index_name` FOR ()-[r:`KNOWS`]-() ON (r.`interest`) OPTIONS {indexConfig: {}, indexProvider: 'text-2.0'}" | | "text_index_with_indexprovider" | "TEXT" | "text-2.0" | {} | "CREATE TEXT INDEX `text_index_with_indexprovider` FOR ()-[r:`TYPE`]-() ON (r.`prop1`) OPTIONS {indexConfig: {}, indexProvider: 'text-2.0'}" | | "uniqueBookIsbn" | "RANGE" | "range-1.0" | {} | "CREATE CONSTRAINT `uniqueBookIsbn` FOR (n:`Book`) REQUIRE (n.`isbn`) IS UNIQUE OPTIONS {indexConfig: {}, indexProvider: 'range-1.0'}" | +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
请注意,如果使用 RETURN
子句,则 YIELD
是必需的。但是,当使用 YIELD 子句时,RETURN
不是必需的。
使用过滤条件列出索引
SHOW INDEX
命令可以通过多种方式进行过滤。
例如,要仅显示范围索引,请使用 SHOW RANGE INDEXES
。
另一种更灵活的过滤输出方法是使用 WHERE
子句。例如,仅显示不属于约束的索引。
要仅显示不属于约束的范围索引,我们可以组合过滤版本。
SHOW RANGE INDEXES WHERE owningConstraint IS NULL
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | id | name | state | populationPercent | type | entityType | labelsOrTypes | properties | indexProvider | owningConstraint | lastRead | readCount | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 3 | "composite_range_node_index_name" | "ONLINE" | 100.0 | "RANGE" | "NODE" | ["Person"] | ["age", "country"] | "range-1.0" | NULL | NULL | 0 | | 4 | "composite_range_rel_index_name" | "ONLINE" | 100.0 | "RANGE" | "RELATIONSHIP" | ["PURCHASED"] | ["date", "amount"] | "range-1.0" | NULL | 2023-03-13T11:41:44.537Z | 1 | | 16 | "example_index" | "ONLINE" | 100.0 | "RANGE" | "NODE" | ["Book"] | ["title"] | "range-1.0" | NULL | 2023-04-10T15:41:44.537Z | 2 | | 1 | "node_range_index_name" | "ONLINE" | 100.0 | "RANGE" | "NODE" | ["Person"] | ["surname"] | "range-1.0" | NULL | 2022-12-30T02:01:44.537Z | 6 | | 5 | "range_index_param" | "ONLINE" | 100.0 | "RANGE" | "NODE" | ["Person"] | ["firstname"] | "range-1.0" | NULL | 2023-12-13T08:23:53.338Z | 2 | | 2 | "rel_range_index_name" | "ONLINE" | 100.0 | "RANGE" | "RELATIONSHIP" | ["KNOWS"] | ["since"] | "range-1.0" | NULL | 2023-04-12T10:41:44.692Z | 5 | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 6 rows
这将仅返回默认输出列。
要获取所有列,请使用
SHOW RANGE INDEXES YIELD * WHERE owningConstraint IS NULL
列出索引的结果列
下表包含了 SHOW INDEXES YIELD *
命令返回的所有列的完整信息。
列名 | 描述 | 类型 |
---|---|---|
|
索引的 ID。默认输出 |
|
|
索引名称(由用户显式设置或自动分配)。默认输出 |
|
|
索引的当前状态。默认输出 |
|
|
索引填充率的百分比。默认输出 |
|
|
此索引的 IndexType( |
|
|
此索引表示的实体类型(节点或关系)。默认输出 |
|
|
此索引的标签或关系类型。默认输出 |
|
|
此索引的属性。默认输出 |
|
|
此索引的索引提供程序。默认输出 |
|
|
索引关联的约束名称,如果索引未关联任何约束,则为 |
|
|
上次使用索引进行读取的时间。如果自 |
|
|
自 |
|
|
此索引的用量统计信息跟踪开始时间,如果未跟踪统计信息,则为 |
|
|
从 |
|
|
失败索引的错误描述。 |
|
|
用于创建索引的语句。 |
|
删除索引
可以使用 DROP INDEX index_name
命令以及索引名称删除(移除)索引。此命令可以删除任何类型的索引,但支持约束的索引除外。可以使用 SHOW INDEXES
命令 在输出列 name
中找到索引名称。
DROP INDEX index_name [IF EXISTS]
DROP INDEX
命令可以选择性地实现幂等性。这意味着其默认行为是在尝试删除同一索引两次时抛出错误。使用 IF EXISTS
,如果索引不存在,则不会抛出错误,也不会发生任何事情。从 Neo4j 5.17 开始,将返回一个信息通知,详细说明索引不存在。
删除索引需要 DROP INDEX 权限。 |
示例
删除索引
以下语句将尝试删除名为 example_index
的索引。
DROP INDEX example_index
如果存在具有该名称的索引,则将其删除,否则命令将失败。
使用参数删除索引
此功能在 Neo4j 5.16 中引入。
以下语句将尝试使用索引名称的参数删除名为 range_index_param
的索引。
{
"name": "range_index_param"
}
DROP INDEX $name
如果存在具有该名称的索引,则将其删除,否则命令将失败。
删除支持约束的索引失败
无法删除支持约束的索引。
DROP INDEX uniqueBookIsbn
Unable to drop index: Index belongs to constraint: `uniqueBookIsbn`
删除支持约束的索引也将删除支持的索引。有关更多信息,请参阅 按名称删除约束。
删除不存在的索引
如果不确定索引是否存在,并且希望在存在时删除它,但在不存在时不希望得到错误,请使用 IF EXISTS
。
以下语句将尝试删除名为 missing_index_name
的索引。
IF EXISTS
删除索引DROP INDEX missing_index_name IF EXISTS
如果存在具有该名称的索引,则将其删除,否则命令将不执行任何操作。从 Neo4j 5.17 开始,此外还会返回一个信息通知。
`DROP INDEX missing_index_name IF EXISTS` has no effect. `missing_index_name` does not exist.