elasticsearch 添加字段

2019-03-11 09:28|来源: 网络

Elasticsearch中的mapping一旦创建,就不能再修改。但是添加字段是可以的。其实很简单,只需在原来的mapping上面直接新增加一个field,然后重新创建一下mapping就可以了。

原mapping的定义如下:

Java代码
  1. private static XContentBuilder getMapping() throws Exception{  

  2.        XContentBuilder mapping = jsonBuilder()    

  3.                   .startObject()    

  4.                     .startObject("test")    

  5.                     .startObject("properties")          

  6.                       .startObject("id")  

  7.                            .field("type", "long")  

  8.                            .field("store", "yes")  

  9.                        .endObject()      

  10.                          

  11.                       .startObject("type")  

  12.                            .field("type", "string")  

  13.                            .field("index", "not_analyzed")  

  14.                        .endObject()    

  15.                          

  16.                       .startObject("catIds")  

  17.                            .field("type", "integer")  

  18.                       .endObject()    

  19.                     .endObject()    

  20.                    .endObject()    

  21.                  .endObject();    

  22.        return mapping;  

  23.    }  


现在加入要增加一个field,名称叫title。新增后的代码如下:

Java代码
  1. private static XContentBuilder getMapping() throws Exception{  

  2.        XContentBuilder mapping = jsonBuilder()    

  3.                   .startObject()    

  4.                     .startObject("test")    

  5.                     .startObject("properties")          

  6.                       .startObject("id")  

  7.                            .field("type", "long")  

  8.                            .field("store", "yes")  

  9.                        .endObject()      

  10.                          

  11.                       .startObject("type")  

  12.                            .field("type", "string")  

  13.                            .field("index", "not_analyzed")  

  14.                        .endObject()    

  15.                        //新增字段  

  16.                         .startObject("title")  

  17.                            .field("type", "string")  

  18.                            .field("index", "analyzed")  

  19.                        .endObject()    

  20.                          

  21.                       .startObject("catIds")  

  22.                            .field("type", "integer")  

  23.                       .endObject()    

  24.                     .endObject()    

  25.                    .endObject()    

  26.                  .endObject();    

  27.        return mapping;  

  28.    }  

然后重新putMapping即可。

还不知道如何创建mapping?请看这里

对这类话题感兴趣?欢迎发送邮件至 donlianli@126.com    
关于我:邯郸人,擅长Java,Javascript,Extjs,oracle sql。    
更多我之前的文章,可以访问  我的空间    

 
转自:http://donlianli.iteye.com/blog/1922825

相关问答

更多
  • @AndreiStefan感谢他链接的文章解决了我的问题。 解决方案如下: network.bind_host: 0 感谢你们。 @AndreiStefan gave the solution to my problem thanks to the post he linked. The solution was as straightforward as: network.bind_host: 0 Thank you guys.
  • 将数据添加到ElasticSearch由PUT ing文档完成( https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html ) 在postgres和ElasticSearch之间同步数据是一项更复杂的任务。 假设postgres表中的数据发生更改,您需要将您在ElasticSearch中indexed标记为indexed或processed ,然后继续处理。 如果元组具有时间戳或增量ID,则可以在索引时间 ...
  • 我相信它会是这样的。 params[:sort] ||= 'asc' Tire.search('apartmens') do |s| s.query do |q| q.string 'newyork' end s.sort { by :__FIELD_YOU_WANT_TO_SORT_, params[:sort]} end I believe it would be something like this. params[:sort] ||= 'asc' Tire.sear ...
  • 我用Django elasticsearch,但它不工作。 根据你的干草堆设置,你不使用Elasticsearch。 您正在使用SimpleEngine ,它根本不是真正的搜索引擎。 要使用Elasticsearch,您的设置必须包含以下内容: HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine', ...
  • plugin命令没有做任何特殊的事情,它只是试图从不同的位置下载zip文件并将其提取到插件下的特定子文件夹中。 大部分插件曾经可以直接作为GitHub下载使用,但由于GitHub 禁用了其下载功能 ,因此有关于解决此问题的最佳方法的讨论正在进行中。 来自elasticsearch团队的插件已被移至download.elasticsearch.org并且最近更新了插件命令以反映这一变化。 看看相关的问题和这篇博客文章。 无论如何,如果您在使用plugin命令时遇到问题,您可以下载zip文件并将其解压缩到插件下 ...
  • 解决了它,感谢Andrei Stefan ! 在更改映射,小而痛苦的细节之后,所有文档都需要重新编制索引。 Solved it thanks to Andrei Stefan! All the documents needed to be reindexed after changing the mapping, small yet painful detail.
  • 我认为这会对你_river ,因为_river像其他任何索引一样可以像索引一样查询。 - curl -XGET http://localhost:9200/_river/_search?q=* I think this will do the trick for you, as _river is an index like any other it can be queried like one. - curl -XGET http://localhost:9200/_river/_search?q=* ...
  • 有一篇关于类型与索引的好博客文章: https : //www.elastic.co/blog/index-vs-type 拥有相同的映射和字段是一个很好的起点(因为稀疏性是一个问题)。 请注意,将来类型将被删除,因此不要过多地将其逻辑结构化。 但是你可以在查询中使用enum字段和过滤器。 There's a good blog post about type vs index: https://www.elastic.co/blog/index-vs-type Having the same mappin ...
  • 使用Elasticsearch没有“正确的方法”。 “正确”是相对的,因此“正确的方式”是支持您的用例的一种方式。 Elasticsearch不仅适用于一个特定的用例,而且适用于越来越多的用例。 您描述的案例是完全有效的案例,即在ES中索引您在另一个RDBMS(例如MySQL)中拥有的任何内容,并确保索引内容与主要事实源同步。 在您的用例中,您需要记住的一件事是,您必须保证MySQL和ES始终是1:1同步,并且由于各种原因这不一定容易做到: 如果您需要将ES关闭以进行维护,会发生什么情况,但您的应用程序必须 ...
  • 同样的方法你不能改变任何公司的标语(知识产权的任何人?),该标语也不能改变,并且被硬编码到RestMainAction.java 。 它应该仅被视为Elasticsearch的说法“Hello world”。 The same way you cannot change the tagline of any company (intellectual property anyone?), that tagline cannot be changed as well and is hardcoded into ...