Neo4j和Elasticsearch

<div class="cs-page-content cs-article-container"> <h1 class="cs-article-title"> <a href="https://cs.xieyonghui.com/database/neo4j-and-elasticsearch\_88.html">Neo4j和Elasticsearch</a> </h1> <p>Neo4j和Elasticsearch是一种让人眼前一亮的组合,为什么需要把搜索和图表结合起来呢?它们是如何使用的呢?</p> <p>在无处不在的互联网搜索引擎的推动下,全文搜索占据了主导地位。图形数据库在高度连接的领域上支持事务性和分析性。将两者结合在一起可以增强基于图的搜索结果,比如推荐特性或概念搜索,还可以将高级搜索结果作为图遍历的入口点。</p> <h2>基于推荐的多元化搜索</h2> <p>以下是案例是产品搜索,零售商(亚马逊,eBay,Target等)会经常用到。文本搜索和目录导航不仅仅是用户入口,还是主要的“销售人员”。与专业的搜索引擎相比,这里说的搜索“条目”集更加可控和规范。</p> <h2>对于搜索基础设施,需考虑到这些方面</h2> <h3>多个数据源</h3> <p>产品和相关信息来自各种异构源,如产品供应商、信息提供者和销售商。</p> <h3>营销策略</h3> <p>创建新的促销、优惠和营销活动来推广网站或特定产品。所有这些都会影响结果提升。</p> <h3>个性化</h3> <p>为了提供更好、更个性化的用户体验,必须捕获、处理和使用:点击、购买、搜索查询等用户行为来个性化搜索结果。</p> <h3>供应商信息</h3> <p>产品供应商是最重要的,它们提供诸如数量、可用性、交付选项、时间以及产品细节等信息。</p> <p>所有这些需求和数据源都会以几种方式影响搜索结果。为电商供应商设计搜索,需要一个完整的数据生态系统和相关数据流,用于管理他们的平台。</p> <h2>搜索的价值</h2> <h3>搜索是用户和搜索引擎之间的对话</h3> <p>搜索在现代应用中无处不在。是海量数据中查找相关信息的最快方法。搜索引擎需要能够通过用户的搜索词提供相关结果,并进一步细化和过滤搜索。</p> <h3>Faceting(分组)</h3> <p>初始搜索结果通常过于宽泛,需要进行过滤或细化,例如,使用facets,Facets是从搜索结果派生的类别,用于缩小搜索范围。<br> 每个facet代表结构化信息的属性,如类别,价格,颜色,位置等,并包含结果的数量。</p> <h2>搜索引擎内部组成</h2> <h3>Indexing(索引)</h3> <p>处理文档使其可用于搜索。</p> <h3>User input(用户输入)</h3> <p>用户通过用户界面或API发送搜索请求。</p> <h3>Ranking(排名)</h3> <p>搜索引擎将输入与索引进行比较,并根据文档与查询的匹配程度对文档进行排序。</p> <h3>Results display(结果显示)</h3> <p>将结果返回给用户界面。</p> <p>索引是具有某些共同特征的文档的集合,例如,客户数据、产品目录、订单数据等,用这些数据建立不同的索引。</p> <p>它由一个名称标识(全小写),用于对包含的文档执行索引、搜索、更新和删除操作。文档是建立索引的基本信息单元,这些索引中存储了任意数量的JSON文档,文档的类型不同。</p> <h3>Indexing</h3> <p>分析和准备添加到索引的文档,以便在Lucene和其他相关结构中创建反向索引数据结构,从而在搜索期间快速检索结果,这些是文档分析的步骤:</p> <h3>Tokenization</h3> <p>将字符串分解为要索引的令牌</p> <p>对标点、数字和其他符号的一致处理</p> <p>处理复合词的多个标记以匹配可能的输入</p> <h3>Downcasing</h3> <p>对于不区分大小写的搜索,所有单词都转换为小写。</p> <p>Stemming/stopword removal</p> <p>去掉后缀、复数和共轭的单词</p> <p>Synonym expansion</p> <p>删除常用词</p> <p>更新的搜索引擎会保留它们以获得更好的结果</p> <p>通过同义词库解析同义词并添加到索引中</p> <p>另外,同义词解析也可以在搜索词上进行</p> <h3>创建索引的示例</h3> <p>在Elasticsearch中,在索引创建过程中,可以指定:</p> <p>索引的所有设置</p> <p>&nbsp;&nbsp; &nbsp;碎片和副本的数量</p> <p>&nbsp;&nbsp; &nbsp;自定义分析</p> <p>定义文档和其包含的字段以及如何存储和索引的映射。要为customer的名称和描述字段(使用预定义的英文文本分析器)创建一个简单的索引,需要使用一个切分和两个副本:</p> <pre class="code-wrappers language-json"><code class=" language-json"> PUT customers <span class="token punctuation">{</span> <span class="token property">"settings"</span> <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">"number\_of\_shards"</span> <span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token property">"number\_of\_replicas"</span><span class="token operator">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token property">"mappings"</span> <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">"customer"</span> <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">"properties"</span> <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">"name"</span> <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">"type"</span> <span class="token operator">:</span> <span class="token string">"keyword"</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token property">"description"</span> <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">"type"</span> <span class="token operator">:</span> <span class="token string">"text"</span><span class="token punctuation">,</span> <span class="token property">"analyzer"</span><span class="token operator">:</span> <span class="token string">"english"</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span></code></pre> <p>有关创建Elasticsearch索引的更多细节,请参阅官网<a rel="nofollow noopener noreferrer" href="https://cs.xieyonghui.com/redirect?su=rPozYE" target="\_blank" uk-icon="link" class="uk-icon">文档<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" stroke-width="1.1" d="M10.625,12.375 L7.525,15.475 C6.825,16.175 5.925,16.175 5.225,15.475 L4.525,14.775 C3.825,14.074 3.825,13.175 4.525,12.475 L7.625,9.375"></path> <path fill="none" stroke="#000" stroke-width="1.1" d="M9.325,7.375 L12.425,4.275 C13.125,3.575 14.025,3.575 14.724,4.275 L15.425,4.975 C16.125,5.675 16.125,6.575 15.425,7.275 L12.325,10.375"></path> <path fill="none" stroke="#000" stroke-width="1.1" d="M7.925,11.875 L11.925,7.975"></path></svg></a>。</p> <h2>搜索查询语言(Search Query Language)</h2> <p>Elasticsearch提供搜索API和基于json的进行查询定义的DSL。</p> <p>DSL有两种类型的子句:</p> <h3>叶子句(Leaf clauses)</h3> <p>检查字段中的特定值(例如,匹配、术语或范围查询)。这些可以单独使用。</p> <h3>复合子句(Compound clauses)</h3> <p>包装其他leaf或复合子句,以合乎逻辑的方式组合它们(如bool或dis\_max),或更改它们的行为(如constant\_score)。</p> <h3>查询子句的行为取决于上下文</h3> <p>查询上下文:搜索与查询匹配的文档并根据相关性计算得分</p> <p>过滤上下文:检查文档是否匹配,不计算分数。</p> <pre class="code-wrappers language-json"><code class=" language-json">GET /\_search <span class="token punctuation">{</span> <span class="token property">"query"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">"bool"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">"must"</span><span class="token operator">:</span> <span class="token punctuation">\[</span> <span class="token punctuation">{</span> <span class="token property">"match"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">"title"</span><span class="token operator">:</span> <span class="token string">"Search"</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token property">"match"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">"content"</span><span class="token operator">:</span> <span class="token string">"Elasticsearch"</span> <span class="token punctuation">}</span><span class="token punctuation">}</span> <span class="token punctuation">\]</span><span class="token punctuation">,</span> <span class="token property">"filter"</span><span class="token operator">:</span> <span class="token punctuation">\[</span> <span class="token punctuation">{</span> <span class="token property">"term"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">"status"</span><span class="token operator">:</span> <span class="token string">"published"</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token property">"range"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">"publish\_date"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">"gte"</span><span class="token operator">:</span> <span class="token string">"2015-01-01"</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">}</span> <span class="token punctuation">\]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span></code></pre> <p>更多细节可以参见<a rel="nofollow noopener noreferrer" href="https://cs.xieyonghui.com/redirect?su=5hjvUo" target="\_blank" uk-icon="link" class="uk-icon">文档<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" stroke-width="1.1" d="M10.625,12.375 L7.525,15.475 C6.825,16.175 5.925,16.175 5.225,15.475 L4.525,14.775 C3.825,14.074 3.825,13.175 4.525,12.475 L7.625,9.375"></path> <path fill="none" stroke="#000" stroke-width="1.1" d="M9.325,7.375 L12.425,4.275 C13.125,3.575 14.025,3.575 14.724,4.275 L15.425,4.975 C16.125,5.675 16.125,6.575 15.425,7.275 L12.325,10.375"></path> <path fill="none" stroke="#000" stroke-width="1.1" d="M7.925,11.875 L11.925,7.975"></path></svg></a>。由于篇幅所限会在后续文章更新。&nbsp;</p> 原文地址:https://cs.xieyonghui.com/database/neo4j-and-elasticsearch\_88.html </div>
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )