elasticsearch同义词过滤器与英文分析器

时间:2014-11-20 18:40:47

标签: elasticsearch analyzer synonym

我想得到一个分析器,其中包含标准英语分析器的行为,以及一组在搜索过程中应该是同义词的单词。

这是我尝试过的定义:

{
  "analysis": {
    "filter": {
      "synonym_en": {
        "type": "synonym",
        "synonyms": [
          "universe, cosmos",
          "women, woman",
          "man, men"
        ]
      },
      "my_filter": {
        "type": "word_delimiter",
        "preserve_original": "false",
        "split_on_numerics": "false"
      }
    },
    "analyzer": {
      "my_analyzer": {
        "type": "custom",
        "filter": [
          "my_filter"
        ],
        "tokenizer": "keyword"
      },
      "my_english": {
        "type": "english",
        "stopwords": [
          "a",
          "an",
          "and",
          "are",
          "as",
          "at",
          "be",
          "but",
          "by",
          "for",
          "if",
          "into",
          "is",
          "it",
          "of",
          "on",
          "or",
          "such",
          "that",
          "the",
          "their",
          "then",
          "there",
          "these",
          "they",
          "this",
          "to",
          "was",
          "will",
          "with"
        ],
        "filter": [
          "synonym_en"
        ]
      }
    }
  }
}

然而我无法将它拖到工作中。确实当我运行这个例子时:

GET /my_index/_analyze?analyzer=my_english&text='Men'

它只返回令牌men,而我希望同时拥有manmen

还请注意更简单的分析器

{
  "settings": {
    "analysis": {
      "filter": {
        "my_synonym_filter": {
          "type": "synonym", 
          "synonyms": [ 
            "british,english",
            "queen,monarch",
            "man,men"
          ]
        }
      },
      "analyzer": {
        "my_synonyms": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "my_synonym_filter" 
          ]
        }
      }
    }
  }
}

似乎可以返回manmen

我怎样才能从英语分析仪中获得理想的行为?

1 个答案:

答案 0 :(得分:2)

这是因为 同义词/过滤器 不适用于配置" english"分析仪。 custom analyzer和内置分析器之间存在差异。 内置分析仪仅允许某些参数可配置。即在语言分析器的情况下,它是stopwords ,stem exclusion 英语分析器的 my_english 别名中的其余参数 只是被忽略。可能这里更合适的行为是抛出错误。

另一方面,

自定义分析器对于给定的标记生成器,您可以添加其他标记过滤器和字符过滤器

无论如何,如果你想使用英文分析器的同义词过滤器,你需要创建一个自定义分析器来实现指定here的英语分析器。您可以为此添加同义词过滤器。