我在elasticsearch中存储了“付款参考号”。在Elasticsearch中搜索加密文本
它的布局是例如:2-4-3-635844569819109531
或2-4-2-635844533758635433
等
我希望能够或者通过
- 使用“整体”参考号码搜索,以搜索由他们支付业务参考号文件,例如放入
2-4-2-635844533758635433
- 从'开始'的参考编号的任何'部分'。例如。
2-4-2-63
(..所以只返回第二个例子)
注意:我不想搜索'中间'或'结束'等仅从一开始。
无论如何,连字符令我困惑。
问题
1)我不知道我是否应该删除它们在映射像
"char_filter" : {
"removeHyphen" : {
"type" : "mapping",
"mappings" : ["-=>"]
}
},
与否。我从来没有以这种方式使用映射,所以不知道这是否有必要。
2)我想我需要一个'ngrams'过滤器,因为我希望能够从存在中搜索参考编号的一部分。我认为像
"partial_word":{
"filter":[
"standard",
"lowercase",
"name_ngrams"
],
"type":"custom",
"tokenizer":"whitespace"
},
和
"name_ngrams":{
"side":"front",
"max_gram":50,
"min_gram":2,
"type":"edgeNGram"
},
我不知道如何把它放在一起的过滤器,但
"paymentReference":{
"type":"string",
"analyzer": "??",
"fields":{
"partial":{
"search_analyzer":"???",
"index_analyzer":"partial_word",
"type":"string"
}
}
}
一切,我都试过,似乎总是“休息”在第二个搜索案例中。
如果我做'localhost:9200/orders/_analyze?field=paymentReference&pretty=1' -d "2-4-2-635844533758635433"
它总是打破连字符作为自己的令牌,并返回例如与2-
这是'很多'的所有文件!而不是我想要的时候2-4-2-6
有人能告诉我如何映射此字段的两种类型的搜索,我试图实现?
更新 - 答
切实什么瓦尔下面说。我只是稍微改变了映射,以更具体的分析器,我也不需要主索引的字符串,因为我只是查询部分。
映射
"paymentReference":{
"type": "string",
"index":"not_analyzed",
"fields": {
"partial": {
"search_analyzer":"payment_ref",
"index_analyzer":"payment_ref",
"type":"string"
}
}
}
分析
"payment_ref": {
"type": "custom",
"filter": [
"lowercase",
"name_ngrams"
],
"tokenizer": "keyword"
}
过滤
"name_ngrams":{
"side":"front",
"max_gram":50,
"min_gram":2,
"type":"edgeNGram"
},