精通Neo4j
上QQ阅读APP看书,第一时间看更新

3.6 全文索引

全文索引是基于节点和关系的字符串型属性建立的索引,可以用来对属性值进行匹配查询,由Apache Lucene索引和搜索库提供支持。B树索引只能对字符串进行精确匹配或前缀匹配,而全文索引可以对被索引的字符串值进行分词(tokenize),因此可以匹配字符串中任何位置的元素(term)。字符串如何被分词和分解为元素,取决于全文索引配置的分析器。例如,瑞典语分析器可以对瑞典语文本进行分词和提取主干(stem),避免索引中包含瑞典语的停用词。

全文索引的特性包括:

● 支持对节点和关系的索引。

● 支持自定义分析器,可以不使用Lucene自带的分析器。

● 可以使用Lucene语言进行查询。

● 可以给查询的每个结果打分。

● 节点和关系增删改后索引自动更新。

● 使用当前数据自动填充新创建的索引。

● 可以用一致性检查器进行检查,检查存在问题时可以重建索引。

● 只能通过属性的值来索引节点和关系。

● 可以在单个索引中支持任意数量的文档。

● 创建、删除和更新都是事务性操作,并在集群中自动复制。

● 可以通过Cypher程序访问。

● 可以配置为最终一致性模式。该模式下索引的更新操作由后台线程执行。这一功能可以解决提交过程中Lucene写入慢的问题,从而消除Neo4j写入性能的主要瓶颈。

与b树索引相比,全文索引有以下优势:

● 支持多个标签。

● 支持多个关系类型。

● 支持多个属性。这一点类似于复合索引,但有一个重要区别:复合索引的对象必须具有被索引标签和全部被索引属性,但全文索引的对象只要具有至少一个被索引标签或关系类型,和至少一个被索引属性即可。