dch*_*har 8 wildcard elasticsearch
我在Elasticsearch中有一个字段,其值为"PEI.H.02354.01.".当我用querystringas 搜索时
{
"query":{
"query_string":{
"query":"field:PEI.H.02354.01.",
"default_operator":"AND"
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后返回一个结果,这是正确的行为.但是,如果我使用通配符搜索,则不会返回任何结果,例如
{
"query":{
"query_string":{
"query":"field:PEI.H.02354.01.*",
"default_operator":"AND"
}
}
}
Run Code Online (Sandbox Code Playgroud)
该字段是字符串类型并进行分析.下面是创建索引的代码,包括分析器和映射.
{
"settings":{
"analysis":{
"analyzer":{
"number":{
"type":"custom",
"tokenizer":"keyword",
"filter":[
"lowercase"
],
"char_filter":[
"number_filter"
]
},
"diacritical":{
"type":"custom",
"tokenizer":"standard",
"filter":[
"standard",
"lowercase",
"asciifolding",
"nfd_normalizer"
]
}
},
"filter":{
"nfd_normalizer":{
"type":"icu_normalizer",
"name":"nfc"
}
},
"char_filter":{
"number_filter":{
"type":"pattern_replace",
"pattern":"[^\\d]+",
"replacement":""
}
}
}
},
"mappings":{
"testType":{
"_source":{
"enabled":false
},
"_all":{
"enabled":false
},
"_timestamp":{
"enabled":"true",
"store":"yes"
},
"properties":{
"field":{
"store":"yes",
"type":"string",
"index":"analyzed",
"analyzer":"diacritical"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后,插入样本
{
field: "PEI.H.02354.01."
}
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会这样,以及如何解决这个问题?
请参阅query_string文档:
默认情况下不分析通配符 - 它们是小写的(lowercase_expanded_terms默认为true)但不进行进一步分析
您存储的数据分为两个术语:
curl -XGET 'localhost:9200/myindex/_analyze?analyzer=diacritical&pretty' -d 'PEI.H.02354.01'
{
"tokens" : [ {
"token" : "pei.h",
"start_offset" : 0,
"end_offset" : 5,
"type" : "<ALPHANUM>",
"position" : 1
}, {
"token" : "02354.01",
"start_offset" : 6,
"end_offset" : 14,
"type" : "<NUM>",
"position" : 2
} ]
}
Run Code Online (Sandbox Code Playgroud)
但由于您的搜索字词只带有通配符pei.h.02354.01.*,因此不匹配.
但是如果analyze_wildcard设置为true,则会获得命中:
curl -XGET "http://localhost:9200/myindex/testType/_search?pretty" -d'
> {
> "query":{
> "query_string":{
> "query":"field:PEI.H.02354.01.*",
> "default_operator":"AND",
> "analyze_wildcard": true
> }
> }
> }'
{
"took" : 5,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 2,
"max_score" : 1.4142135,
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6562 次 |
| 最近记录: |