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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM