常用词元过滤器

编辑

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

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

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

此过滤器使用 Lucene 的 CommonGramsFilter

示例

编辑

以下 analyze API 请求为 isthe 创建二元词组

resp = client.indices.analyze(
    tokenizer="whitespace",
    filter=[
        {
            "type": "common_grams",
            "common_words": [
                "is",
                "the"
            ]
        }
    ],
    text="the quick fox is brown",
)
print(resp)
response = client.indices.analyze(
  body: {
    tokenizer: 'whitespace',
    filter: [
      {
        type: 'common_grams',
        common_words: [
          'is',
          'the'
        ]
      }
    ],
    text: 'the quick fox is brown'
  }
)
puts response
const response = await client.indices.analyze({
  tokenizer: "whitespace",
  filter: [
    {
      type: "common_grams",
      common_words: ["is", "the"],
    },
  ],
  text: "the quick fox is brown",
});
console.log(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 过滤器来配置新的自定义分析器

resp = client.indices.create(
    index="common_grams_example",
    settings={
        "analysis": {
            "analyzer": {
                "index_grams": {
                    "tokenizer": "whitespace",
                    "filter": [
                        "common_grams"
                    ]
                }
            },
            "filter": {
                "common_grams": {
                    "type": "common_grams",
                    "common_words": [
                        "a",
                        "is",
                        "the"
                    ]
                }
            }
        }
    },
)
print(resp)
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
const response = await client.indices.create({
  index: "common_grams_example",
  settings: {
    analysis: {
      analyzer: {
        index_grams: {
          tokenizer: "whitespace",
          filter: ["common_grams"],
        },
      },
      filter: {
        common_grams: {
          type: "common_grams",
          common_words: ["a", "is", "the"],
        },
      },
    },
  },
});
console.log(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

resp = client.indices.create(
    index="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
                }
            }
        }
    },
)
print(resp)
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
const response = await client.indices.create({
  index: "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,
        },
      },
    },
  },
});
console.log(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
        }
      }
    }
  }
}