Neo4j和Elasticsearch
Neo4j和Elasticsearch
Neo4j和Elasticsearch是一种让人眼前一亮的组合,为什么需要把搜索和图表结合起来呢?它们是如何使用的呢?
在无处不在的互联网搜索引擎的推动下,全文搜索占据了主导地位。图形数据库在高度连接的领域上支持事务性和分析性。将两者结合在一起可以增强基于图的搜索结果,比如推荐特性或概念搜索,还可以将高级搜索结果作为图遍历的入口点。
基于推荐的多元化搜索
以下是案例是产品搜索,零售商(亚马逊,eBay,Target等)会经常用到。文本搜索和目录导航不仅仅是用户入口,还是主要的“销售人员”。与专业的搜索引擎相比,这里说的搜索“条目”集更加可控和规范。
对于搜索基础设施,需考虑到这些方面
多个数据源
产品和相关信息来自各种异构源,如产品供应商、信息提供者和销售商。
营销策略
创建新的促销、优惠和营销活动来推广网站或特定产品。所有这些都会影响结果提升。
个性化
为了提供更好、更个性化的用户体验,必须捕获、处理和使用:点击、购买、搜索查询等用户行为来个性化搜索结果。
供应商信息
产品供应商是最重要的,它们提供诸如数量、可用性、交付选项、时间以及产品细节等信息。
所有这些需求和数据源都会以几种方式影响搜索结果。为电商供应商设计搜索,需要一个完整的数据生态系统和相关数据流,用于管理他们的平台。
搜索的价值
搜索是用户和搜索引擎之间的对话
搜索在现代应用中无处不在。是海量数据中查找相关信息的最快方法。搜索引擎需要能够通过用户的搜索词提供相关结果,并进一步细化和过滤搜索。
Faceting(分组)
初始搜索结果通常过于宽泛,需要进行过滤或细化,例如,使用facets,Facets是从搜索结果派生的类别,用于缩小搜索范围。
每个facet代表结构化信息的属性,如类别,价格,颜色,位置等,并包含结果的数量。
搜索引擎内部组成
Indexing(索引)
处理文档使其可用于搜索。
User input(用户输入)
用户通过用户界面或API发送搜索请求。
Ranking(排名)
搜索引擎将输入与索引进行比较,并根据文档与查询的匹配程度对文档进行排序。
Results display(结果显示)
将结果返回给用户界面。
索引是具有某些共同特征的文档的集合,例如,客户数据、产品目录、订单数据等,用这些数据建立不同的索引。
它由一个名称标识(全小写),用于对包含的文档执行索引、搜索、更新和删除操作。文档是建立索引的基本信息单元,这些索引中存储了任意数量的JSON文档,文档的类型不同。
Indexing
分析和准备添加到索引的文档,以便在Lucene和其他相关结构中创建反向索引数据结构,从而在搜索期间快速检索结果,这些是文档分析的步骤:
Tokenization
将字符串分解为要索引的令牌
对标点、数字和其他符号的一致处理
处理复合词的多个标记以匹配可能的输入
Downcasing
对于不区分大小写的搜索,所有单词都转换为小写。
Stemming/stopword removal
去掉后缀、复数和共轭的单词
Synonym expansion
删除常用词
更新的搜索引擎会保留它们以获得更好的结果
通过同义词库解析同义词并添加到索引中
另外,同义词解析也可以在搜索词上进行
创建索引的示例
在Elasticsearch中,在索引创建过程中,可以指定:
索引的所有设置
碎片和副本的数量
自定义分析
定义文档和其包含的字段以及如何存储和索引的映射。要为customer的名称和描述字段(使用预定义的英文文本分析器)创建一个简单的索引,需要使用一个切分和两个副本:
PUT customers
{
"settings" : {
"number_of_shards" : 1,
"number_of_replicas": 2
},
"mappings" : {
"customer" : {
"properties" : {
"name" : { "type" : "keyword" },
"description" : { "type" : "text", "analyzer": "english" }
}
}
}
}
有关创建Elasticsearch索引的更多细节,请参阅官网文档。
搜索查询语言(Search Query Language)
Elasticsearch提供搜索API和基于json的进行查询定义的DSL。
DSL有两种类型的子句:
叶子句(Leaf clauses)
检查字段中的特定值(例如,匹配、术语或范围查询)。这些可以单独使用。
复合子句(Compound clauses)
包装其他leaf或复合子句,以合乎逻辑的方式组合它们(如bool或dis_max),或更改它们的行为(如constant_score)。
查询子句的行为取决于上下文
查询上下文:搜索与查询匹配的文档并根据相关性计算得分
过滤上下文:检查文档是否匹配,不计算分数。
GET /_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
}
更多细节可以参见文档。由于篇幅所限会在后续文章更新。
原文地址:https://cs.xieyonghui.com/database/neo4j-and-elasticsearch_88.html
Neo4j和Elasticsearch的更多相关文章
- Neo4j与ElasticSearch数据同步
Neo4j与ElasticSearch数据同步 针对节点删除,加了一些逻辑,代码地址 背景 需要强大的检索功能,所有需要被查询的数据都在neo4j. 方案 在Server逻辑中直接编写.后端有一个St ...
- Neo4j elk Elasticsearch kibana kettle
图形数据库,用于查找犯罪或者啥的很好用:反欺诈 win安装neo4j使用查询https://www.cnblogs.com/rubinorth/p/5853204.html linux下安装neo4j ...
- neo4j 初级使用笔记
linux下载: curl -O https://neo4j.com/artifact.php?name=neo4j-community-3.5.6-unix.tar.gz 配置端口: baidu h ...
- Hadoop, Python, and NoSQL lead the pack for big data jobs
Hadoop, Python, and NoSQL lead the pack for big data jobs Rise in cloud-based analytics could incr ...
- 第5章 Spring Boot 功能
Spring Boot 功能 本节将会介绍Spring Boot的一些细节. 在这里,您可以了解您将要使用和自定义的主要功能. 如果还没有准备好,您可能需要阅读第二部分“入门指南”和第三部分“使用 S ...
- 20191127 Spring Boot官方文档学习(4.11)
4.11.使用NoSQL技术 Spring Data提供了其他项目来帮助您访问各种NoSQL技术,包括: Redis MongoDB Neo4J Solr Elasticsearch Cassandr ...
- Solr vs. Elasticsearch谁是开源搜索引擎王者
当前是云计算和数据快速增长的时代,今天的应用程序正以PB级和ZB级的速度生产数据,但人们依然在不停的追求更高更快的性能需求.随着数据的堆积,如何快速有效的搜索这些数据,成为对后端服务的挑战.本文,我们 ...
- Apache Solr vs Elasticsearch
http://solr-vs-elasticsearch.com/ Apache Solr vs Elasticsearch The Feature Smackdown API Feature Sol ...
- ElasticSearch Nosql
把 ElasticSearch 当成是 NoSQL 数据库 Elasticsearch 可以被当成一个 "NoSQL"-数据库来使用么? NoSQL 意味着在不同的环境下存在不同的 ...
随机推荐
- Entity Framework 应用程序有以下优缺点
优点: 1.跨数据库支持能力强大,只需修改配置就可以轻松实现数据库切换2.提升了开发效率,不需要在编写Sql脚本,但是有些特殊Sql脚本EF无法实现,需要我们自己编写(通过EF中的ExecuteSql ...
- webpack中引用Element-ui
1.下载element-ui npm i element-ui --production 2.在main.js中引用 import Element from 'element-ui' import ' ...
- IceCTF-Matrix
解题思路: 参考了鸽子小姐姐的脚本:https://zhuanlan.zhihu.com/p/22678856 具体题目就不贴了. 题目中提示将问题图像化,猜测是将这些16进制数转化为图像,尝试将16 ...
- tomcat服务器和HTTP协议
tomcat:一个服务器的服务器软件,发布资源要用的 服务器组成: 1.服务器硬件 2.服务器软件 3.项目(一堆资源的集合) 4.资源tomcat本身是一个java程序,必须依赖jre运行eclip ...
- phoenix 利用CsvBulkLoadTool 批量带入数据并自动创建索引
需要先创建表: CREATE TABLE IF NOT EXISTS population ( state CHAR() NOT NULL, city VARCHAR NOT NULL, popula ...
- axios以form-data形式的传递参数遇到的坑
axios默认的Content-type是application/json;charset=UTF-8,如果想要以表单的形式传递参数,只要修改{headers:{'Content-Type':'app ...
- 新建pc端页面的模板
pc端页面,要做兼容.新建pc端模板时,先要初始化浏览器的样式,我命名为reset.css @charset "utf-8"; /* 取消链接高亮 */ body,div,ul,l ...
- python将字典列表导出为Excel文件的方法
将如下的字典列表内容导出为Excel表格文件形式: 关于上图字典列表的写入,请参考文章:https://blog.csdn.net/weixin_39082390/article/details/ ...
- 微信小程序--学习的案例
一.「程序秀」 「程序秀」这个小程序非常特别,因为它是一个可以帮助别人开发小程序的小程序.它以「即速应用」这个无需代码一键生成微信小程序的开发工具为基础,为广大开发爱好者提供小程序开发的最新资讯和培训 ...
- 内网端口转发[SSH]
一.应用场景 获取到目标边界机器linux服务器一台,想继而向内网其他机器渗透,获取到一台webshell发现处于内网当中且不通外网.可以通过linux ssh隧道对目标内网机器进行访问. 二.利用手 ...