Elasticsearch:在我的英语分析器上添加一个同义词过滤器
Elasticsearch: add a synonym filter on my english analyser
我有一个索引,其中的字段描述是这样分析的:
"description":{
"analyzer" : "english",
"type" : "string"
}
我在文件 synonyms.txt 中定义了一个同义词词典,其中包含:
ipod, i-pod, i pod => i-pod
我想将这个同义词词典添加到我的分析器中,但我不知道该怎么做。我应该定义一个自定义分析器吗?但是如果我这样做,我会因为这个 customisation.index
而偏离我当前的索引
是的,您应该定义一个自定义分析器。您可以从 standard English analyzer 开始,然后将您的同义词过滤器添加到其中:
{
"settings": {
"analysis": {
"filter": {
"english_stop": {
"type": "stop",
"stopwords": "_english_"
},
"english_keywords": {
"type": "keyword_marker",
"keywords": []
},
"english_stemmer": {
"type": "stemmer",
"language": "english"
},
"english_possessive_stemmer": {
"type": "stemmer",
"language": "possessive_english"
},
"my_synonyms" : {
"type" : "synonym",
"synonyms_path" : "path/to/synonym.txt"
}
},
"analyzer": {
"custom_english": {
"tokenizer": "standard",
"filter": [
"english_possessive_stemmer",
"lowercase",
"my_synonyms",
"english_stop",
"english_keywords",
"english_stemmer"
]
}
}
}
}
}
至于会不会发散,是的。如果您将同义词用作索引时间,新索引的数据将应用同义词过滤器,现有数据则不会。如果您希望对索引时间分析的更改始终如一地应用,您需要重新索引数据。
如果对分析的更改仅在您的 search_analyzer
中,则无需重新索引。
我有一个索引,其中的字段描述是这样分析的:
"description":{
"analyzer" : "english",
"type" : "string"
}
我在文件 synonyms.txt 中定义了一个同义词词典,其中包含:
ipod, i-pod, i pod => i-pod
我想将这个同义词词典添加到我的分析器中,但我不知道该怎么做。我应该定义一个自定义分析器吗?但是如果我这样做,我会因为这个 customisation.index
而偏离我当前的索引是的,您应该定义一个自定义分析器。您可以从 standard English analyzer 开始,然后将您的同义词过滤器添加到其中:
{
"settings": {
"analysis": {
"filter": {
"english_stop": {
"type": "stop",
"stopwords": "_english_"
},
"english_keywords": {
"type": "keyword_marker",
"keywords": []
},
"english_stemmer": {
"type": "stemmer",
"language": "english"
},
"english_possessive_stemmer": {
"type": "stemmer",
"language": "possessive_english"
},
"my_synonyms" : {
"type" : "synonym",
"synonyms_path" : "path/to/synonym.txt"
}
},
"analyzer": {
"custom_english": {
"tokenizer": "standard",
"filter": [
"english_possessive_stemmer",
"lowercase",
"my_synonyms",
"english_stop",
"english_keywords",
"english_stemmer"
]
}
}
}
}
}
至于会不会发散,是的。如果您将同义词用作索引时间,新索引的数据将应用同义词过滤器,现有数据则不会。如果您希望对索引时间分析的更改始终如一地应用,您需要重新索引数据。
如果对分析的更改仅在您的 search_analyzer
中,则无需重新索引。