我发现通配符高亮的行为几乎没有什么不同。 当我使用单个“ ”(即通配符)进行搜索时,它不会突出显示任何值。 但是,如果我使用两个或多个“ ”(即通配符)进行同样的操作,它将突出显示所有值。 尽管获取的结果是相同的,但为什么高光显示会有这样的差异? 例子:
{
"from": 0,
"size": 10,
"_source": {
"includes": [
"ID"
]
},
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"query_string": {
"query": "**",
"fields": [
"ID"
]
}
}
]
}
}
],
"minimum_should_match": 1
}
},
"highlight": {
"type": "unified",
"fragment_size": 0,
"order": "score",
"number_of_fragments": 4,
"fields": {
"*": {}
}
}
}
结果:
{
"_index": "index_name",
"_type": "_doc",
"_id": "AUTO",
"_score": 1,
"_source": {
"ID": "AUTO"
},
"highlight": {
"ID": [
"<em>AUTO</em>"
]
}
}
{
"from": 0,
"size": 10,
"_source": {
"includes": [
"ID"
]
},
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"query_string": {
"query": "*",
"fields": [
"ID"
]
}
}
]
}
}
],
"minimum_should_match": 1
}
},
"highlight": {
"type": "unified",
"fragment_size": 0,
"order": "score",
"number_of_fragments": 4,
"fields": {
"*": {}
}
}
}
结果:
{
"_index": "index_name",
"_type": "_doc",
"_id": "AUTO",
"_score": 1,
"_source": {
"ID": "AUTO"
}
}
答案 0 :(得分:0)
对于这些查询为何表现不同的问题,我没有直接答案。但是您可以改用通配符查询。
{
"_source": {
"includes": [
"ID"
]
},
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"wildcard": {
"ID": "*"
}
}
]
}
}
],
"minimum_should_match": 1
}
},
"highlight": {
"type": "unified",
"fragment_size": 0,
"order": "score",
"number_of_fragments": 4,
"fields": {
"*": {}
}
}
}
希望这会有所帮助。
答案 1 :(得分:0)
请查看the documentation of Query String Query。有:
将纯通配符
\*
重写为exists
查询以提高效率。作为一个 因此,通配符"field:*"
将匹配带有 空值,如下所示:{ "field": "" }
...并且会 如果字段丢失或使用显式的空值设置,则不匹配 类似于以下内容:{ "field": null }
因此,我猜测单数*
会因此而以特殊方式处理。