Shingle 标记过滤器
编辑Shingle 标记过滤器编辑
通过连接相邻标记,将 shingles 或词语 n-grams 添加到标记流中。默认情况下,shingle
标记过滤器输出双词 shingles 和 unigrams。
例如,许多分词器将 the lazy dog
转换为 [ the, lazy, dog ]
。您可以使用 shingle
过滤器将双词 shingles 添加到此流中:[ the, the lazy, lazy, lazy dog, dog ]
。
Shingles 通常用于帮助加快短语查询的速度,例如 match_phrase
。我们建议您不要使用 shingles
过滤器创建 shingles,而是在相应的 文本 字段上使用 index-phrases
映射参数。
此过滤器使用 Lucene 的 ShingleFilter。
示例编辑
以下 分析 API 请求使用 shingle
过滤器将双词 shingles 添加到 quick brown fox jumps
的标记流中
response = client.indices.analyze( body: { tokenizer: 'whitespace', filter: [ 'shingle' ], text: 'quick brown fox jumps' } ) puts response
GET /_analyze { "tokenizer": "whitespace", "filter": [ "shingle" ], "text": "quick brown fox jumps" }
该过滤器生成以下标记
[ quick, quick brown, brown, brown fox, fox, fox jumps, jumps ]
要生成 2-3 个词的 shingles,请将以下参数添加到分析 API 请求中
-
min_shingle_size
:2
-
max_shingle_size
:3
response = client.indices.analyze( body: { tokenizer: 'whitespace', filter: [ { type: 'shingle', min_shingle_size: 2, max_shingle_size: 3 } ], text: 'quick brown fox jumps' } ) puts response
GET /_analyze { "tokenizer": "whitespace", "filter": [ { "type": "shingle", "min_shingle_size": 2, "max_shingle_size": 3 } ], "text": "quick brown fox jumps" }
该过滤器生成以下标记
[ quick, quick brown, quick brown fox, brown, brown fox, brown fox jumps, fox, fox jumps, jumps ]
要仅在输出中包含 shingles,请将 output_unigrams
参数添加到请求中,其值为 false
。
response = client.indices.analyze( body: { tokenizer: 'whitespace', filter: [ { type: 'shingle', min_shingle_size: 2, max_shingle_size: 3, output_unigrams: false } ], text: 'quick brown fox jumps' } ) puts response
GET /_analyze { "tokenizer": "whitespace", "filter": [ { "type": "shingle", "min_shingle_size": 2, "max_shingle_size": 3, "output_unigrams": false } ], "text": "quick brown fox jumps" }
该过滤器生成以下标记
[ quick brown, quick brown fox, brown fox, brown fox jumps, fox jumps ]
添加到分析器编辑
以下 创建索引 API 请求使用 shingle
过滤器配置新的 自定义分析器。
response = client.indices.create( index: 'my-index-000001', body: { settings: { analysis: { analyzer: { standard_shingle: { tokenizer: 'standard', filter: [ 'shingle' ] } } } } } ) puts response
PUT /my-index-000001 { "settings": { "analysis": { "analyzer": { "standard_shingle": { "tokenizer": "standard", "filter": [ "shingle" ] } } } } }
可配置参数编辑
-
max_shingle_size
-
(可选,整数)创建 shingles 时要连接的最大标记数。默认为
2
。此值不能小于
min_shingle_size
参数,该参数默认为2
。此值与min_shingle_size
参数之间的差值不能超过index.max_shingle_diff
索引级设置,该设置默认为3
。 -
min_shingle_size
-
(可选,整数)创建 shingles 时要连接的最小标记数。默认为
2
。此值不能超过
max_shingle_size
参数,该参数默认为2
。max_shingle_size
参数与此值之间的差值不能超过index.max_shingle_diff
索引级设置,该设置默认为3
。 -
output_unigrams
- (可选,布尔值)如果为
true
,则输出包含原始输入标记。如果为false
,则输出仅包含 shingles;原始输入标记将被删除。默认为true
。 -
output_unigrams_if_no_shingles
-
如果为
true
,则仅当未生成 shingles 时,输出才包含原始输入标记;如果生成了 shingles,则输出仅包含 shingles。默认为false
。如果此参数和
output_unigrams
参数均为true
,则仅使用output_unigrams
参数。 -
token_separator
- (可选,字符串)用于连接相邻标记以形成 shingle 的分隔符。默认为空格 (
" "
)。 -
filler_token
-
(可选,字符串)在 shingles 中用作不包含标记的空位置的替换字符串。此填充标记仅在 shingles 中使用,而不在原始 unigrams 中使用。默认为下划线 (
_
)。某些标记过滤器(例如
stop
过滤器)在删除位置增量大于 1 的停用词时会创建空位置。示例
在以下 分析 API 请求中,
stop
过滤器从fox jumps a lazy dog
中删除了停用词a
,从而创建了一个空位置。后续的shingle
过滤器在 shingles 中将此空位置替换为加号 (+
)。response = client.indices.analyze( body: { tokenizer: 'whitespace', filter: [ { type: 'stop', stopwords: [ 'a' ] }, { type: 'shingle', filler_token: '+' } ], text: 'fox jumps a lazy dog' } ) puts response
GET /_analyze { "tokenizer": "whitespace", "filter": [ { "type": "stop", "stopwords": [ "a" ] }, { "type": "shingle", "filler_token": "+" } ], "text": "fox jumps a lazy dog" }
该过滤器生成以下标记
[ fox, fox jumps, jumps, jumps +, + lazy, lazy, lazy dog, dog ]
自定义编辑
要自定义 shingle
过滤器,请复制它以创建新的自定义标记过滤器的基础。您可以使用其可配置参数修改过滤器。
例如,以下 创建索引 API 请求使用自定义 shingle
过滤器 my_shingle_filter
来配置新的 自定义分析器。
my_shingle_filter
过滤器使用 min_shingle_size
为 2
且 max_shingle_size
为 5
,这意味着它会生成 2-5 个词的 shingles。该过滤器还包含一个 output_unigrams
参数,其值为 false
,这意味着输出中仅包含 shingles。
response = client.indices.create( index: 'my-index-000001', body: { settings: { analysis: { analyzer: { en: { tokenizer: 'standard', filter: [ 'my_shingle_filter' ] } }, filter: { my_shingle_filter: { type: 'shingle', min_shingle_size: 2, max_shingle_size: 5, output_unigrams: false } } } } } ) puts response
PUT /my-index-000001 { "settings": { "analysis": { "analyzer": { "en": { "tokenizer": "standard", "filter": [ "my_shingle_filter" ] } }, "filter": { "my_shingle_filter": { "type": "shingle", "min_shingle_size": 2, "max_shingle_size": 5, "output_unigrams": false } } } } }