支持如下语种:
arabic, 美 /ˈærəbɪk/ 阿拉伯语
armenian, 美 /ɑːrˈmiːniən/ 亚美尼亚语
basque, 美 /bæsk,bɑːsk/ 巴斯克语
bengali, 美 /beŋˈɡɑːli/ 孟加拉语
brazilian, 美 /brəˈzɪliən/ 巴西语
bulgarian, 美 /bʌlˈɡeriən/ 保加利亚语
catalan, 美 /ˈkætəlæn/ 加泰罗尼亚语
cjk, 中日韩统一表意文字
czech, 美 /tʃek/ 捷克语
danish, 美 /ˈdeɪnɪʃ/ 丹麦语
dutch, 美 /dʌtʃ/ 荷兰语
english, 美 /ˈɪŋɡlɪʃ/ 英语
estonian, 美 /eˈstoʊniən/ 爱沙尼亚语
finnish, 美 /ˈfɪnɪʃ/ 芬兰语
french, 美 /frentʃ/ 法语
galician, 美 /ɡəˈlɪʃn/ 加里西亚语
german, 美 /ˈdʒɜːrmən/ 德语
greek, 美 /ɡriːk/ 希腊语
hindi, 美 /ˈhɪndi/ 北印度语
hungarian, 美 /hʌŋˈɡeriən/ 匈牙利语
indonesian, 美 /ˌɪndəˈniːʒn/ 印度尼西亚语
irish, 美 /ˈaɪrɪʃ/ 爱尔兰语
italian, 美 /ɪˈtæliən/ 意大利语
latvian, 美 /ˈlætviən/ 拉脱维亚语
lithuanian, 美 /ˌlɪθuˈeɪniən/ 立陶宛语
norwegian, 美 /nɔːrˈwiːdʒən/ 挪威语
persian, /'pɜːrʒən/ 波斯语
portuguese, 美 /ˌpɔːrtʃʊˈɡiːz/ 葡萄牙语
romanian, 美 /ro'menɪən/ 罗马尼亚语
russian, 美 /ˈrʌʃn/ 俄语
sorani, 索拉尼语
spanish, 美 /ˈspænɪʃ/ 西班牙语
swedish, 美 /ˈswiːdɪʃ/ 瑞典语
turkish, 美 /ˈtɜːrkɪʃ/ 土耳其语
thai. 美 /taɪ/ 泰语
这个内置语言分词器可以作为自定义分词器去实现,为了定制它们的行为。
NOTE
如果你不打算排除被提取词干的单词(相当于上面的stem_exclusion参数),那么你应该从自定义分析器配置中删除keyword_marker标记过滤器。
词干提取排除
例如一个句子World Health Organization,这个跟分词替换为organ health 的结果。这是因为organ和organization有相同的词根:organ。通常这个不是什么大问题,但是在一些特殊的文档中就会导致有歧义的结果,所以我们希望防止单词organization和organizations被缩减为词干。
PUT /my_index { "mappings": { "blog": { "properties": { "title": { "type": "string", "analyzer": "english" // [1] } } } } }
GET /my_index/_analyze?field=title I'm not happy about the foxes
这个分词为:
i'm,happi,about,fox
我们无法分辨源文档中是包含单数 fox 还是复数 foxes ;单词 not 因为是停用词所以被移除了, 所以我们无法分辨源文档中是happy about foxes还是not happy about foxes,虽然通过使用 english (英语)分析器,使得匹配规则更加宽松,我们也因此提高了召回率,但却降低了精准匹配文档的能力。
为了获得两方面的优势,我们可以使用multifields(多字段)对 title 字段建立两次索引: 一次使用 english(英语)分析器,另一次使用 standard(标准)分析器:
PUT /my_index { "mappings": { "blog": { "properties": { "title": { // [1] "type": "string", "fields": { "english": { // [2] "type": "string", "analyzer": "english" } } } } } } }
[1]主 title 字段使用 standard(标准)分析器。
[2]title.english 子字段使用english(英语)分析器
替换为该字段映射后,我们可以索引一些测试文档来展示怎么在搜索时使用两个字段。
PUT /my_index/blog/1 { "title": "I'm happy for this fox" } PUT /my_index/blog/2 { "title": "I'm not happy about my fox problem" } GET /_search { "query": { "multi_match": { "type": "most_fields", // [1] "query": "not happy foxes", "fields": [ "title", "title.english" ] } } }
这个捷克语分词器可以被实现,作为一个自定义的分词器。
PUT /czech_example { "settings": { "analysis": { "filter": { "czech_stop": { "type": "stop", "stopwords": "_czech_" // [1] }, "czech_keywords": { "type": "keyword_marker", "keywords": ["příklad"] // [2] }, "czech_stemmer": { "type": "stemmer", "language": "czech" } }, "analyzer": { "rebuilt_czech": { "tokenizer": "standard", "filter": [ "lowercase", "czech_stop", "czech_keywords", "czech_stemmer" ] } } } } }
注释
[1] 这个默认的停止词可以被覆盖,设置这个stopwords 或者 stopwords_path
[2] 这个过滤器可以被删除,除非有一些单词应该被排除在词干中。
例子
GET /_analyze { "tokenizer": "whitespace", "filter": [ "stemmer" ], "text": "fox running and jumping" }
这个请求会产生如下的一些词组,比如running会被提取词干为run 和 jumping被提取为jump。
[ fox, run, and, jump ]
若不想被提取词干,则需要对单词进行标记,即keyword_marker参数过滤
GET /_analyze { "tokenizer": "whitespace", "filter": [ { "type": "keyword_marker", "keywords": [ "jumping" ] }, "stemmer" ], "text": "fox running and jumping" }
如下则为提取结果:
[ fox, run, and, jumping ]
jumping则没有被提取词干。