我有一个产品目录,我使用Elastica客户端在ElasticSearch中编制索引。我是ElasticSearch BTW的新手。
我的目录中有些产品名称中包含't-shirt'
。但是,如果我输入'tshirt'
,它们就不会出现在搜索结果中。
我该怎么办才能在结果中弹出't-shirt'
?
我遵循了this教程并为索引实现了以下内容:
'analysis' => array(
'analyzer' => array(
'indexAnalyzer' => array(
'type' => 'custom',
'tokenizer' => 'whitespace',
'filter' => array('lowercase', 'mySnowball')
),
'searchAnalyzer' => array(
'type' => 'custom',
'tokenizer' => 'whitespace',
'filter' => array('lowercase', 'mySnowball')
)
),
'filter' => array(
'mySnowball' => array(
'type' => 'snowball',
'language' => 'English'
)
)
)
答案 0 :(得分:6)
您可以尝试使用映射字符过滤器删除连字符:
这样的东西会删除连字符:
{
"index" : {
"analysis" : {
"char_filter" : {
"my_mapping" : {
"type" : "mapping",
"mappings" : ["-=>"]
}
},
"analyzer" : {
"custom_with_char_filter" : {
"tokenizer" : "standard",
"char_filter" : ["my_mapping"]
}
}
}
}
}
它是一种钝器力量,因为它会剥掉所有连字符,但它应该使“T恤”和“T恤”匹配