我最近閱讀了一些關於存儲的mongodb和elasticsearch用於索引/搜索的文章。我覺得我錯過了一些東西。爲什麼你會走這條路而不是僅僅是using mongo to index的數據? elasticsearch帶來了什麼好處,值得增加複雜性嗎?爲什麼在Mongo中使用ElasticSearch?
12
A
回答
22
ElasticSearch實現了許多更多功能,例如將文本自定義分割爲單詞,自定義詞幹,多面搜索以及更多功能。儘管MongoDB(相當簡單)的文本搜索可以完成其中的一部分功能,但它並不像ElasticSearch那麼強大。
如果您所做的只是在單個字段中查找單個字符串,那麼MongoDB的普通查詢系統將非常出色。如果您需要在多個字段中查找單詞,則MongoDB的文本搜索將起作用。如果您還需要其他更多的東西,ElasticSearch就是您的選擇。
3
Derick的回答幾乎指甲。所有這些背後的問題是:
你想在你的應用程序中實現什麼功能?
如果您依賴大量文本中的大量搜索功能,ElasticSearch可能是一件好事。如果你想擁有一個靈活的數據存儲來處理複雜的臨時查詢,Mongo可能會非常適合。如果您對數據存儲的要求不同,將兩個工具結合使用通常是件好事,而不是實現所有類型的解決方法,以使其只與一個數據存儲一起工作。
爲工作選擇合適的工具。
11
搜索引擎和數據庫做了一些根本不同的事情。一個好的搜索引擎(如ElasticSearch)支持更復雜的索引,方面,突出顯示等。在ElasticSearch的情況下,您也可以實時獲得您的回覆。另一方面,搜索引擎不會返回與您的查詢匹配的每個文檔。相反,它會根據它們的匹配程度對文檔進行評分,並返回評分最高的文檔。當你查詢MongoDB等數據庫時,你應該預期它會返回所有與你的查詢匹配的。
您可以將整個文檔存儲在ElasticSearch中,但它通常不是最佳解決方案。通常情況下,您將它配置爲返回文檔ID,用於從數據庫中提取文檔。 MongoDB是針對基於文檔的存儲優化的數據庫。這就是爲什麼你聽說有人在一起使用它們。
編輯:
當這個被張貼,它匹配的建議,但是這可能不再是這種情況。
相關問題
- 1. 爲什麼不在elasticsearch中使用min_score?
- 2. ElasticSearch&Mongo
- 3. 爲什麼我的索引只能在Mongo Query中使用?
- 4. 爲什麼$ match不在Mongo Aggregation查詢中使用?
- 5. 爲什麼通配符在Elasticsearch中不能使用`@`?
- 6. 爲什麼在mongo 2.6上可以使用mongo java驅動程序2.4版本?
- 7. 爲什麼Mongo聚合不起作用?
- 8. 爲什麼eq不存在mongo-java-driver?
- 9. 爲什麼我們在Mongo類的頂部使用@Inject註解?
- 10. Elasticsearch mongo-connector KeyError _id
- 11. 未在ElasticSearch中添加Mongo'_id'字段
- 12. 在Mongo中使用繼承有什麼好處?
- 13. 在elasticsearch中爲nGram標記器使用大型max_gram有什麼副作用?
- 14. 人們使用Elasticsearch做什麼?
- 15. Elasticsearch使用什麼格式的ID?
- 16. 在Mongo中使用複合索引作爲分片鍵有什麼要求?
- 17. 爲什麼我的spring引導(mongo)bean被創建/使用?
- 18. Python Mongo:在查詢中使用'$或'mongo
- 19. 爲什麼nodejs沒有連接mongo?
- 20. 爲什麼mongo數不加起來?
- 21. 什麼是在Django中使用elasticsearch的最佳方法Restframework
- 22. 在Elasticsearch中使用日常索引有什麼缺點?
- 23. 從Mongo刪除到Elasticsearch
- 24. Elasticsearch中字段的用法是什麼?
- 25. 爲什麼Array.some不能在Mongo的$ where子句中工作?
- 26. 爲什麼我不能在Servlet中初始化Mongo
- 27. 爲什麼這個mongo排序不能在PHP中工作?
- 28. _doc在elasticsearch中代表什麼?
- 29. 標準tokenfilter在Elasticsearch中做了什麼?
- 30. 爲什麼不使用ElasticSearch Bulk API工作?
你可以提供一個用例嗎?我不覺得最好的解決方案是同時使用nosql來實現一些特殊的功能嗎? –