如果你沒有太多的文件,你可以用一個regexp
query
POST /index/_search
{
"query" :{
"regexp":{
"name": "A12120.*"
}
}
}
去
甚至wildcard
one
POST /index/_search
{
"query": {
"wildcard" : { "name" : "A12120*" }
}
}
然而,隨着@Waldemar建議,如果你在你的指標,最好的辦法很多文件這是因爲上述查詢不是超高性能的,所以使用EdgeNGram
tokenizer。
首先,定義你這樣的指標設置:
PUT index
{
"settings" : {
"analysis" : {
"analyzer" : {
"my_analyzer" : {
"type": "custom",
"tokenizer" : "edge_tokens",
"filter": ["lowercase"]
}
},
"tokenizer" : {
"edge_tokens" : {
"type" : "edgeNGram",
"min_gram" : "1",
"max_gram" : "10",
"token_chars": [ "letter", "digit" ]
}
}
}
},
"mappings": {
"my_type": {
"properties": {
"name": {
"type": "string",
"analyzer": "my_analyzer",
"search_analyzer": "standard"
}
}
}
}
}
然後,索引的名字字段包含A1212001
文檔時,下面的標記將被索引:A
,A1
,A12
,A121
,A1212
, A12120
,A121200
,A1212001
。所以,當你搜索A12120
時,你會發現一個匹配。
來源
2016-04-15 03:28:05
Val
你想要搜索'A12120 *'? – Richa
我使用的版本是:elasticsearch-2.3.1 –