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

Hit*_*esh 6 elasticsearch elastica

我有一个产品目录,我使用Elastica客户端在ElasticSearch中编制索引.我是ElasticSearch BTW的新手.

我的目录中有些产品有'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'
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

Joh*_*one 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"]
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它是一种钝器力量的东西,因为它会剥掉所有连字符,但它应该使"T恤"和"T恤"匹配

  • 如果用户搜索"t shirt" (2认同)