所以从this page上的文档看来,似乎我可以用标记器,标记过滤器和字符过滤器构建自定义瞬态分析器,并使用Analyze API对我的示例文本进行测试
目标是我想看看synonym token filter是否满足我的需求,哪些术语被标记为同义词,哪些术语不被标记为同义词。
但是当我做的时候
curl -XGET' localhost:9200 / _analyze?char_filters = html_strip& tokenizer = whitespace& token_filters = synonym' -d'男人和男人是相同的'
而不是得到结果,我得到
{
"error": "ElasticsearchIllegalArgumentException[failed to find global token filter under [synonym]]",
"status": 400
}
我在这里做错了什么想法?
答案 0 :(得分:0)
目前无法使用ad-hoc同义词令牌过滤器,因为实现需要“访问索引的tokenizer工厂”。 (请参阅elasticsearch Github issue。)不幸的是,docs on using custom token filters on the _analyze endpoint
目前没有记录此限制以下是使用重新打开索引的方法创建和更新同义词标记过滤器的一些示例命令:
# create index with filter
curl -v -X PUT -s -H 'Content-Type: application/json' 'localhost:9200/syn_test_idx' -d '
{
"settings" : {
"analysis" : {
"filter" : {
"test_synonym_filter" : {
"type" : "synonym",
"synonyms" : [
"i-pod, i pod => ipod",
"universe, cosmos"
]
}
}
}
}
}
# test token filter
' | jq .
curl -X POST -s -H 'Content-Type: application/json' 'localhost:9200/syn_test_idx/_analyze' -d '{
"tokenizer": "standard",
"filter": ["global_synonym_filter"],
"text": "cow i phone"
}' | jq .
(“i phone”未被同义词列表捕获。)
# update index
curl -X POST -s 'localhost:9200/syn_test_idx/_close' | jq .
curl -X PUT -s -H 'Content-Type: application/json' 'localhost:9200/syn_test_idx/_settings' -d '{
"analysis" : {
"filter": {
"test_synonym_filter":{
"type":"synonym",
"synonyms" : [
"i-pod, i pod => ipod",
"universe, cosmos",
"i-phone, i phone => iphone"
]
}
}
}
}' | jq .
curl -X POST -s 'localhost:9200/syn_test_idx/_open' | jq .
# test token filter
' | jq .
curl -X POST -s -H 'Content-Type: application/json' 'localhost:9200/syn_test_idx/_analyze' -d '{
"tokenizer": "standard",
"filter": ["global_synonym_filter"],
"text": "cow i phone"
}' | jq .
(“i phone”由同义词列表翻译成“iphone”。)
(在一个不相关的说明中,我的zsh / YADR设置由于某种原因没有显示帖子响应主体,因此我通过jq
进行管道传输。)