在地址字段的弹性搜索中输入查询时,我无法搜索数字,当我输入“ 11412”之类的数字时,即使存在具有该邮政编码的地址,也没有显示结果。
我尝试使用anaylzer设置来更改token_chars,包括无济于事的数字。以下是我的anaylzer设置,包括映射
SELECT table1.*
FROM table1
WHERE table1.day = date '2019-04-03' AND
NOT EXISTS (SELECT 1
FROM table2
WHERE table1.id = table2.id AND
table1.timestamp >= table2.start_time AND
table1.timestamp <= table2.end_time
)
在下面的弹性搜索查询中使用数字时,我没有任何结果,但是使用单词和部分匹配单词的常规搜索可以工作,尝试使用数字“ 11412”,“ 1141”进行相同的行为
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete": {
"tokenizer": "autocomplete",
"filter": [
"lowercase"
]
},
"autocomplete_search": {
"tokenizer": "lowercase"
}
},
"tokenizer": {
"autocomplete": {
"type": "edge_ngram",
"min_gram": 3,
"max_gram": 20,
"token_chars": [
"letter",
"digit"
]
}
}
}
},
"mappings": {
"properties": {
"address": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search"
}
}
}
}
答案 0 :(得分:1)
您遇到的问题是因为您正在使用lowercase
令牌生成器,该令牌生成器会在遇到非字母的字符时破坏令牌,因此没有数字将其转化为倒排索引。 / p>
将您的autocomplete_search
分析器更改为此,它将起作用:
"autocomplete_search": {
"tokenizer": "standard"
}