- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们公司有几个产品和几个团队。一个团队负责搜索,并且正在将 Elasticsearch 标准化为一个 nosql 数据库来存储他们的所有数据,并计划稍后使用 Neo4j 来补充他们的关系数据搜索。
我的团队负责社交应用程序的产品方面(人们有 friend ,为公司工作,并且与在公司工作的每个人都是同事,等等)。我们正在将图形数据库视为一种解决方案(在放弃了 rdbms 中 n^2 关系的燃烧船之后),特别是 neo4j(Cypher 查询语言是一个美丽的东西)。
我们的一部分数据与搜索团队使用的数据类似,我们需要确保搜索可以同时搜索他们的数据和我们的数据。搜索团队正在插入我们将 ElasticSearch 标准化为我们的数据库,而不是 Neo4j 或任何图形数据库。我认为这是为了标准化和一致性。
我们显然来自不同的地方,搜索问题与产品问题。他断言 ElasticSearch 可以涵盖我们所有的用例,包括用于查找建议的图形查询。虽然这可能是真的,但我真的希望坚持使用 Neo4j,并使用 ElasticSearch 插件来集成他们的搜索。
在这种情况下,为产品数据库选择 ElasticSearch 而不是 Neo4j(反之亦然)是否有任何主要问题?有过类似情况的人有什么指导方针或轶事吗?
最佳答案
我们是这两种技术的重度用户,根据我们的经验,您最好将两者都用于它们擅长的领域。
就搜索功能、日志管理和方面而言,Elasticsearch 是一款非常出色的软件。
尽管有他们的图形插件,如果你想在 elasticsearch 索引中使用大量社交网络和类似关系,你将遇到两个问题:
每次关系发生变化时,您都必须更新文档,当单个实体发生变化时,这种情况可能会很多。例如,假设你的组织有用户在 github 上做贡献,你想搜索在某种语言上有顶级贡献者的组织,每次用户在 github 上做贡献时,你都必须重新索引整个组织,计算所有用户的语言贡献百分比等......这是一个简单的例子。
如果您打算使用嵌套字段和父/子映射,您将在搜索过程中降低性能,作为引用,此处引用“搜索调整”文档中的内容:https://www.elastic.co/guide/en/elasticsearch/reference/master/tune-for-search-speed.html#_document_modeling
Documents should be modeled so that search-time operations are as cheap as possible.
In particular, joins should be avoided. nested can make queriesseveral times slower and parent-child relations can make querieshundreds of times slower. So if the same questions can be answeredwithout joins by denormalizing documents, significant speedups can beexpected.
关系在像 neo4j 这样的图形数据库中得到了很好的处理。相反,Neo4j 缺乏 elasticsearch 提供的搜索功能,可以进行全文搜索但性能不佳,并且会给您的应用程序带来一些负担。
请注意:当您谈论“存储”时,elasticsearch 是一个搜索引擎而不是数据库(尽管它被广泛使用),而 neo4j 是一个完全事务性的数据库。
然而,将两者结合起来才是制胜法宝,我们实际上已经写了一篇文章来描述我们称之为 Graph-Aided Search
的过程,其中包含一组用于 Elasticsearch 和 Neo4j 的开源插件,为您提供了一个开箱即用的强大双向集成。
您可以在这里阅读更多相关信息:http://graphaware.com/neo4j/2016/04/20/graph-aided-search-the-rise-of-personalised-content.html
关于elasticsearch - 与图形数据库相比,将 ElasticSearch 用作社交应用程序的 nosql 数据库有哪些陷阱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38135000/
我在这里有一个问题,我不知道这是否正常。 但是我认为这里有些湖,安装插件elasticsearch-head之后,我在浏览器中启动url“http://localhost:9200/_plugin/h
我写了这个 flex 搜索查询: es.search(index=['ind1'],doc_type=['doc']) 我得到以下结果: {'_shards': {'failed': 0, 'skip
在ElasticSearch.Net v.5中,存在一个属性 Elasticsearch.Net.RequestData.Path ,该属性在ElasticSearch.Net v.6中已成为depr
如何让 elasticsearch 应用新配置?我更改了文件 ~ES_HOME/config/elasticsearch.yml 中的一个字符串: # Disable HTTP completely:
我正在尝试使用以下分析器在 elastic serach 7.1 中实现部分子字符串搜索 PUT my_index-001 { "settings": { "analysis": {
假设一个 elasticsearch 服务器在很短的时间内接收到 100 个任务。有些任务很短,有些任务很耗时,有些任务是删除任务,有些是插入和搜索查询。 elasticsearch 是如何决定先运行
我需要根据日期过滤一组值(在此处添加字段),然后按 device_id 对其进行分组。所以我正在使用以下东西: { "aggs":{ "dates_between":{ "fi
我在 Elasticsearch 中有一个企业索引。索引中的每个文档代表一个业务,每个业务都有business_hours。我试图允许使用星期几和时间过滤营业时间。例如,我们希望能够进行过滤,以显示我
我有一个这样的过滤查询 query: { filtered: { query: { bool: { should: [{multi_match: {
Elasticsearch 相当新,所以可能不得不忍受我,我遇到了一个问题,如果我使用 20 个字符或更少的字符搜索文档,文档会出现,但是查询中同一个单词中的任何更多字符,我没有结果: 使用“苯氧甲基
我试图更好地理解 ElasticSearch 的内部结构,所以我想知道 ElasticSearch 在内部计算以下两种情况的术语统计信息的方式是否存在任何差异。 第一种情况是当我有这样的文件时: {
在我的 elasticsearch 索引中,我索引了一堆工作。为简单起见,我们只说它们是一堆职位。当人们在我的搜索引擎中输入职位时,我想“自动完成”可能的匹配。 我在这里调查了完成建议:http://
我在很多映射中使用多字段。在 Elastic Search 的文档中,指示应将多字段替换为“fields”参数。参见 http://www.elasticsearch.org/guide/en/ela
我有如下查询, query = { "query": {"query_string": {"query": "%s" % q}}, "filter":{"ids
我有一个Json数据 "hits": [ { "_index": "outboxprov1", "_type": "deleted-c
这可能是一个初学者的问题,但我对大小有一些疑问。 根据 Elasticsearch 规范,大小的最大值可以是 10000,我想在下面验证我的理解: 示例查询: GET testindex-2016.0
我在 Elastic Search 中发现了滚动功能,这看起来非常有趣。看了那么多文档,下面的问题我还是不清楚。 如果偏移量已经存在那么为什么要使用滚动? 即将到来的记录呢?假设它完成了所有数据的滚动
我有以下基于注释的 Elasticsearch 配置,我已将索引设置为不被分析,因为我不希望这些字段被标记化: @Document(indexName = "abc", type = "efg
我正在尝试在单个索引中创建多个类型。例如,我试图在host索引中创建两种类型(post,ytb),以便在它们之间创建父子关系。 PUT /ytb { "mappings": { "po
我尝试创建一个简单的模板,包括一些动态模板,但我似乎无法为文档编制索引。 我得到错误: 400 {"error":"MapperParsingException[mapping [_default_]
我是一名优秀的程序员,十分优秀!