在我的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"
}
}
}
答案 0 :(得分:2)
来自https://github.com/elasticsearch/elasticsearch/issues/5120
的s1monw的解决方案通过使用index_analyzer搜索仅使用标准分析器。为了解决这个问题,我将index_analyzer修改为了analyzer。请记住,结果的数量会大大增加,因此可能需要将min_gram更改为更高的数字。