Elasticsearch 映射參數詳解 fields

Elasticsearch 映射參數 fields

fields

處於不同的目的,通過不同的方法索引相同的字段通常非常有用。這也是多字段的目的。例如,一個字符串字段可以映射為text字段用於全文本搜索,也可以映射為keyword字段用於排序或聚合。

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "city": {
          "type": "text",
          "fields": {
            "raw": { 
              "type":  "keyword"
            }
          }
        }
      }
    }
  }
}

note:city.raw字段是city字段的keyword版本。

GET my_index/_search
{
  "query": {
    "match": {
      "city": "york" 
    }
  },
  "sort": {
    "city.raw": "asc" 
  },
  "aggs": {
    "Cities": {
      "terms": {
        "field": "city.raw" 
      }
    }
  }
}

note:city字段用於全文本搜索。

note:city.raw用於排序與聚合。

多字段不能修改原始_source字段。

對於相同索引中具有相同名稱的字段,fields設置允許有不同的設置。可以使用PUT映射API將新的多字段添加到已存在的字段中。

帶有多個分析的多字段

多字段的另一個應用場景是使用不同的方法分析相同的字段以求獲得更好的相關性。

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "text": { 
          "type": "text",
          "fields": {
            "english": { 
              "type":     "text",
              "analyzer": "english"
            }
          }
        }
      }
    }
  }
}

note:text.field字段使用english分析器。

elasticsearch註解實現fields

mapping效果:

"label": {
            "type": "keyword",
            "fields": {
              "IKS": {
                "type": "text",
                "analyzer": "ikIndexAnalyzer"
              }
            }
          }
@Column(name = "標簽")
    @MultiField(
            mainField = @Field(type = FieldType.Keyword),
            otherFields = {
                    @InnerField(suffix = "IKS", type = FieldType.Text, analyzer = "ikIndexAnalyzer")
            }
    )
    protected String label;

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: