定义mapping
  在添加索引的mapping时可以这样定义分词器
{
"page":{
"properties":{
"title":{
"type":"string",
"indexAnalyzer":"ik",
"searchAnalyzer":"ik"
},
"content":{
"type":"string",
"indexAnalyzer":"ik",
"searchAnalyzer":"ik"
}
}
}
}
  indexAnalyzer为索引时使用的分词器,searchAnalyzer为搜索时使用的分词器。
  java mapping代码如下:
XContentBuilder content = XContentFactory.jsonBuilder().startObject()
.startObject("page")
.startObject("properties")
.startObject("title")
.field("type", "string")
.field("indexAnalyzer", "ik")
.field("searchAnalyzer", "ik")
.endObject()
.startObject("code")
.field("type", "string")
.field("indexAnalyzer", "ik")
.field("searchAnalyzer", "ik")
.endObject()
.endObject()
.endObject()
.endObject()
  定义完后操作索引会以指定的分词器来进行分词。
  附:
  ik分词插件项目地址:https://github.com/medcl/elasticsearch-analysis-ik
  mmseg分词插件项目地址:https://github.com/medcl/elasticsearch-analysis-mmseg
  如果觉得配置麻烦,也可以下载个配置好的es版本,地址如下:https://github.com/medcl/elasticsearch-rtf
  elasticsearch的基本用法
  大的特点:
  1. 数据库的 database, 是  index
  2. 数据库的 table,  是 tag
  3. 不要使用browser, 使用curl来进行客户端操作.  否则会出现 java heap ooxx...
  curl:  -X 后面跟 RESTful :  GET, POST ...
  -d 后面跟数据。 (d = data to send)
  1. create:
  指定 ID 来建立新记录。 (貌似PUT, POST都可以)
  $ curl -XPOST localhost:9200/films/md/2 -d '
  { "name":"hei yi ren", "tag": "good"}'
  使用自动生成的 ID 建立新纪录:
  $ curl -XPOST localhost:9200/films/md -d '
  { "name":"ma da jia si jia3", "tag": "good"}'
  2. 查询:
  2.1 查询所有的 index, type:
  $ curl localhost:9200/_search?pretty=true
  2.2 查询某个index下所有的type:
  $ curl localhost:9200/films/_search
  2.3 查询某个index 下, 某个 type下所有的记录:
  $ curl localhost:9200/films/md/_search?pretty=true
  2.4 带有参数的查询:
  $ curl localhost:9200/films/md/_search?q=tag:good
  {"took":7,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":2,"max_score":1.0,"hits":[{"_index":"film","_type":"md","_id":"2","_score":1.0, "_source" :
  { "name":"hei yi ren", "tag": "good"}},{"_index":"film","_type":"md","_id":"1","_score":0.30685282, "_source" :
  { "name":"ma da jia si jia", "tag": "good"}}]}}
  2.5 使用JSON参数的查询: (注意 query 和 term 关键字)
  $ curl localhost:9200/film/_search -d '
  {"query" : { "term": { "tag":"bad"}}}'
  3. update
  $ curl -XPUT localhost:9200/films/md/1 -d { ...(data)... }
  4. 删除。 删除所有的:
  $ curl -XDELETE localhost:9200/films
  引言:
  ,事情终于发生了。Java6(Mustang),是2006年早些时候出来的,至今仍然应用在众多生产环境中,现在终于走到了尽头。已经没有什么理由阻止迁移到Java7(Dolphin)上了。
  这也促使我想写一篇关于在ElasticSearch上配置Java6和7的细微差异的博文。
  Elasticsearch对Java虚拟机进行了预先的配置。通常情况下,因为这些配置的选择还是很谨慎的,所以你不需要太关心,并且你能立刻使用ElasticSearch。
  但是,当你监视ElasticSearch节点内存时,你可能尝试修改一些配置。这些修改是否会改善你的处境?
  这篇博文尝试揭开Elasticsearch配置的神秘面纱,并且讨论常见的调整。终,会给出一些推荐的配置调整。
  Elasticsearch JVM 配置概览:
  这些是Elasticsearch 0.19.11版本的默认配置。
  JVM参数 Elasticsearch默认值 Environment变量
