一尘不染

ElasticSearch-搜索名称中的连字符

elasticsearch

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

阅读 324

收藏
2020-06-22

共1个答案

一尘不染

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

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恤”匹配

2020-06-22