- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个论坛应用程序。论坛中有多个主题(帖子)。每个主题都有诸如 viewCount
(该主题被论坛用户查看了多少次)之类的字段。
我希望主题的所有字段都取自 ES(id、日期、标题、内容和 viewCount)。然而,在这种情况下,在每个主题 View 之后,ES 必须重新索引整个文档。
我问了关于堆栈溢出部分更新的问题 - Partial update on field that is not indexed .重要的是要注意 viewCount
字段没有索引,它只是存储在 ES 中。
有两个术语——部分更新和部分索引。 ES 中有部分更新,您只能更改几个字段。但是没有部分重新索引,这意味着即使你只更改一个字段,ES 也会重新索引整个文档。这意味着如果该主题被查看 1000 次,ES 将对其进行索引 1000 次。如果我有很多用户,许多文档将被一次又一次地索引。这是第一个策略。
第二种策略是将主题的一些字段保留在索引中,一些保留在数据库中。在这种情况下,我可以从数据库中获取 viewAcount。此外,然后我可以将所有字段存储在数据库中,并将索引仅用作索引,即获取当前主题的 ID。
解决此类问题的最佳方法是什么?
最佳答案
关于文档的部分更新,重要的是要认识到,虽然 API 让您执行部分更新,但在幕后,它通过检索文档、更改文档和重新索引来执行完整更新。以下内容来自 Elasticsearch 网站:
In Updating a Whole Document, we said that the way to update a document is to retrieve it, change it, and then reindex the whole document. This is true. However, using the update API, we can make partial updates like incrementing a counter in a single request.
We also said that documents are immutable: they cannot be changed, only replaced. The update API must obey the same rules. Externally, it appears as though we are partially updating a document in place. Internally, however, the update API simply manages the same retrieve-change-reindex process that we have already described. The difference is that this process happens within a shard, thus avoiding the network overhead of multiple requests. By reducing the time between the retrieve and reindex steps, we also reduce the likelihood of there being conflicting changes from other processes.
要既将全文数据存储在 Elasticsearch 中,又要在不重新索引整个文档的情况下拥有经常更改的字段,您需要将这些项目存储在其他地方。这可以是另一个 Elasticsearch 索引或另一个系统中的元数据/计数器存储。
对于常见用例,您可以对两者运行相同的查询并合并结果。这些很可能是简单的过滤器,并且对不会更改的字段进行排序,例如题材、创作时间、作者等
对于不匹配的搜索,例如全文查询,您可以 (a) 不显示该数据,或者 (b) 使用最终一致的方法,您可以使用更新后的计数定期更新 Elasticsearch 主题存储.许多对一致性要求不高的系统可以使用最终一致性方法,包括 Stack Overflow、Netflix 等。例如,在某些网站上,您会在一个页面/小部件上获得一个计数,而在另一个页面/上获得另一个计数/小部件由于最终一致的设计。
关于Elasticsearch:处理经常更新的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29226843/
我在这里有一个问题,我不知道这是否正常。 但是我认为这里有些湖,安装插件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_]
我是一名优秀的程序员,十分优秀!