语言分析器和elasticsearch中相同字段的同义词

时间:2016-10-18 10:31:18

标签: elasticsearch

我在字段标题描述上有一个德语分析器(它对我来说很好)

"mappings": {
    "item" : {
      "properties" : {
        "title" : {
          "type" :    "string",
          "analyzer": "german"
        },
        "description" : {
          "type" :   "string",
          "analyzer": "german"
        }
      }
    }
  } 

但现在我尝试添加synonyms。如何在同一个领域添加两个分析仪?

1 个答案:

答案 0 :(得分:1)

您无法为1个字段添加两个分析器。你可以做的是描述自定义分析器,它使用内部的同义词过滤器和德国特定的过滤器结合所需的标记器,所以基本上你需要以自定义的方式混合你需要的一切。

可以想象这样的事情(一个非常粗略的例子):

PUT /my_index
    {
      "settings": {
        "analysis": {
          "filter": {
            "german_stop": {
              "type":       "stop",
              "stopwords":  "_german_" 
            },
            "german_stemmer": {
              "type":       "stemmer",
              "language":   "light_german"
            },
            "my_synonyms": {
              "type": "synonym", 
              "synonyms": [ 
                "british,english",
                "queen,monarch"
              ]
            }
          },
          "analyzer": {
            "german": {
              "tokenizer":  "standard",
              "filter": [
                "lowercase",
                "german_stop",
                "my_synonyms",
                "german_normalization",
                "german_stemmer"
              ]
            }
          }
        }
      }
    }

在过滤器链中,您需要指定要包含的所有过滤器 - 词干分析器,同义词,停用词,小写等等(还要记住,顺序很重要),并在映射中使用它,正如你在问题中描述的那样。

稍后您可以通过运行

来测试您的分析仪
GET /_analyze
{
  "analyzer": "german",
  "text": "Darf ich mit Bargeld bezahlen?"
}