ElasticSearch nGram过滤掉标点符号

时间:2014-02-13 20:27:16

标签: elasticsearch tokenize n-gram

在我的ElasticSearch数据集中,我们拥有以句点分隔的唯一ID。样本编号可能类似于c.123.5432

使用nGram我希望能够搜索:c.123.54

这不会返回任何结果。我相信令牌器正在分裂期间。为了解释这一点,我在token_chars中添加了“标点符号”,但结果没有变化。我的分析器/标记器在下面。

我也尝试过:“token_chars”:[]< - 根据文档,这应该保留所有字符。

"settings" : {
    "index" : {
        "analysis" : {
            "analyzer" : {
                "my_ngram_analyzer" : {
                    "tokenizer" : "my_ngram_tokenizer"
                }
            },
            "tokenizer" : {
                "my_ngram_tokenizer" : {
                    "type" : "nGram",
                    "min_gram" : "1",
                    "max_gram" : "10",
                    "token_chars": [ "letter", "digit", "whitespace", "punctuation", "symbol" ]
                }
            }
        }
    }
},

修改(更多信息): 这是相关领域的映射:

"ProjectID":{"type":"string","store":"yes", "copy_to" : "meta_data"},

这是我正在复制它的字段(也有ngram分析器):

"meta_data" : { "type" : "string", "store":"yes", "index_analyzer": "my_ngram_analyzer"}

这是我正在使用的命令,以查看我的搜索是否有效(请参阅它正在搜索“meta_data”字段):

GET /_search?pretty=true
{ 
    "query": {
        "match": {
            "meta_data": "c.123.54"
        }
    }
}

1 个答案:

答案 0 :(得分:2)

来自https://github.com/elasticsearch/elasticsearch/issues/5120

的s1monw的解决方案

通过使用index_analyzer搜索仅使用标准分析器。为了解决这个问题,我将index_analyzer修改为了analyzer。请记住,结果的数量会大大增加,因此可能需要将min_gram更改为更高的数字。