zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    在VScode下搭载Perl的调试环境
    32.最长有效括号(Longest Valid Parentheses)
    23.合并K个排序链表(Merge k Sorted Lists)
    10.正则表达式匹配(Regular Expression Matching)
    4.寻找两个有序数组的中位数(Median of Two Sorted Arrays)
    C++中不引人瞩目的细节
    关于C++项目中头文件相互包含的问题
    关于css中hover下拉框的一个bug
    DFS-BFS(深搜广搜)原理及C++代码实现
    trie(字典树)原理及C++代码实现
  • 原文地址:https://www.cnblogs.com/jpfss/p/11412488.html
Copyright © 2011-2022 走看看