常用 grams 分词器

编辑

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

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

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

此分词器使用 Lucene 的CommonGramsFilter

示例

编辑

下面的分析 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
        }
      }
    }
  }
}