2014年5月27日 星期二

[elasticsearch] _source field 搜尋結果如何不列出欄位




在使用elasticsearch 時, "_source" 這個然後會根據你 input 進來 index 時的document 儲存下來。

default 的情況下,會把你索引的docs的每個欄位都儲存下來。

這時候可能有些情況,
我只想索引他,也就使用query string做 query時,查找的到這個 document ,但是不想在_source 列出該欄位內容呢?

這時候可以使用  _source 提供的 includes ,excludes

{
    "my_type" : {
        "_source" : {
            "includes" : ["path1.*", "path2.*"],
            "excludes" : ["pat3.*"]
        }
    }
}

舉個實際例子來看,當你索引一個type為 logs的document 時,你想要讓 tag 這欄位是可以被搜尋的,但是不想讓他show 到 hit的 source內。

PUT http://localhost:9200/INDEX_NAME/
{
  "settings": {
    "analysis": {
      "analyzer": {
        "default": {
          "tokenizer": "keyword",
          "filter": "lowercase"
        }
      }
    }
  },
  "mappings": {
    "logs": {
      "_all": {
        "type": "string",
        "index": "analyzed",
        "analyzer": "standard"
      },
      "_source": {
        "excludes": [
          "tag"
        ]
      }
    }
  }
}

ref
_source
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-source-field.html

沒有留言:

張貼留言