本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。 Elasticsearch: 权威指南 » 处理人类语言 » 开始处理各种语言 » 每份文档一种语言 « 混合语言的陷阱 每个域一种语言 »
每份文档一种语言编辑
每个主语言文档
只需要相当简单的设置。 不同语言的文档被分别存放在不同的索引中 — blogs-en
、
blogs-fr
, 如此等等 — 这样每个索引就可以使用相同的类型和相同的域,只是使用不同的分析器:
PUT /blogs-en { "mappings": { "post": { "properties": { "title": { "type": "string", "fields": { "stemmed": { "type": "string", "analyzer": "english" } }}}}}} PUT /blogs-fr { "mappings": { "post": { "properties": { "title": { "type": "string", "fields": { "stemmed": { "type": "string", "analyzer": "french" } }}}}}}
|
索引 |
|
|
这个方法干净且灵活。新语言很容易被添加 — 仅仅是创建一个新索引--因为每种语言都是彻底的被分开, 我们不用遭受在 混合语言的陷阱 中描述的词频和词干提取的问题。
每一种语言的文档都可被独立查询,或者通过查询多种索引来查询多种语言。
我们甚至可以使用 indices_boost
参数为特定的语言添加优先权
:
GET /blogs-*/post/_search { "query": { "multi_match": { "query": "deja vu", "fields": [ "title", "title.stemmed" ] "type": "most_fields" } }, "indices_boost": { "blogs-en": 3, "blogs-fr": 2 } }
|
这个查询会在所有以 |
|
|
| 也许用户接受语言标头表明,更倾向于英语,然后是法语,所以相应的,我们会为每个索引的结果添加权重。任何其他语言会有一个中性的权重 1 。 |
外语单词编辑
当然,有些文档含有一些其他语言的单词或句子,且不幸的是这些单词被切为了正确的词根。对于主语言文档,这通常并不是主要的问题。用户经常需要搜索很精确的单词--例如,一个其他语言的引用--而不是语型变化过的单词。召回率 (Recall)可以通过使用 归一化词元 中讲解的技术提升。
假设有些单词例如地名应当能被主语言和原始语言都能检索,例如 Munich 和 München 。 这些单词实际上是我们在 同义词 解释过的同义词。
不要对语言使用类型
你也许很倾向于为每个语言使用分开的类型, 来代替使用分开的索引。 为了达到最佳效果,你应当避免使用类型。在 类型和映射 解释过,不同类型但有相同域名的域会被索引在 相同的倒排索引 中。这意味着不同类型(和不同语言)的词频混合在了一起。
为了确保一种语言的词频不会污染其他语言的词频,在后面的章节中会介绍到,无论是为每个语言使用单独的索引,还是使用单独的域都可以。
« 混合语言的陷阱 每个域一种语言 »Getting Started Videos
- Starting Elasticsearch
- Introduction to Kibana
- Logstash Starter Guide
官方地址:https://www.elastic.co/guide/cn/elasticsearch/guide/current/one-lang-docs.html