2017-10-13 172 views
-1

有一个type参数它的价值的文字,并再次根据fields还有另一个type参数其价值的文字。我不明白englishanother是什么意思。你能告诉我什么是fields参数的功能,我们如何简单地使用或从中受益?Elasticsearch中字段的用法是什么?

PUT my_index 
{ 
    "mappings": { 
    "my_type": { 
     "properties": { 
     "text": { 
      "type": "text", 
      "fields": { 
      "english": { 
       "type":  "text", 
       "analyzer": "english" 
      }, 
      "another": { 
       "type":  "keyword", 
       "analyzer": "standard" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

回答

3

该结构被称为multi-field

背后的想法是能够对每个子字段应用不同的分析管道。在你的情况下,将使用english analyzer分析text.english子字段,并且text.another子字段将由standard analyzer分析。

它的妙处在于,你的文件只需要有一个text域,然后在你的查询,你就可以透明地引用texttext.englishtext.another子字段。

# Your document 
{ 
    "text": "The nice dog runs after the cat" 
} 

索引此文件后,

  • text.english子场你将有以下标记:nicedogrunaftercat
  • text.another子 - 你会有以下代币:the,nice,dog,runs,afterthecat
  • 终于在顶层text场你将有相同的标记在text.another因为standard分析仪也是默认的,当一个文本字段没有指定一个分析。
+0

我知道分析仪,但我们在设置>分析>分析仪> my_analyzer中定义它们。他们是不同的方式来定义分析仪?此外,我的文本字段的类型是文本,但在另一个类型是关键字。据我所知,我可以为不同的分析仪指定不同的类型参数,是吗? – Orhun

+1

在设置中,您可以定义[自定义分析程序](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-custom-analyzer.html),即根据自己的需要定制的自定义分析程序。在你的映射中,你可以使用内置的分析器(比如''english'和'standard',以及你在设置中定义的自定义分析器.'关键字'字段不经过任何分析过程,这些字段的内容按原样存储在单个标记中 – Val

+1

在关键字字段中,您可以使用所谓的[标准化程序](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis -normalizers.html),你可以在其中应用几个转换到你的非分析字段(小写等) – Val

相关问题