ElasticSearch - 在名称中使用连字符进行搜索

时间:2014-05-13 17:04:47

标签: elasticsearch elastica

我有一个产品目录,我使用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'
        )
    )
)

1 个答案:

答案 0 :(得分:6)

您可以尝试使用映射字符过滤器删除连字符:

http://www.elasticsearch.org/guide/en/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恤”匹配