我想得到一个具有标准英语分析器行为的分析器,以及一组在搜索过程中应为同义词的单词。
这是我尝试的定义:
{
"analysis": {
"filter": {
"synonym_en": {
"type": "synonym",
"synonyms": [
"universe, cosmos",
"women, woman",
"man, men"
]
},
"my_filter": {
"type": "word_delimiter",
"preserve_original": "false",
"split_on_numerics": "false"
}
},
"analyzer": {
"my_analyzer": {
"type": "custom",
"filter": [
"my_filter"
],
"tokenizer": "keyword"
},
"my_english": {
"type": "english",
"stopwords": [
"a",
"an",
"and",
"are",
"as",
"at",
"be",
"but",
"by",
"for",
"if",
"into",
"is",
"it",
"of",
"on",
"or",
"such",
"that",
"the",
"their",
"then",
"there",
"these",
"they",
"this",
"to",
"was",
"will",
"with"
],
"filter": [
"synonym_en"
]
}
}
}
}
但是,我无法将其拖走。确实在我运行示例时:
GET /my_index/_analyze?analyzer=my_english&text='Men'
它只返回 token
men
,而我想同时拥有man
和men
。另请注意,更简单的分析仪
{
"settings": {
"analysis": {
"filter": {
"my_synonym_filter": {
"type": "synonym",
"synonyms": [
"british,english",
"queen,monarch",
"man,men"
]
}
},
"analyzer": {
"my_synonyms": {
"tokenizer": "standard",
"filter": [
"lowercase",
"my_synonym_filter"
]
}
}
}
}
}
似乎可以正常工作,因为它返回
man
和men
。我如何才能从英语分析器中获得所需的行为+?
最佳答案
这是因为同义词/过滤器不是为“英语”分析器配置的适用参数。
custom analyzer和内置分析器之间有区别。
内置分析仪仅允许配置某些参数。也就是说,对于语言分析器,它是stopwords ,stem exclusion。因此,忽略了英语分析器的 my_english 别名中的其余参数,可能更合适的行为是抛出错误。
另一方面,对于给定的 token 生成器,可以使用自定义分析器,可以添加其他 token 过滤器和char过滤器
无论如何,如果要对英语分析器使用同义词过滤器,则需要创建一个自定义分析器,该自定义分析器实现指定here的英语分析器。您可以为此添加同义词过滤器。
关于elasticsearch - 具有英语分析器的elasticsearch同义词过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27047100/