ElasticSearch+Neo4j+ElasticSearch Head实现全文检索应用

这篇具有很好参考价值的文章主要介绍了ElasticSearch+Neo4j+ElasticSearch Head实现全文检索应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文主要阐述利用ES、知识图谱(Neo4j)实现全文检索,并利用ElasticSearch Head开源项目进行全文检索测试。实验在图谱的帮助下如何开展全文检索功能,为后续的复杂查询或语义检索做准备。
一、运行环境
1.Linux 7.5
2.JDK 1.8.0_191
3.ElasticSearch 7.17.4,注意用ES自带的jdk,因为这个版本的ES需要JDK11以上,配置见第二条内容。
4.Neo4j 3.5.28
5.Elasticsearch-head: GitHub - mobz/elasticsearch-head: A web front end for an elastic search cluster
二、ES和Neo4j的安装配置:
详细的安装配置本文略去,主要给出关键配置信息,可以参考其他安装配置,如大家需要,再咨询我。
1. 配置ES--java11环境:打开ES的bin下面elasticsearch和elasticsearch-cli文件,在最前面添加如下信息,将默认jdk调整为es自带的jdk,这样不改变整个系统的java环境,只是在运行ES时用指定的java环境。
#配置自己的jdk11
export JAVA_HOME=/home/es/elasticsearch-7.17.4/jdk
export PATH=$JAVA_HOME/bin:$PATH
2.配置ES--在config目录,打开 elasticsearch.yml,配置信息如下
node.master:true 或者 node.name: node-1
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
#允许各种http请求
http.cors.allow-methods: OPTIONS,HEAD,GET,POST,PUT,DELETE
http.cors.allow-headers: Content-Type,Accept,Authorization,x-requested-with
#集群节点存储空间大小限制解决的配置选项
cluster.routing.allocation.disk.threshold_enabled: false
cluster.initial_master_nodes: ["node-1"]
#配置X-Pack,401问题解决的配置选项
xpack.security.enabled: false
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
3.启动ElasticSearch
前面配置完毕后,基本可以启动ES了,进入bin目录,运行 elasticsearch 或者 elasticsearch -d,后者表示后台启动,如果出现如下错误,请安装要求配置。
错误1 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
root 用户:vi /etc/sysctl.conf 添加 vm.max_map_count=262144:保存退出之后,执行命令 sysctl -p
错误2max number of threads is too low
root 用户:vi /etc/security/limits.conf 在文件最后添加
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
错误3max number of threads [1024] for user [elasticsearch] is too low, increase to at least [4096],该错误对应的配置文件,默认配置好了, 不需要单独配置。
vi /etc/security/limits.d/90-nproc.conf 改为4096
修改完记得退出es用户,再执行启动命令。
cp -r /home/hadoop/app/elasticsearch-7.17.4 /home/es/elasticsearch-7.17.4
4.查看ES运行情况(浏览器)
http://192.168.107.128:9200/ 查看可用情况
http://192.168.107.128:9200/_cat/nodes?v 查看节点情况
http://192.168.107.128:9200/_cat/health?v 查看健康状态
http://192.168.107.128:9200/_cat/indices?v 查看所有索引
5.配置访问ES的用户密码,主要用于配置ElasticSearch-head和Kibana客户端访问ES的用户密码。
执行命令:elasticsearch-setup-passwords interactive
user:elastic/kibana_system/其他用户等
pwd:eses456
其他用户的密码同上。
6.安装plugin
安装IK分词器:elasticsearch-plugin install analysis-icu
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.4/elasticsearch-analysis-ik-7.17.4.zip
查看安装的plugin elasticsearch-plugin list
删除pluginelasticsearch-plugin remove analysis-icu
7.配置用户自定义配置词典,进入es的config下,进入analysis-ik,打开IKAnalyzer.cfg.xml,配置自定义词典信息如下:
<entry key="ext_dict">userdefine.dic</entry>
userdefine.dic配置如下信息,重启ES后就会自动整体分词。
美团
地层
储层
8.配置Neo4j- elasticsearch
下载neo4j-elasticsearch-3.5.6.jar,放在neo4j的plugin目录下。
配置neo4j,neo4j.conf
elasticsearch.host_name= http://192.168.107.128:9200
elasticsearch.index_spec=result:result( name),resultsummary:resultSummary(abstract,name),resultkeys:resultKeys(name)  #这里的第一个result表示节点标签,第二个result表示ES中的result索引名称,name表示将result节点中name属性值。 多个索引关联见下一行的示例(中间逗号分隔)
9.Elasticsearch-head配置:下载完成后进入根目录,启动前端项目后直接运行(npm run start)。
elasticsearch-head主要是验证在Neo4j插入新的节点和关系时,数据同时同步到ES中,并测试是否提供全文检索等。
问题: elasticsearch- head无法连接ES的问题及解决方案
打开es配置文件,看看是否有以下几行配置信息。即可解决。
#允许跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
#允许各种http请求
http.cors.allow-methods: OPTIONS,HEAD,GET,POST,PUT,DELETE
http.cors.allow-headers: Content-Type,Accept,Authorization,x-requested-with
#401问题解决的配置选项
xpack.security.enabled: false
#集群节点存储空间大小限制解决的配置选项
cluster.routing.allocation.disk.threshold_enabled: false
三、全文检索应用实践
(一)直接在控制台下,运行测试Neo4j或Neo4j和ES配置是否正常,具体如下:
查询(neo4j):
curl -X POST http: / /192.168.107.128:7474/db /data/cypher -H 'authorization: Basic bmVvNGo6bmVvbmVv' -H 'content-type: application/json' -d '{ "query" : "MATCH (n:result{name:'张三') Return n" }'
查询(es):
curl -X GET 'http:// 192.168.107.128 :9200/result/_search?pretty='
创建新节点(neo4j+es):
curl -X POST http: / /192.168.107.128:7474/db /data/cypher -H 'authorization: Basic bmVvNGo6bmVvbmVv' -H 'content-type: application/json' -d '{ "query" : "CREATE (n:result { name: { name1 }}) RETURN n" , "params" : { "name1" : "测试20221218"  } }'
(二)利用apoc调用ES(官方- ElasticSearch - APOC Extended Documentation)
1. 查看es状态:  call  apoc . es . stats ( "192.168.107.128" )
2.查询检索:
CALL apoc.es.getRaw("192.168.107.128",'resultsummary/_search?',null) YIELD value 
UNWIND value.hits.hits as hits
RETURN hits['_source'] LIMIT 100
3.查询,关键词过滤-dsl query
CALL apoc.es.getRaw("192.168.107.128","resultsummary/_search?",{
  query: {match_phrase:{name: "处理"}}
})
YIELD value 
UNWIND value.hits.hits as hits
RETURN hits['_source'] LIMIT 100
4.查找resultsummary索引中name包含处理的节点,并返回符合查询的title列表
CALL apoc.es.getRaw("192.168.107.128","resultsummary/_search?",{
  query: {match_phrase:{name: "处理"}}
})
YIELD value 
UNWIND value.hits.hits as hits
UNWIND hits['_source']['name'] as name_list RETURN name_list
5.查找 knowledgegraph索引中title包含"python"的节点,并返回符合查询的title列表,并查询与包含"python"的result节点相连的一度ACTED_IN边
CALL apoc.es.getRaw("192.168.107.128","knowledgegraph/_search?",{
  query: {match_phrase:{title: "python"}}
})
YIELD value 
UNWIND value.hits.hits as hits
with collect(hits['_source']['title']) as title_list 
MATCH p=(m:result)-[r:ACTED_IN]-(n) where m.name in title_list RETURN p
四、Neo4j自带的全文检索插件应用。
1.查看分词器: call  db . index . fulltext . listAvailableAnalyzers
2.创建索引: CALL  db . index . fulltext . createNodeIndex ( "summaryFullIndex" ,[ "resultSummary" ],[ "name" ],  {  analyzer :  "cjk" })
3.使用索引:
查找包含储层评价的报告
CALL db.index.fulltext.queryNodes("summaryFullIndex","储层评价") YIELD node, score
RETURN node, score
查找即包含综合,又做过核磁或密度的数据
CALL db.index.fulltext.queryNodes("summaryFullIndex","综合") YIELD node
where node.name contains "合成"  
where node.name contains "密度" 
return node  
order by node.name  
skip 0
limit 10
4.删除全文索引
call db.index.fulltext.drop("summaryFullIndex")

