我是elasticsearch的新手,我正在尝试配置同义词,但它没有按预期工作。
我的字段中有以下数据 1)Techincal Lead,模块负责人,软件工程师,高级软件工程师
我想如果我搜索tl然后它应该重新调整“技术主管”或“tl” 然而,它将返回“技术主管”和“模块主管”,因为铅在索引时被标记化。
请您帮我解决此问题的确切设置。
我已经看到索引时间和搜索时间标记化但无法理解。
synonyms.txt:
tl,TL =>技术主管
se,SE =>软件工程师
sse =>高级软件工程师
映射文件:
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"synonym": {
"tokenizer": "whitespace",
"filter": [
"synonym"
]
}
},
"filter": {
"synonym": {
"type": "synonym",
"synonyms_path": "synonyms.txt"
}
}
}
}
},
"mappings": {
"tweet": {
"properties": {
"Domain": {
"type": "string",
"analyzer": "synonym"
},
"Designation": {
"analyzer": "synonym",
"type": "string"
},
"City": {
"type": "string",
"analyzer": "synonym"
}
}
}
}
}
答案 0 :(得分:0)
你的代币在这里是相同的,所以你把那部分放下了。您需要做的是确保您正在进行“与”匹配,而不是“或”,因为它似乎只是匹配任何单词而非全部。
查看您的令牌:
localhost:9200/test/_analyze?analyzer=synonym&text=technical lead
localhost:9200/test/_analyze?analyzer=synonym&text=tl
和查询
{
"query": {
"match": {
"domain": {
"query": "tl",
"operator": "and"
}
}
}
}
通常您希望搜索和索引分析器相同。但是,有许多先进的例子,这是不可取的。但是,在使用同义词的情况下,通常您不希望在启用扩展时在一个或另一个中使用同义词。 即tl,技术主管
但是,因为你正在使用=>同义词的类型,这无关紧要,因为所有单词都会被转换为右边的单词,而不是为逗号之间的每个单词创建一堆标记。