现在的位置: 首页 > 综合 > 正文

ElasticSearch的_all域

2014年08月29日 ⁄ 综合 ⁄ 共 1031字 ⁄ 字号 评论关闭

       ElasticSearch默认为每个文档都定义了一个特殊的域 - '_all',它自动包含被索引文档中一个或者多个域中的内容,
在进行搜索时,如果不指明要搜索的文档的域,ElasticSearch则会去搜索_all域。_all带来搜索方便,其代价是增加了系统在索引阶段对CPU和存储空间资源的开销。

       默认情况,ElasticSarch自动使用_all所有的文档的域都会被加到_all中进行索引。可以使用"_all" : {"enabled":false} 开关禁用它。如果某个域不希望被加到_all中,可以使用 "include_in_all":false。例如:

{
   "person": {
      "_all": { "enabled": true }
      "properties": {
         "name": {
            "type": "object",
            "dynamic": false,
            "properties": {
               "first": {
                  "type": "string",
                  "store": true,
                  "include_in_all": false
               },
               "last": {
                  "type": "string",
                  "index": "not_analyzed"
               }
            }
         },
         "address": {
            "type": "object",
            "include_in_all": false,
            "properties": {
               "first": {
                  "properties": {
                     "location": {
                        "type": "string",
                        "store": true,
                        "index_name": "firstLocation"
                     }
                  }
               },
               "last": {
                  "properties": {
                     "location": {
                        "type": "string"
                     }
                  }
               }
            }
         },
         "simple1": {
            "type": "long",
            "include_in_all": true
         },
         "simple2": {
            "type": "long",
            "include_in_all": false
         }
      }
   }
}


查询时,_all和其它域一样使用:

GET /profiles/_search
{
    "query": {
        "match": {
           "_all": "food"
        }
    }
}


或者在不提供搜索域的情况下,默认会搜索_all,例如:

GET /profiles/_search
{
    "query": {
        "query_string": {
            "query": "food"
        }
    }
}

参考资源

1. Lucene Scoring
and elasticsearch’s _all Field





抱歉!评论已关闭.