文章来源地址https://www.toymoban.com/news/detail-485750.html

到了这里,关于ElasticSearch+Neo4j+ElasticSearch Head实现全文检索应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Neo4j:入门基础(二)~ 数据导入Neo4J RDF导入neo4j数据库

    neo4j导入数据的方式有以下几种: Cypher create 语句,为每一条数据写一个create Cypher load csv 语句,将数据转成CSV格式,通过LOAD CSV读取数据。 neo4j-admin import导入 官方提供的Java API - BatchInserter 大牛编写的 batch-import 工具 neo4j-apoc load.csv + apoc.load.relationship 针对实际业务场景,定制

    2023年04月24日
    浏览(40)
  • Neo4j是什么,为什么需要Neo4j,Neo4j的优势和应用场景

    当我们处理非常复杂的数据时,传统的关系型数据库可能会无法胜任。而在这种情况下,一个基于图形数据模型的数据库,如Neo4j,可能会是更好的选择。Neo4j是一个高性能、面向对象的图形数据库,它是为存储和查询大规模图形数据而设计的。 在Neo4j中,数据被组织成一系列

    2024年02月08日
    浏览(34)
  • 【neo4j】neo4j的安装与使用

    https://www.oracle.com/java/technologies/downloads/ 按照步骤安装即可 配置环境变量 在系统变量中添加 path变量中添加 https://neo4j.com/deployment-center/ 下载后,在指定位置解压缩 与java相同,也需要设置环境变量。 终端输入neo4j.bat console 成功

    2024年02月03日
    浏览(41)
  • Neo4j:入门基础(二)~ 数据导入Neo4J

    neo4j导入数据的方式有以下几种: Cypher create 语句,为每一条数据写一个create Cypher load csv 语句,将数据转成CSV格式,通过LOAD CSV读取数据。 neo4j-admin import导入 官方提供的Java API - BatchInserter 大牛编写的 batch-import 工具 neo4j-apoc load.csv + apoc.load.relationship 针对实际业务场景,定制

    2024年02月09日
    浏览(33)
  • spring boot集成neo4j实现简单的知识图谱

    随着社交、电商、金融、零售、物联网等行业的快速发展,现实社会织起了了一张庞大而复杂的关系网,传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随数据量呈几何级数增长,急需一种支持海量复杂数据关系运算的数据库,图数据库应运而生。 世界

    2024年03月12日
    浏览(46)
  • 【neo4j忘记密码】neo4j忘记密码的处理方法

    小伙伴们大家好,我是javaPope,因为最近想要构建知识图谱,突然想起自己还安装过neo4j,当我满怀欣喜启动以后却发现,忘记密码了,呜呜呜,然后,废话不多说,怎们直接上教程: 找到neo4j.config文件,路径如下(以自己为准): D:neo4jconfneo4j.conf 将 dbms.security.auth_enable

    2024年02月11日
    浏览(31)
  • vue+neo4j(neo4j desktop安装和使用)

    官网下载安装 官方下载链接:https://neo4j.com/download/ 下载后会跳转到 Activation Key 页面,已经自动生成好密钥,复制后,粘贴到 Neo4j Deskto 的 Software Keys 输入框内即可完成激活 官方安装使用手册 https://neo4j.com/developer/neo4j-desktop/ 软件主界面,默认附带一个 Example Project ,自带一个

    2024年02月14日
    浏览(28)
  • Neo4j | 保姆级教学之如何清空neo4j数据库

    要清空neo4j数据库,需要进行以下操作: 停止Neo4j服务器,关闭Neo4j的所有连接。 找到 Neo4j 数据库存储的目录,通常是 data/databases/ 。 删除该目录中的所有文件和子目录。 请注意,这将不可逆地删除数据库的所有内容,包括节点、关系和属性等数据。在执行这个操作之前,请

    2024年02月06日
    浏览(32)
  • neo4j网页无法打开,启动一会儿后自动关闭,查看neo4j status显示Neo4j is not running.

    公司停电,服务器未能幸免,发现无法访问此网站,http://0.0.0.0:7474 在此之前都还好着 发现neo4j启动后几秒自动挂掉 查看neo4j的报错日志 得到以下内容(缩减版) 错误信息 “User limit of inotify watches reached” 表明系统达到了 Linux 内核对 inotify 监控事件的限制。inotify 是 Linux 内

    2024年04月11日
    浏览(32)
  • Java实现neo4j数据库连接及增删改查

    天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 可参考文章: neo4j数据库的介绍及基础语法 neo4j数据库语法实例演示 在增删改查之前我

    2024年02月14日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包