我的类别字段中有很多带有翻译的类别。我已经为索引中的字段定义了语言分析器,以便我可以搜索它们。但它没有找到我的话的单数版本。 titles.title-nl
中的 wasmachine
是 wasmachines
的单数,但未找到。我错过了什么?
演示文档
"_source" : {
"google_id" : 2706,
"titles" : [
{
"title-en" : "laundry appliances",
"title-de" : "waschen & trocknen",
"title-fr" : "appareils de blanchisserie",
"title-nl" : "wasmachines"
}
]
}
我映射它们的方式
PUT categories/_mapping/category
{
"dynamic": false,
"properties": {
"titles.title-nl": {
"type": "text",
"analyzer": "dutch"
},
"titles.title-en": {
"type": "text",
"analyzer": "english"
},
"titles.title-de": {
"type": "text",
"analyzer": "german"
},
"titles.title-fr": {
"type": "text",
"analyzer": "french"
}
}
}
我搜索它们的方式
GET categories/_search
{
"size": 4,
"query": {
"multi_match": {
"query": "wasmachines",
"fields": ["titles.title-de","titles.title-en", "titles.title-fr", "titles.title-nl"]
}
}
}
最佳答案
问题是默认的荷兰语分析器不知道如何对单词 wasmachines
进行词干分析,您需要使用 stemmer_override
使用自定义分析器重新创建索引.
查看elastic documentation您可以执行以下操作来重新创建 dutch
分析器,并告诉 wasmachines
应词干为 wasmachine
,只需输入 wasmachine => wasmachines
位于 stemmer_override
PUT categories/
{
"settings": {
"analysis": {
"filter": {
"dutch_stop": {
"type": "stop",
"stopwords": "_dutch_"
},
"dutch_keywords": {
"type": "keyword_marker",
"keywords": ["voorbeeld"]
},
"dutch_stemmer": {
"type": "stemmer",
"language": "dutch"
},
"dutch_override": {
"type": "stemmer_override",
"rules": [
"fiets=>fiets",
"bromfiets=>bromfiets",
"wasmachine=>wasmachines",
"ei=>eier",
"kind=>kinder"
]
}
},
"analyzer": {
"rebuilt_dutch": {
"tokenizer": "standard",
"filter": [
"lowercase",
"dutch_stop",
"dutch_keywords",
"dutch_override",
"dutch_stemmer"
]
}
}
}
}
}
您还需要在映射中使用该新分析器:
PUT categories/_mapping/category
{
"dynamic": false,
"properties": {
"titles.title-nl": {
"type": "text",
"analyzer": "rebuilt_dutch"
},
"titles.title-en": {
"type": "text",
"analyzer": "english"
},
"titles.title-de": {
"type": "text",
"analyzer": "german"
},
"titles.title-fr": {
"type": "text",
"analyzer": "french"
}
}
}
之后您将能够搜索wasmachine
并获取包含wasmachines
的文档。
关于elasticsearch - 语言分析器无法找到单一结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55550115/