谁能给我一个小提示我做错了什么。
我正在尝试以这种方式设置elasticsearch
{
"settings" : {
"index" : {
"analysis" : {
"analyzer" : {
"synonym" : {
"type" : "custom",
"tokenizer" : "whitespace",
"filter" : ["en_US", "lowercase", "synonym"]
}
},
"filter" : {
"synonym" : {
"type" : "synonym",
"synonyms_path" : "analysis/synonym.txt"
},
"en_US" : {
"type" : "hunspell",
"locale" : "en_US",
"dedup" : true
}
}
}
}
},
"mappings" : {
"jdbc" : {
"properties" : {
"Title" : {
"type" : "string",
"search_analyzer" : "synonym",
"index_analyzer" : "standard"
},
"Abstract" : {
"type" : "string",
"search_analyzer" : "synonym",
"index_analyzer" : "standard"
}
}
}
}
}
我的synonym.txt文件包含
beer, ale, lager, cark ale
Lithuania, Republic of Lithuania, Lithuanian
现在是时候试用我的分析仪了:
http://localhost:9200/jdbc/_analyze?text=beer&analyzer=synonym&pretty=true
它按预期工作并返回我
{
"tokens" : [ {
"token" : "beer",
"start_offset" : 0,
"end_offset" : 4,
"type" : "SYNONYM",
"position" : 1
}, {
"token" : "ale",
"start_offset" : 0,
"end_offset" : 4,
"type" : "SYNONYM",
"position" : 1
}, {
"token" : "lager",
"start_offset" : 0,
"end_offset" : 4,
"type" : "SYNONYM",
"position" : 1
}, {
"token" : "cark",
"start_offset" : 0,
"end_offset" : 4,
"type" : "SYNONYM",
"position" : 1
}, {
"token" : "ale",
"start_offset" : 0,
"end_offset" : 4,
"type" : "SYNONYM",
"position" : 1
} ]
}
但是,查询此:
http://localhost:9200/jdbc/_analyze?text=Lithuanian&analyzer=synonym&pretty=true
仅返回:
{
"tokens" : [ {
"token" : "lithuanian",
"start_offset" : 0,
"end_offset" : 10,
"type" : "word",
"position" : 1
} ]
}
有小费吗?
最佳答案
在分析期间, token 过滤器将按指定的顺序应用。
因此,在上述情况下,“立陶宛”首先转换为小写的“立陶宛”。
由于同义词文件不包含这种情况下的 token 版本,因此不会发生同义词转换。
elasticsearch guide中的这一节将讨论更多。
根据用例,可以通过两种方法将自定义分析器中的 token 过滤器的顺序更改为:
"synonym" : {
"type" : "custom",
"tokenizer" : "whitespace",
"filter" : ["en_US", "synonym","lowercase"]
}
上面的内容仍然区分大小写,但转换与上面的内容一致
近义词
或者,您可以使analysis / synonym.txt中的所有同义词都变为小写,并保持与问题中指定的分析器相同。
例:
beer, ale, lager, cark ale
lithuania, republic of lithuania, lithuanian
关于jdbc - Elasticsearch同义词区分大小写的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27001624/