我有權訪問Neo4J圖形數據庫,其中存儲了人員列表以及他們之間的關係(朋友)。我正在尋找實施「搜索朋友列表」功能,在給定的用戶朋友列表中執行搜索。我擔心性能,所以我正在尋找使用Elasticsearch來實現此搜索;但我不確定如何在Elasticsearch中從Neo4j索引用戶數據以便於上述查詢。一個典型的用例是「爲用戶X找到他的朋友,其名稱開頭‘Mik的’的SearchAPI是使用Elasticsearch的JavaAPI建立在SpringWebElasticsearch商店的可搜索列表
編輯1:
我所問的是不同的到this,因爲我知道如何使用Elasticsearch河流和其他工具來索引數據,我的問題是尋求實現諸如「search_friends_list」之類的功能的最佳方法,例如,我是否使用每個用戶的唯一用戶標識符作爲鍵入(類似於..:9200/users/[username]
)並將給定用戶的每個朋友編入索引並鍵入?這種方式如果我想通過用戶JackSparrow的朋友列表進行搜索,我會執行類似於t o ..:9200/users/JackSparrow/_search?q=search_term
。這個例子雖然有些味道,並且當我的系統中的用戶數量增長時,可能會導致嚴重的性能下降。那就是我需要幫助和建議的地方。存在哪些方法來實現這樣的解決方案?
編輯2:除去Neo4j的標記,提供了更多的信息
映射
{
"people": {
"mappings": {
"friends": {
"properties": {
"firstname": {
"type": "string"
},
"friends": {
"type": "string"
},
"fullname": {
"type": "string"
},
"id": {
"type": "long"
},
"lastname": {
"type": "string"
},
"username": {
"type": "string"
},
"userid": {
"type": "string"
}
}
}
}
}
}
數據
{
"_index": "people",
"_type": "friends",
"_id": "24482ba5-06fa-2f58-2560-4b8fa5e3d1a7",
"_score": 11.5473,
"_source": {
"firstname": "Carl",
"id": 4735,
"fullname": "Carl Platt",
"userid": "24482ba5-06fa-2f58-2560-4b8fa5e3d1a7",
"friends": [
"8248f90b-3c30-b60a-d64f-ced55304fcb0",
"8b4a0960-f792-87d5-be4d-17a53963c29e",
"904a4d6f-c7ce-8ae3-edf2-e0ac6bc69885",
"934e0e4b-2b20-b7b1-c092-1eb22e3e92bd",
"954e1500-7f74-468e-b611-cd35382d9aa6",
"994cacfc-3a76-c77a-adec-b50804933490",
"a942b4b7-cdcc-8653-ef73-a6000dbd418c",
...
查詢
{
"query": {
"filtered": {
"query": {
"query_string": {
"default_field": "firstname",
"query": "Amu*"
}
},
"filter": {
"terms": {
"friends": {
"index": "people",
"type": "friends",
"id": "24482ba5-06fa-2f58-2560-4b8fa5e3d1a7",
"path": "userid"
}
}
}
}
}
}
問題是不同的。我只提到Neo4J,所以沒有人會說「使用neo4j」 – emilio
我會刪除標誌:) –