【发布时间】:2014-02-13 20:27:16
【问题描述】:
在我的 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"
}
}
}
【问题讨论】:
-
使用以下命令测试它会发生什么:/
/_analyze?text="c.1234.56"&tokenizer=my_ngram_tokenizer -
@mconlin 我收到如下结果:pastebin.com/udrPLSy4
-
@mconlin 重要的一点:现有数据是“C.A1234.5678”。如果我搜索“1234”,我会得到一个结果。如果我搜索“A1234”,我什么也得不到。
-
你是对的,我只是无法让它工作..你是否尝试过发布到他的弹性搜索谷歌组或 es 的 github 问题页面,这两个地方都有很多核心开发人员,并且他们回答问题很快。
-
供参考,交叉发布到github:github.com/elasticsearch/elasticsearch/issues/5120
标签: elasticsearch tokenize n-gram