Analyzer,在Lucene中是一个分词器的概念,我们知道Es是建立在Lucene之上的,所以这里的Analzyer同样的也适用,Mapping 中的Analyzer主在是指定字段采用什么分词器,具体的程序和配置分词在插件和配置都有过一些说明。
Analyzer在Es中分为index_analyzer和search_analyzer
Index_analzyer:指的是索引过程中采用的分词器
Search_analyzer:指的是检索过程中采用的分词器
我们知道index和search是两个过程,但是尽量保证这两个过程和分词方式一致这样可以保证查全和查准,否则再牛B的分词,index和search采用的不相同也是无用功。
与analyzer与之相关的就是别外一项index项
"HC":{ "type":"string", "index":"no", "store":"no"}
Index表示该字段是否索引,如果index为no那个analyzer设为啥也没用。
最 后是”store”项了store项表示该项是否存储到倒索索引中去,并不是_source,当项mapping中还有很多可以设置和优化的地方,会面在 慢慢讨论。在mapping中index和store如果大家有时候觉得有点和source搞不清楚,大家可以参考lucene中的 Field.Store.YES,Field.Index.NOT_ANALYZED,Field.Index等相关设置就比较明白了。
-----------------------------------------------
云计算平台(检索篇)-Elasticsearch-索引优化篇
ES索引优化篇主要从两个方面解决问题,一是索引数据过程;二是检索过程。
索 引数据过程我在上面几篇文章中有提到怎么创建索引和导入数据,但是大家可能会遇到索引数据比较慢的过程。其实明白索引的原理就可以有针对性的进行优化。 ES索引的过程到相对Lucene的索引过程多了分布式数据的扩展,而这ES主要是用tranlog进行各节点之间的数据平衡。所以从上我可以通过索引的 settings进行第一优化:
"index.translog.flush_threshold_ops": "100000"
"index.refresh_interval": "-1",
这两个参数第一是到tranlog数据达到多少条进行平衡,默认为5000,而这个过程相对而言是比较浪费时间和资源的。所以我们可以将这个值调大一些还 是设为-1关闭,进而手动进行tranlog平衡。第二参数是刷新频率,默认为120s是指索引在生命周期内定时刷新,一但有数据进来能refresh像 lucene里面commit,我们知道当数据addDoucment会,还不能检索到要commit之后才能行数据的检索所以可以将其关闭,在最初索引 完后手动refresh一之,然后将索引setting里面的index.refresh_interval参数按需求进行修改,从而可以提高索引过程效 率。
另外的知道ES索引过程中如果有副本存在,数据也会马上同步到副本中去。我个人建议在索引过程中将副本数设为0,待索引完成后将副本数按需量改回来,这样也可以提高索引效率。
"number_of_replicas": 0
上面聊了一次索引过程的优化之后,我们再来聊一下检索速度比较慢的问题,其实检索速度快度与索引质量有很大的关系。而索引质量的好坏与很多因素有关。
http://www.cnblogs.com/zhangchenliang/p/4186702.html