我正在尝试部分匹配数字字段。在下面的查询中,我希望id(定义为long)匹配任何以419开头的文档。(所以4191应该匹配,419534应该匹配,但不是123419)
{
"size": 20,
"from": 0,
"sort": [{
"customerName": "asc"
}],
"query": {
"bool": {
"must": [{
"bool": {
"should": [{
"term": {
"id": 419
}
}]
}
}]
}
}
}
任何人都可以在我的查询中使用一个简洁的解决方案吗?
答案 0 :(得分:1)
要避免使用egde ngram,您可以在id映射中声明一个未分析的文本子字段:
"mappings": {
"default": {
"properties": {
"id": {
"type": "integer",
"fields": {
"prefixed": {
"type": "string",
"index": "not_analyzed"
}
}
},
...
}
}
}
并对该字段使用prefix query:
"query": {
"prefix" : {
"id.prefixed" : { "value" : 419 }
}
}
答案 1 :(得分:-1)
在字符串字段中,您可以使用通配符查询:
{
"query" : {
"wildcard" : { "id" : "*419*" }
}
}