-Xms 256m ES_MIN_MEM
-Xmx 1g ES_MAX_MEM
-Xms and -Xmx   ES_HEAP_SIZE
-Xmn   ES_HEAP_NEWSIZE
-XX:MaxDirectMemorySize   ES_DIRECT_SIZE
-Xss 256k
-XX:UseParNewGC +
-XX:UseConcMarkSweepGC +
-XX:CMSInitiatingOccupancyFraction 75
-XX:UseCMSInitiatingOccupancyOnly +
-XX:UseCondCardMark (commented out)
  首先你注意到的是,Elasticsearch预留了256M到1GB的堆内存。
  这个设置适用于开发和演示环境。开发人员只需要简单的解压发行包,再执行./bin/elasticsearch -f完成了Elasticsearch的安装。当然这点对于开发来说非常棒,并且在很多场景下都能工作,但是当你需要更多内存来降低Elasticsearch负载的时候不行了,你需要比2GB RAM更多的可用内存。
  ES_MIN_MEM/ES_MAX_MEM是控制堆大小的配置。新的ES_HEAP_SIZE变量是一个更为便利的选择,因为将堆的初始大小和大值设为相同。也推荐在分配堆内存时尽可能不要用内存的碎片。内存碎片对于性能优化来说非常不利。
  ES_HEAP_NEWSIZE是可选参数,它控制堆的子集大小,也是新生代的大小。
  ES_DIRECT_SIZE控制本机直接内存大小,即JVM管理NIO框架中使用的数据区域大小。本机直接内存可以被映射到虚拟地址空间上,这样在64位的机器上更高效,因为可以规避文件系统缓冲。Elasticsearch对本机直接内存没有限制(可能导致OOM)。
  由于历史原因Java虚拟机有多个垃圾收集器。可以通过以下的JVM参数组合启用:
JVM parameter Garbage collector
-XX:+UseSerialGC serial collector
-XX:+UseParallelGC parallel collector
-XX:+UseParallelOldGC Parallel compacting collector
-XX:+UseConcMarkSweepGC Concurrent-Mark-Sweep (CMS) collector
-XX:+UseG1GC Garbage-First collector (G1)
  UseParNewGC和UseConcMarkSweepGC组合启用垃圾收集器的并发多线程模式。UseConcMarkSweepGC自动选择UseParNewGC模式并禁用串行收集器(Serial collector)。在Java6中这是默认行为。
  CMSInitiatingOccupancyFraction提炼了一种CMS(Concurrent-Mark-Sweep)垃圾收集设置;它将旧生代触发垃圾收集的阀值设为75.旧生代的大小是堆大小减去新生代大小。这告诉JVM当堆内容达到75%时启用垃圾收集。这是个估计的值,因为越小的堆可能需要越早启动GC。
  UseCondCardMark将在垃圾收集器的card table使用时,在marking之前进行额外的判断,避免冗余的store操作。UseCondCardMark不影响Garbage-First收集器。强烈推荐在高并发场景下配置这个参数(规避card table marking技术在高并发场景下的降低吞吐量的负面作用)。在ElasticSearch中,这个参数是被注释掉的。
  有些配置可以参考诸如Apache Cassandra项目,他们在JVM上有类似的需求。
  总而言之,ElastciSearch配置上推荐:
  1. 不采用自动的堆内存配置,将堆大小默认大值设为1GB
  2.调整触发垃圾收集的阀值,比如将gc设为75%堆大小的时候触发,这样不会影响性能。
  3.禁用Java7默认的G1收集器,前提是你的ElasticSearch跑在Java7u4以上的版本上。