【发布时间】:2019-07-27 19:07:12
【问题描述】:
我试图在查询时提供分析器,但它不起作用。
- 创建索引
PUT 客户
- 关闭索引,然后使用分析器配置和打开索引更新索引设置
PUT customer_new/_settings
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 3,
"token_chars": [
"digit"
]
}
}
}
}
}
- 数据查询
获取客户/_搜索
{
"query": {
"match": {
"phonenumber": { "query":"678",
"analyzer": "my_analyzer"
}
}
}
}
但这不会返回任何结果。
- 关于解释查询
POST customer/_validate/query?explain
{
"query": {
"match": {
"phonenumber": { "query":"678",
"analyzer": "my_analyzer"
}
}
}
}
{
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"valid": true,
"explanations": [
{
"index": "customer",
"valid": true,
"explanation": "phonenumber:678"
}
]
}
我更新索引的原因是我已经有了索引。我想要做的是我可以接收不同的方式来搜索一个字段,所以我想动态添加分析器,然后在查询时使用它们。
我想如果我通过更新映射重新索引并在 phonenumber 字段中配置此分析器,这将起作用。但是就像我上面提到的那样,我不想重新索引,因为有数百万条记录,并且经常重新索引不是一种选择。
有没有办法解决这个问题?
【问题讨论】:
标签: elasticsearch