NEO4J中文分词全文索引自动更新解决方案

2024-02-25 06:38

本文主要是介绍NEO4J中文分词全文索引自动更新解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NEO4J中文分词全文索引自动更新解决方案

  • 一、样例数据
  • 二、英文与中文全文索引差别
    • 1、创建NEO4J默认索引
    • 2、删除索引
    • 3、创建支持中文分词的索引
  • 三、APOC自带英文全文索引过程(可自动更新索引)
    • 1、添加全文索引
    • 2、新增节点与属性
    • 3、检索
  • 四、自定义中文分词全文索引插件(自动更新索引不成功)
    • 1、添加全文索引
    • 2、新增节点与属性
    • 3、检索
  • 五、标签交叉检索
  • 六、自定义中文分词插件(自动更新索引失败单独更新节点索引)
    • 1、添加全文索引
    • 2、新增节点与属性并更新全文索引
    • 3、将2新增的节点或者更新的属性增加到索引
    • 4、检索
  • 七、解决事务提交超时
  • 八、备注

使用NEO4J INDEX API实现自动更新失败,转换了一种思路解决这个问题(在更新节点或者新建节点的时候同步更新到对应的全文索引中。)

一、样例数据

样例数据格式参考
在这里插入图片描述

二、英文与中文全文索引差别

1、创建NEO4J默认索引

CALL apoc.index.addAllNodes('Loc', {Loc:["description","cause","year"]})
// 以下检索不成功:
CALL apoc.index.search('Loc', 'Loc.description:中文~') YIELD node RETURN node
CALL apoc.index.search('Loc', 'Loc.description:中文*') YIELD node RETURN node
CALL apoc.index.search('Loc', 'Loc.description:测试~') YIELD node RETURN node
CALL apoc.index.search('Loc', 'Loc.description:测试中文~') YIELD node RETURN node

2、删除索引

CALL apoc.index.remove('Loc')

3、创建支持中文分词的索引

CALL zdr.index.addChineseFulltextIndex('Loc', ["description","cause","year"], 'Loc') YIELD message RETURN message
// 以下检索成功:
CALL apoc.index.search('Loc', 'description:中文~') YIELD node RETURN node
CALL apoc.index.search('Loc', 'description:中文*') YIELD node RETURN node
CALL apoc.index.search('Loc', 'description:测试~') YIELD node RETURN node
CALL apoc.index.search('Loc', 'description:测试中文~') YIELD node RETURN node

三、APOC自带英文全文索引过程(可自动更新索引)

1、添加全文索引

CALL apoc.index.addAllNodes('Loc', {Loc:["description","cause","year"]},{autoUpdate:true})

2、新增节点与属性

CREATE (n:Loc {name:'V'})  SET n.description='测试中文分词,复联终章快上映了好激动,据说知识图谱与人工智能技术应用到了那部电影!',n.cause='测试英文分词,Mobile World Congress, the world’s largest gathering for the mobile industry, ' RETURN n

3、检索

可以支持索引的自动更新,但是对于中文的检索不友好,例如以下测试:

// 检索失败:
CALL apoc.index.search('Loc', 'Loc.cause:测试英文分词~') YIELD node RETURN node
CALL apoc.index.search('Loc', 'Loc.description:测试中文分词~') YIELD node RETURN node
// 检索成功:
CALL apoc.index.search('Loc', 'Loc.cause:测试英文分词*') YIELD node RETURN node
CALL apoc.index.search('Loc', 'Loc.description:测试中文分词*') YIELD node RETURN node

四、自定义中文分词全文索引插件(自动更新索引不成功)

addChineseFulltextAutoIndex过程为添加支持中文的全文索引过程,创建全文索引可以成功,但是对于节点的新增属性的更新,不支持自动更新。

1、添加全文索引

CALL zdr.index.addChineseFulltextAutoIndex('IKAnalyzer',["description","cause","year"],'Loc',{autoUpdate:'true'}) YIELD message RETURN message

2、新增节点与属性

CREATE (n:Loc {name:'V'})  SET n.description='测试中文分词,复联终章快上映了好激动,据说知识图谱与人工智能技术应用到了那部电影!',n.cause='测试英文分词,Mobile World Congress, the world’s largest gathering for the mobile industry, ' RETURN n

3、检索

添加全文检索之后就可以检索:

CALL zdr.index.chineseFulltextIndexSearch('IKAnalyzer', 'description:吖啶基氨基甲烷磺酰甲氧基苯胺', 100) YIELD node RETURN node

重新索引之后才能检索到:

CALL zdr.index.chineseFulltextIndexSearch('IKAnalyzer', 'description:测试~', 100) YIELD node RETURN node

五、标签交叉检索

addChineseFulltextAutoIndex/addChineseFulltextIndex支持多标签的同时检索,在建立索引时使用相同的索引名即可。
标签:Loc

CALL zdr.index.addChineseFulltextAutoIndex('Loc',["description","cause","name"],'Loc',{autoUpdate:'true'}) YIELD message RETURN message

标签:LocProvince’

CALL zdr.index.addChineseFulltextAutoIndex('Loc',["description","cause","name"],'LocProvince',{autoUpdate:'true'}) YIELD message RETURN message

检索节点:

CALL apoc.index.search('Loc', 'name:p~') YIELD node RETURN node

在这里插入图片描述

六、自定义中文分词插件(自动更新索引失败单独更新节点索引)

为了支持单节点的索引更新,开发以下过程。(三中所描述的自动更新方案失败,转为在更新节点或者新建节点的时候同步更新到对应的全文索引中。)

1、添加全文索引

CALL apoc.index.remove('Loc')
CALL zdr.index.addChineseFulltextIndex('Loc',["description","cause","year"],'Loc') YIELD message RETURN message

2、新增节点与属性并更新全文索引

CREATE (n:Loc {name:'V'})  SET n.description='测试中文分词,复联终章快上映了好激动,据说知识图谱与人工智能技术应用到了那部电影!',n.cause='测试英文分词,Mobile World Congress, the world’s largest gathering for the mobile industry, ' RETURN n

3、将2新增的节点或者更新的属性增加到索引

MATCH (n) WHERE n.name='V' WITH n CALL zdr.index.addNodeChineseFulltextIndex(n, ['description']) RETURN *

4、检索

CALL zdr.index.chineseFulltextIndexSearch('Loc', 'description:测试中文~') YIELD node RETURN node

在这里插入图片描述

七、解决事务提交超时

如果配置了事务提交超时设置,在构建索引时取消。

#********************************************************************
### Neo4j transcation timeout
###******************************************************************
#dbms.transaction.timeout=180s

使用后台脚本执行构建索引程序:

# index.sh
#!/usr/bin/env bash
nohup /neo4j-community-3.4.9/bin/neo4j-shell -file build.cql >>indexGraph.log 2>&1 &
// build.cql
CALL zdr.index.addChineseFulltextIndex('IKAnalyzer', ['description','fullname','name','lnkurl'], 'LinkedinID') YIELD message RETURN message;

八、备注

如果使用APOC自带的过程,设置自动更新配置之后即可,但是会影响性能。

apoc.autoIndex.enabled=true
// 构建示例
CALL apoc.index.addAllNodes('Loc', {Loc:["description","cause","year"]},{autoUpdate:true})

上述所有涉及到的NEO4J自定义过程参考

这篇关于NEO4J中文分词全文索引自动更新解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/744665

相关文章

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

kkFileView在线预览office的常见问题以及解决方案

《kkFileView在线预览office的常见问题以及解决方案》kkFileView在线预览Office常见问题包括base64编码配置、Office组件安装、乱码处理及水印添加,解决方案涉及版本适... 目录kkFileView在线预览office的常见问题1.base642.提示找不到OFFICE组件

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

WinForm跨线程访问UI及UI卡死的解决方案

《WinForm跨线程访问UI及UI卡死的解决方案》在WinForm开发过程中,跨线程访问UI控件和界面卡死是常见的技术难题,由于Windows窗体应用程序的UI控件默认只能在主线程(UI线程)上操作... 目录前言正文案例1:直接线程操作(无UI访问)案例2:BeginInvoke访问UI(错误用法)案例

Python实现中文文本处理与分析程序的示例详解

《Python实现中文文本处理与分析程序的示例详解》在当今信息爆炸的时代,文本数据的处理与分析成为了数据科学领域的重要课题,本文将使用Python开发一款基于Python的中文文本处理与分析程序,希望... 目录一、程序概述二、主要功能解析2.1 文件操作2.2 基础分析2.3 高级分析2.4 可视化2.5

Spring Security常见问题及解决方案

《SpringSecurity常见问题及解决方案》SpringSecurity是Spring生态的安全框架,提供认证、授权及攻击防护,支持JWT、OAuth2集成,适用于保护Spring应用,需配置... 目录Spring Security 简介Spring Security 核心概念1. ​Securit

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核