我想得到一个分析器,其中包含标准英语分析器的行为,以及一组在搜索过程中应该是同义词的单词。
这是我尝试过的定义:
{
"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'
它只返回令牌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
。
我怎样才能从英语分析仪中获得理想的行为?
答案 0 :(得分:2)
这是因为 同义词/过滤器 不适用于配置" english"分析仪。 custom analyzer和内置分析器之间存在差异。 内置分析仪仅允许某些参数可配置。即在语言分析器的情况下,它是stopwords ,stem exclusion。 英语分析器的 my_english 别名中的其余参数 只是被忽略。可能这里更合适的行为是抛出错误。
另一方面,自定义分析器对于给定的标记生成器,您可以添加其他标记过滤器和字符过滤器
无论如何,如果你想使用英文分析器的同义词过滤器,你需要创建一个自定义分析器来实现指定here的英语分析器。您可以为此添加同义词过滤器。