我有这样的带有嵌套条目的文档:
{
"query": {
"nested" : {
"path" : "listOfElements.entries",
"score_mode" : "avg",
"query" : {
"bool" : {
"must" : [
{ "match" : {"listOfElements.entries.key1" : "value3"} },
{ "match" : {"listOfElements.entries.key2" : "*" } }
]
}
}
}
}
}
因此,第二个条目中的*是实际的String值,而不是通配符。
现在,我正在尝试使用以下正文查询具有key1:value3和key2:*的所有文档:
"settings": {
"analysis": {
"analyzer": {
"rebuilt_standard": {
"tokenizer": "standard",
"char_filter": [
"replace_star_filter"
]
}
},
"char_filter": {
"replace_star_filter": {
"type": "mapping",
"mappings": [
"* => _star_"
]
}
}
}
}
但是,这根本不返回任何文档。
此外,使用“ \\ *”作为key2的查询参数也无济于事。
甚至可以查询*作为实际的String值而不是通配符吗?
在第一个答案后进行EDIT并提示分析器设置: 试图将我的索引配置为使用Elastic docs中所述的映射char_filter:
{
"analyzer": "rebuilt_standard",
"text": "I'm delighted about it *"
}
如果我手动调用分析网址(例如,有了这个身体
{
"tokens": [
{
"token": "I'm",
"start_offset": 0,
"end_offset": 3,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "delighted",
"start_offset": 4,
"end_offset": 13,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "about",
"start_offset": 14,
"end_offset": 19,
"type": "<ALPHANUM>",
"position": 2
},
{
"token": "it",
"start_offset": 20,
"end_offset": 22,
"type": "<ALPHANUM>",
"position": 3
},
{
"token": "_star_",
"start_offset": 23,
"end_offset": 24,
"type": "<ALPHANUM>",
"position": 4
}
]
}
我收到以下答复:
{{1}}
编辑2:我终于设法使它开始工作。我必须预先配置映射,以便特定字段可以使用我的自定义分析器。 对于我来说,棘手且出乎意料的是,当我运行搜索查询时,它将显示带有*的原始文档,但是如果我使用JSON Body从API运行查询,则可以使用 star 并获得匹配。