elasticsearch - 具有英语分析器的elasticsearch同义词过滤器

标签 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'

它只返回 token 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

我如何才能从英语分析器中获得所需的行为+?

最佳答案

这是因为同义词/过滤器不是为“英语”分析器配置的适用参数。
custom analyzer和内置分析器之间有区别。
内置分析仪仅允许配置某些参数。也就是说,对于语言分析器,它是stopwords ,stem exclusion。因此,忽略了英语分析器 my_english 别名中的其余参数,可能更合适的行为是抛出错误。

另一方面,对于给定的 token 生成器,可以使用自定义分析器,可以添加其他 token 过滤器和char过滤器

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

关于elasticsearch - 具有英语分析器的elasticsearch同义词过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27047100/

相关文章:

php - 如何为ElasticSearch聚合添加条件(最小/最大)?

search - ElasticSearch自动完成

elasticsearch - 比赛未能通过Elasticsearch

oracle - 如何检查Oracle中所有无效的同义词

sql - Oracle 脚本 - 物化 View 和同义词

elasticsearch - 在与类型 [doc] 的映射中找不到 [path] 的字段

elasticsearch - 换行符或标点符号作为 Elasticsearch 中的位置间隙

java - 什么lucene分析器可以用来处理日语文本?

java - "Synonyms"类

c# - C#Elastic Search-需要向Elastic index对象添加新参数并将其默认值设置为所有其他对象