全文检索基本概念

  • 搜索

    搜索这个行为是用户与搜索引擎的一次交互过程,用户需要找一些数据,他提供给搜索引擎一些约束条件.搜索引擎通过约束条件抽取一些结果给用户
  • 搜索引擎

    搜索引擎存在的目的是存储,查找和获取数据.Neo4j用的搜索引擎是Lucene
  • 文档

    在搜索软件中,文档是一等公民.存储,搜索,显示都是以文档为核心.文档简单可以理解为数据库中的一行数据,但是这行数据包括了field name.
  • 倒排索引

    倒排索引是搜索引擎中核心数据结构.简而言之,它将所有文档变成像是一本书后面词汇表的东西. 通过这种数据结构能够快速的从一个单词找到文档
  • Lucene搜索语法
Query implementation Purpose Example
TermQuery 单词匹配 neo4j
PhraseQuery 短语匹配 "graph database"
RangeQuery 范围匹配 [A TO Z] {A TO Z}
WildcardQuery 正则匹配 g*p?, d??abase
PrefixQuery 前缀匹配 algo*
FuzzyQuery 后缀匹配 cipher~
BooleanQuery 查询条件聚合 graph AND "shortest path"

环境准备

  • 容器启动Neo4j

    docker run -p 17687:7687 -p 17474:7474 --name=neo4j-test neo4j:3.5.3
  • 创建数据, 使用测试数据.

    :play northwind-graph

Neo4j全文检索

Neo4j全文检索有以下特性,不过用下来最重要的我感觉是创建索引的语句实际上只是创建于给命名控件. Neo4j从2.2.x时代开始就默认开启node_auto_indexing=true. 倒排索引在数据插入时候已经创建了. 创建索引/删除索引代价是非常小的

  • 支持关系与节点的索引
  • 支持常用analyzers扩展
  • 可以使用lucene query语句
  • 可以返回查询结果评分
  • 对索引自动更新
  • 单索引文档数量不限

索引创建与删除

建立两个索引, 一个是Product的该标签的索引. 另外一个全数据库全文检索的索引

call db.index.fulltext.createNodeIndex("all",['Product', 'Category', 'Supplier'],['reorderLevel', 'unitsInStock', 'unitPrice', 'supplierID', 'productID', 'discontinued', 'quantityPerUnit', 'categoryID', 'unitsOnOrder', 'productName', 'description', 'categoryName', 'picture', 'country', 'address', 'contactTitle', 'city', 'phone', 'contactName', 'postalCode', 'companyName', 'fax', 'region', 'homePage'])

call db.index.fulltext.createNodeIndex("product",['Product'],['reorderLevel', 'unitsInStock', 'unitPrice', 'supplierID', 'productID', 'quantityPerUnit', 'discontinued', 'productName', 'unitsOnOrder', 'categoryID'])

删除索引

call db.index.fulltext.drop("all")

可以通过函数获取所有标签和属性

call db.propertyKeys
call db.labels

查询

这里面的查询非常简单.只要记住一个语句就能应付大多数场景

call db.index.fulltext.queryNodes(
'all', //这里索引名
'Av' // lucene查询语句
) yield node
where node.address contains "12" // where语句
return node
order by node.address // order skip limit
skip 0
limit 1

