常用 grams 符号过滤器编辑

为一组指定的常用词生成二元语法

例如,您可以指定 isthe 作为常用词。然后,此过滤器会将符号 [the, quick, fox, is, brown] 转换为 [the, the_quick, quick, fox, fox_is, is, is_brown, brown]

当您不想完全忽略常用词时,可以使用 common_grams 过滤器代替停用词过滤器

此过滤器使用 Lucene 的CommonGramsFilter

示例编辑

以下分析 API 请求为 isthe 创建二元语法

response = client.indices.analyze(
  body: {
    tokenizer: 'whitespace',
    filter: [
      {
        type: 'common_grams',
        common_words: [
          'is',
          'the'
        ]
      }
    ],
    text: 'the quick fox is brown'
  }
)
puts response
GET /_analyze
{
  "tokenizer" : "whitespace",
  "filter" : [
    {
      "type": "common_grams",
      "common_words": ["is", "the"]
    }
  ],
  "text" : "the quick fox is brown"
}

该过滤器生成以下符号

[ the, the_quick, quick, fox, fox_is, is, is_brown, brown ]

添加到分析器编辑

以下创建索引 API 请求使用 common_grams 过滤器来配置新的自定义分析器

response = client.indices.create(
  index: 'common_grams_example',
  body: {
    settings: {
      analysis: {
        analyzer: {
          index_grams: {
            tokenizer: 'whitespace',
            filter: [
              'common_grams'
            ]
          }
        },
        filter: {
          common_grams: {
            type: 'common_grams',
            common_words: [
              'a',
              'is',
              'the'
            ]
          }
        }
      }
    }
  }
)
puts response
PUT /common_grams_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "index_grams": {
          "tokenizer": "whitespace",
          "filter": [ "common_grams" ]
        }
      },
      "filter": {
        "common_grams": {
          "type": "common_grams",
          "common_words": [ "a", "is", "the" ]
        }
      }
    }
  }
}

可配置参数编辑

common_words

(必填*,字符串数组)符号列表。该过滤器为这些符号生成二元语法。

此参数或 common_words_path 参数是必需的。

common_words_path

(必填*,字符串)包含符号列表的文件的路径。该过滤器为这些符号生成二元语法。

此路径必须是绝对路径或相对于 config 位置的路径。该文件必须采用 UTF-8 编码。文件中的每个符号必须用换行符分隔。

此参数或 common_words 参数是必需的。

ignore_case
(可选,布尔值)如果为 true,则匹配常用词时不区分大小写。默认为 false
query_mode

(可选,布尔值)如果为 true,则该过滤器会从输出中排除以下符号

  • 常用词的单元语法
  • 后跟常用词的词语的单元语法

默认为 false。我们建议为搜索分析器启用此参数。

例如,您可以启用此参数并将 isthe 指定为常用词。此过滤器会将符号 [the, quick, fox, is, brown] 转换为 [the_quick, quick, fox_is, is_brown,]

自定义编辑

要自定义 common_grams 过滤器,请复制它以创建新的自定义符号过滤器的基础。您可以使用其可配置参数修改该过滤器。

例如,以下请求创建了一个自定义的 common_grams 过滤器,其中 ignore_casequery_mode 设置为 true

response = client.indices.create(
  index: 'common_grams_example',
  body: {
    settings: {
      analysis: {
        analyzer: {
          index_grams: {
            tokenizer: 'whitespace',
            filter: [
              'common_grams_query'
            ]
          }
        },
        filter: {
          common_grams_query: {
            type: 'common_grams',
            common_words: [
              'a',
              'is',
              'the'
            ],
            ignore_case: true,
            query_mode: true
          }
        }
      }
    }
  }
)
puts response
PUT /common_grams_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "index_grams": {
          "tokenizer": "whitespace",
          "filter": [ "common_grams_query" ]
        }
      },
      "filter": {
        "common_grams_query": {
          "type": "common_grams",
          "common_words": [ "a", "is", "the" ],
          "ignore_case": true,
          "query_mode": true
        }
      }
    }
  }
}