##Routing a document to a shard shard = hash(routing) % number_of_primary_shards 经过散列函数,计算出document存储的主分片,因此主分片数不能被修改。 routing默认是_id,也能够自定义(传参routing)。mysql
##creating,indexing,deleting a document 可选参数sql
##retrieving a document数组
##searchingapp
GET /_search?timeout=10ms 这里的timeout不会中止查询的执行,而是告诉分片把到timeout为止的数据返回并断开链接,虽然分片已经返回结果可是在后台分片可能仍然在处理查询。负载均衡
GET /index1,index2/type1,type2/_search异步
深分页问题(deep paging) """ GET /_search?size=10&from=10000 """ 也就是搜索10条一页,返回第10001到10010条数据,这时index的每一个分片都须要搜索top 10010条数据,而后合并排序再返回第10001到10010条数据,实际上另外的(number_of_primary_shards * 10010) - 10条数据都只是中间数据,只有10条数据是有效结果,因此搜索成本(cost)很大,应该尽可能避免这样的查询。async
_all Field 当索引一个document时,es会把全部的field的值链接起来组成一个大的字符串(big string),而后做为_all的值,当查询不指定field时,es会使用_all来查询。函数
##分词analysisfetch
##mappingcode
field types
string mapping
mapping在建立索引的时候指定 """ PUT /index { "mappings":{ "type_name":{ "properties":{ "field":{ "type":"string", "index":"not_analyzed" } } } } } """ mapping中已经存在的field不能被修改,但能够新增field """ PUT /index/_mapping/type_name { "properties":{ "field_new":{ "type":"string", "index":"not_analyzed" } } } """
array 数组的元素的类型必须一致,es会以数组的第一个元素的类型做为这个field的类型,数组是无序的。
Empty field
##Query DSL
performance
term filter 精确匹配field """ {"term":{"field":"value"}} """
terms filter 多值精确匹配field """ {"terms":{"field":["value1","value2","value3"]}} """
range,exists,missing,bool
match 可用于全文搜索,也可用于精确搜索。
检验query """ GET /index/type/_validate/query?explain {...} """ explain参数,能够返回错误缘由。
##排序
默认按_score降序;其余field默认升序
{"sort":{"date":{"order":"desc"}}}
多值的field mode:min,max,avg,sum
分词与不分词并存 """ "field":{ "type":"string", "analyzer":"english", "fields":{ "raw":{ "type":"string", "index":"not_analyzed" } } } """ 使用 field.raw
对分词的field排序会很是耗内存
相关度计算 TF/IDF:在一个document的field中的词频/在index的文档中出现的频率
fielddata
##distributed search execution
结果跳跃(bouncing results problem) 由于主从分片同步延迟,使从主分片读和从副本分片读的结果不同。 使用preference参数能够控制从哪一个分片或者节点搜索。
timeout 指定等待分片返回结果的时间,若是超时,分片立刻返回已经搜索到的结果。
routing 指定分片路由
search_type
scan,scroll