Neo4j 全文检索的更多相关文章

  1. NEO4J全文检索架构

    NEO4J全文检索架构 一.有大量存量数据(亿级以上)(并长期有增量数据进入) 二.无大量存量数据或者少量存量数据(或全部为增量数据) 三.架构方案选择优先级 以下方案,是根据实践总结的基于NEO4J ...

  2. Neo4j全文检索

    全文检索基本概念 搜索 搜索这个行为是用户与搜索引擎的一次交互过程,用户需要找一些数据,他提供给搜索引擎一些约束条件.搜索引擎通过约束条件抽取一些结果给用户 搜索引擎 搜索引擎存在的目的是存储,查找和 ...

  3. Neo4j 两种索引Legacy Index与Schema Index区别

    Legacy Indexes 在Neo4j 2.0版本之前,Legacy index被称作indexes.这个索引是通过外部图存储在外的Lucene实现,允许“节点”和“联系”以key:value键值 ...

  4. Neo4j之坑

    10个月前,我开始用neo4j做cmdb. 初体验下去neo4j很美好. 但是一年中发现一些问题, 仅仅是个人的体验.经供参考 查询语言 如果接触过Neo4j,都会为Cypher的简单和易用感觉到惊叹 ...

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

    NEO4J中文分词全文索引自动更新解决方案 一.样例数据 二.英文与中文全文索引差别 1.创建NEO4J默认索引 2.删除索引 3.创建支持中文分词的索引 三.APOC自带英文全文索引过程(可自动更新 ...

  6. 基于NEO4J的高级检索功能

    基于NEO4J的高级检索 一.需求 二.创建索引 1.索引自动更新配置 2.执行带有索引自动更新配置的过程 三.查询索引 1.LUCENE查询语法 2.实现高级检索的核心:LUCENE QUERY语句 ...

  7. Neo4j 3.5发布,在索引方面大幅增强

    Neo4j 3.5版本已正式发布,这也是Neo4j宣布企业版闭源以来发布的第一个版本. 这个版本在性能.资源使用率以及安全方面均有增强,我们可以先快速浏览一下这个版本: 全文索引 基于Index的快速 ...

  8. NEO4J亿级数据全文索引构建优化

    NEO4J亿级数据全文索引构建优化 一.数据量规模(亿级) 二.构建索引的方式 三.构建索引发生的异常 四.全文索引代码优化 1.Java.lang.OutOfMemoryError 2.访问数据库时 ...

  9. Neo4j中实现自定义中文全文索引

    数据库检索效率时,一般首要优化途径是从索引入手,然后根据需求再考虑更复杂的负载均衡.读写分离和分布式水平/垂直分库/表等手段:索引通过信息冗余来提高检索效率,其以空间换时间并会降低数据写入的效率:因此 ...

随机推荐

  1. 20190402-display展现、float浮动

    目录 1.display展现 dispaly:"none | block | inline | inline-block | list-item | run-in(主流浏览器不支持) | t ...

  2. 怎么让DIV在另一个DIV里靠底部显示?

    可以使用css的position属性的绝对定位. 拓展知识 position 属性指定了元素的定位类型. position 属性的五个值: static:HTML元素的默认值,即没有定位,元素出现在正 ...

  3. HTML 练习实现遮罩层

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 供应链管理为什么要上企业自主可控的免费开源ERP Odoo

    引言 今天的很多企业,无论是制造业,还是商贸行业,如果说没有针对供应链管理的信息系统,那可能是真的冤枉他们了:采购.仓存.销售.存货核算这些模块,早早的买来,早早的用上了,但也早早的被下了结论:食之无 ...

  5. iOS----------Mac维修预约-如何找到电脑维修单

    先打开苹果官网,找到技术支持 2.选择维修选项 3.查看维修状态 4.显示维修时间订单

  6. Git 学习总结

    概况 CVS 及 SVN 都是集中式的版本控制系统,而 Git 是分布式版本控制系统. 集中式版本控制系统最大的毛病就是必须联网才能工作: 分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是 ...

  7. CDN工作机制和负载均衡

    定义:  CDN 即内容分布网络,(Content Delivery Netwrok) ,是构筑在现有Internet上的一种先进的流量分配网络,其目的是通过在现有的Internet中增加一层新的网络 ...

  8. navicate for mysql之-Can't connect to MySQL server on 'localhost'(10038)

    1. 卸载navicate for mysql 会留下很多坑,主要是卸载不干净,卸载之后重新安装会出现之前的库内容和库链接还存在的问题,这种情况的出现是卸载残余. 解决办法,清理注册表(网上很多教程但 ...

  9. July 03rd. 2018, Week 27th. Tuesday

    I don't know anything with certainty, but seeing the stars makes me dream. 我不知道世间有什么事是确定不变的,但只要一看到星空 ...

  10. Java线程组(ThreadGroup)使用

    JDK 对线程组类注释: A thread group represents a set of threads. In addition, a thread group can also includ ...