我有一个相当简单的用例,但到目前为止,寻找合适的语法一直很痛苦。
我写了几个token过滤器:
searchkick **{
settings: {
analysis: {
filter: {
replace_mm: {
type: 'pattern_replace',
pattern: '(\\d)mm',
replacement: '$1 mm ',
},
replace_x_1: {
type: 'pattern_replace',
pattern: '(\\d) ?(×|x)',
replacement: '$1 x ',
},
replace_x_2: {
type: 'pattern_replace',
pattern: '(×|x) ?(\\d)',
replacement: ' x $2',
},
},
},
},
word_start: [
:name,
:alternate_names,
:description
],
highlight: [
:name,
],
我实际上如何使索引+搜索利用这些过滤器。我希望一切都保持默认,我想覆盖过滤器,再添加一些,因为其他一切都很完美。
merge_mappings
参数并提供自定义映射/设置。
searchkick merge_mappings: true, mappings: {...}, settings: {...}
如果你想添加额外的令牌过滤器,你还需要创建额外的分析器才能使用它们,因为你不能直接使用令牌过滤器,它们是分析链的一部分。因此,您以正确的方式开始,将令牌过滤器添加到自定义设置中,但现在您还需要向自定义设置中添加新的分析器,或覆盖现有的分析器。
工作的第二部分,也是提供自定义映射以利用新的分析器,除非您已经覆盖了您所在领域的现有分析器。
查看默认设置是如何定义的,您的设置结构需要像这样才能正确合并:
{
settings: {
analysis: {
filter: {
replace_mm: {
type: 'pattern_replace',
pattern: '(\\d)mm',
replacement: '$1 mm ',
},
replace_x_1: {
type: 'pattern_replace',
pattern: '(\\d) ?(×|x)',
replacement: '$1 x ',
},
replace_x_2: {
type: 'pattern_replace',
pattern: '(×|x) ?(\\d)',
replacement: ' x $2',
},
},
analyzer: {
my_new_analyzer: { ... },
existing_analyzer: { ... },
}
},
},
mappings: {
properties: {
your_field: {
type: text,
analyzer: my_new_analyzer
}
}
}
my_new_analyzer
将是一个新的分析器,您可以将其用于自定义映射(如果提供)中的一个字段,而 existing_analyzer
将是对现有分析器的覆盖,它考虑了您的新令牌过滤器。
您覆盖哪个分析器取决于您的字段类型,因为每种类型都有一个不同的分析器,名为
searchkick_#{type}_index
(完整列表可在此处)。
我希望这能让你走上正确的轨道。