我有一个产品目录,正在使用Elastica客户端在ElasticSearch中建立索引。我是ElasticSearch BTW的新手。
我的目录中有't-shirt'一些名称相同的产品。但是,如果输入,它们将不会出现在搜索结果中'tshirt'。
't-shirt'
'tshirt'
我该怎么办't-shirt'才能弹出结果?
我已经按照本教程进行了学习,并为索引实现了以下内容:
'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' ) ) )
您可以尝试使用映射字符过滤器删除连字符:
http://www.elasticsearch.org/guide/zh- CN/elasticsearch/reference/current/analysis-mapping- charfilter.html
像这样会删除连字符:
{ "index" : { "analysis" : { "char_filter" : { "my_mapping" : { "type" : "mapping", "mappings" : ["-=>"] } }, "analyzer" : { "custom_with_char_filter" : { "tokenizer" : "standard", "char_filter" : ["my_mapping"] } } } } }
这是一种钝器,因为它会去除所有的连字符,但应使“ T恤”和“ T恤”匹配