12.3.19 fields 原文链接 翻译:AbnerGong
fields
它常常用于索引不同目的不同方式的相同域。这是multi-fields多字段的目的。例如一个字符串域既可以用作分词域来进行全文检索,也可以用作不分词域来进行搜索或聚合。
PUT /my_index
{
"mappings": {
"my_type": {
"properties": {
"city": {
"type": "string",
"fields": {
"raw": { #注释1:city.raw字段是city字段的不分词版本
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
}
PUT /my_index/my_type/1
{
"city": "New York"
}
PUT /my_index/my_type/2
{
"city": "York" #注释2:分词字段city能用来全文搜索
}
GET /my_index/_search
{
"query": {
"match": {
"city": "york"
}
},
"sort": {
"city.raw": "asc" #注释3:city.raw字段能用来排序和聚合
},
"aggs": {
"Cities": {
"terms": {
"field": "city.raw" #注释4:city.raw字段能用来排序和聚合
}
}
}
}
【注意】Multi-fields不改变_source
字段。
【提示】fields
设置允许对相同索引中的同名字段有不同的设置。新的multi-fields能使用[PUT mapping API](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html)
添加到已经存在的字段中
用多分词器的多字段(Multi-fields)
另一个多字段(multi-fields)的用画图是分词相同的字段用不同的方式,为了更好的相关。例如我们可以索引一个字段用标准分词器分成单词,也可以再用英语分词器将它们变成词根形式
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"text": { #注释1:``text``字段使用标准分词器
"type": "string",
"fields": {
"english": { #注释2::``text.english``字段使用``english``分词器
"type": "string",
"analyzer": "english"
}
}
}
}
}
}
}
PUT my_index/my_type/1
{ "text": "quick brown fox" } #注释3:检索两个文档,一个用``fox``另一个用``foxes``
PUT my_index/my_type/2
{ "text": "quick brown foxes" } #注释4:同注释3
GET my_index/_search
{
"query": {
"multi_match": {
"query": "quick brown foxes",
"fields": [ #注释5:查询``text``和``text.english``字段并且组合得分
"text",
"text.english"
],
"type": "most_fields" #注释6:同注释5
}
}
}
text
字段包含了单词fox
在第一个文档中,并且在第二个文档中包含了foxes
。text.english
字段包含fox
在两个文档中,因为foxes
的词干(is stemmed to)是fox
查询字符串也能被text
字段的标准分词器分词,并且被text.english
字段的英语分词器分词。词干化字段允许foxes
的查询也匹配只包含fox
的文档。这允许我们匹配尽可能多的文档。通过也查询未词干化的text
字段,我们提供精确匹配foxes
的文档的相关得分。