<p></p><div class="toc"><h3>NEO4J中文分词全文索引自动更新解决方案</h3><ul><li><a href="#_2" rel="nofollow">一、样例数据</a></li><li><a href="#_5" rel="nofollow">二、英文与中文全文索引差别</a></li><ul><li><a href="#1NEO4J_6" rel="nofollow">1、创建NEO4J默认索引</a></li><li><a href="#2_17" rel="nofollow">2、删除索引</a></li><li><a href="#3_21" rel="nofollow">3、创建支持中文分词的索引</a></li></ul><li><a href="#APOC_32" rel="nofollow">三、APOC自带英文全文索引过程(可自动更新索引)</a></li><ul><li><a href="#1_33" rel="nofollow">1、添加全文索引</a></li><li><a href="#2_37" rel="nofollow">2、新增节点与属性</a></li><li><a href="#3_41" rel="nofollow">3、检索</a></li></ul><li><a href="#_54" rel="nofollow">四、自定义中文分词全文索引插件(自动更新索引不成功)</a></li><ul><li><a href="#1_56" rel="nofollow">1、添加全文索引</a></li><li><a href="#2_60" rel="nofollow">2、新增节点与属性</a></li><li><a href="#3_64" rel="nofollow">3、检索</a></li></ul><li><a href="#_73" rel="nofollow">五、标签交叉检索</a></li><li><a href="#_88" rel="nofollow">六、自定义中文分词插件(自动更新索引失败单独更新节点索引)</a></li><ul><li><a href="#1_90" rel="nofollow">1、添加全文索引</a></li><li><a href="#2_95" rel="nofollow">2、新增节点与属性并更新全文索引</a></li><li><a href="#32_99" rel="nofollow">3、将2新增的节点或者更新的属性增加到索引</a></li><li><a href="#4_103" rel="nofollow">4、检索</a></li></ul><li><a href="#_108" rel="nofollow">七、解决事务提交超时</a></li></ul></div><p></p>

使用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;

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

原文地址:https://www.wandouip.com/t5i226621/

NEO4J中文分词全文索引自动更新解决方案的更多相关文章

  1. 彻底关闭windows10自动更新解决方案

    window10的自动更新其实和window7和window8都有所不同,有些人认为只要停止了windows updates 就可以了,不会再开始了! 但是往往不是这样的,因为微软在window up ...

  2. Win 7 Windows Update无法自动更新解决方案

    最近发现系统很长时间没有自动更新过了,手动更新后,提示返回错误码WindowsUpdate_8024402F.网络上搜索到的解决方法大多是删除更新临时目录,重启WINDOWS UPDATE服务,然而试 ...

  3. Android App自动更新解决方案(DownloadManager)

    一开始,我们先向服务器请求数据获取版本 public ObservableField<VersionBean> appVersion = new ObservableField<&g ...

  4. TNTSearch 轻量级全文索引 + 中文分词

    TNTSearch 轻量级全文索引+中文分词 选用 TNTSearch 的原因:轻,方便移植,不需要额外安装服务,能减少后期维护的工作量.搜索的效果也还不错,可以满足大多数项目场景,如果对性能和精准度 ...

  5. Windows10 1809版本Windows自动更新服务无法禁用问题解决方案

    症状 Windows Update服务已经在服务管理器中禁用,但是莫名奇妙的会被自动设置为手动,并会自动下载补丁.原因 微软加强了系统更新服务的保护措施,导致按照原有的禁用服务方法,能够随时被恢复.解 ...

  6. 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  7. Elasticsearch是一个分布式可扩展的实时搜索和分析引擎,elasticsearch安装配置及中文分词

    http://fuxiaopang.gitbooks.io/learnelasticsearch/content/  (中文) 在Elasticsearch中,文档术语一种类型(type),各种各样的 ...

  8. mysql中文进行全文索引支持问题

    先来看看对一个字段做全文索引,作为一个数据库系统需要做哪些工作? 假设一个文章表里面包含几个字段:文章id.文章作者.文章标题.文章内容 比如,我们对文章内容这个字段artilce_content建立 ...

  9. ElasticSearch7.3学习(十五)----中文分词器(IK Analyzer)及自定义词库

    1. 中文分词器 1.1 默认分词器 先来看看ElasticSearch中默认的standard 分词器,对英文比较友好,但是对于中文来说就是按照字符拆分,不是那么友好. GET /_analyze ...

随机推荐

  1. 二:unittest框架配合selenium之xpath定位

    刚开始学习selenium自动化测试时,犯了一个不该犯的错误,偷懒,使用火狐浏览器中的扩展FIREBUG,FIREPATH来辅助定位. 虽然用的定位方法大多数是使用XPATH方法,但是是工具定位出来的 ...

  2. Robotframework之下拉列表select

    下拉框控件很常见啊,主要说一下robotframework中怎么玩转下拉框,第一点要注意的就是,别看到下拉的就用select控件去操作,因为很多下拉列表用的不一定就是select控件.robotfra ...

  3. Linux 线程Demo

    #include <stdio.h> #include <pthread.h> struct char_print_params { char character; int c ...

  4. Java-框架-Dubbo:Dubbo

    ylbtech-Java-框架-Dubbo:Dubbo Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成 ...

  5. SPSS聚类分析:K均值聚类分析

    SPSS聚类分析:K均值聚类分析 一.概念:(分析-分类-K均值聚类) 1.此过程使用可以处理大量个案的算法,根据选定的特征尝试对相对均一的个案组进行标识.不过,该算法要求您指定聚类的个数.如果知道, ...

  6. 前端(二十二)—— vue组件:局部组件、全局组件、父组件数据传到子组件、子组件数据传到父组件、父子组件实现todoList

    Vue组件 一.组件介绍 每一个组件都是一个vue实例 每个组件均具有自身的模板template,根组件的模板就是挂载点,根组件也可以显式书写模板,会替换掉挂载点 每个组件模板只能拥有一个根标签 子组 ...

  7. js实现禁止页面拖拽图片

    document.ondragstart = function() {        return false;};

  8. firewall防火墙配置

    获取所有zone firewall-cmd --list-all-zones 重启服务 firewall-cmd --complete-reload 名词解释 在具体介绍zone之前学生先给大家介绍几 ...

  9. BBS论坛 后台管理

    七.后台管理 后台管理页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  10. zdump - 时区输出器

    SYNOPSIS 总览 zdump [ -v ] [ -c cutoffyear ] [ zonename ... ] 描述 Zdump 对命令行中的每一个 zonename 输出其当前时间. 提供了 ...