当前位置: 首页 > 知识库问答 >
问题:

如何在Elasticsearch v5中突出显示嵌套对象命中

宋俊艾
2023-03-14

我正在尝试在嵌套查询的命中时返回突出显示。根据文档,这是可能的。文档说:

父/子和嵌套特性允许返回在不同范围内匹配的文档。在嵌套的情况下,基于嵌套内部对象中的匹配返回文档。内部命中功能在搜索响应中为每个搜索命中返回导致搜索命中在不同范围内匹配的附加嵌套命中。通过在嵌套、has_child或has_parent查询和筛选器上定义inner_hits定义,可以使用内部命中。Inner hits还支持以下每个文档的功能:

“突出显示”、“解释源”、“筛选”、“脚本字段”、“文档值”、“字段”、”包括版本“。

https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-request-inner-hits.html#nested-inner-hits

然而,基于以下映射和查询,我无法获得此工作。有人能解释我为什么会出错,哪里会出错吗?

注意:我特别指的是嵌套类型,而不是parent_child。

我发现它仅在将引用Id值和引用IdType从关键字更改为文本时才有效,但显然这不是我想要的。ES 文档 说:

字段名支持通配符表示法。例如,使用comment_*将使所有与表达式匹配的文本和关键字字段(以及5.0之前版本的字符串)突出显示。请注意,所有其他字段都不会突出显示https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-highlighting.html#_highlight_query我想这可能是个错误?

非常感谢。

映射:

{
"entity": {
    "dynamic_templates": [{
        "catch_all": {
            "match_mapping_type": "*",
            "mapping": {
                "type": "text",
                "store": true,
                "analyzer": "phonetic_index",
                "search_analyzer": "phonetic_query"
            }
        }
    }],
    "_all": {
        "enabled": false
    },
    "properties": {
        "entityName": {
            "type": "text",
            "store": true,
            "analyzer": "indexed_index",
            "search_analyzer": "indexed_query",
        "referenceIds": {
            "type": "nested",
            "properties": {
                "referenceIdValue": {
                    "type": "keyword",
                    "norms": true,
                    "store": true
                },
                "referenceIdType": {
                    "type": "keyword",
                    "store": true,
                    "norms": true
                }
            }
        },
        "isPublished": {
            "type": "boolean",
            "store": true
        }
    }
}
}

查询:

curl -XGET "127.0.0.1:9200/test/entity/_search?pretty" -d"
{
"query": {
    "bool": {
        "filter": {
            "term": {
                "isPublished": "true"
            }
        },
        "must": [
            [{
                "nested": {
                    "query": {
                        "bool": {
                            "must": [
                                [{
                                    "term": {
                                        "referenceIds.referenceIdValue": "123456"
                                    }
                                }, {
                                    "term": {
                                        "referenceIds.referenceIdType": "ENCO"
                                    }
                                }]
                            ]
                        }
                    },
                    "inner_hits": {
                        "highlight": {
                            "fields": {
                                "referenceIds.referenceIdValue": {},
                                "referenceIds.referenceIdType": {}
                            }
                        }
                    },
                    "path": "referenceIds"
                }
            }]
        ]
    }
}
}"

结果:

{
"took": 99,
"timed_out": false,
"_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
},
"hits": {
    "total": 1,
    "max_score": 14.319202,
    "hits": [{
        "_index": "test",
        "_type": "entity",
        "_id": "3423631",
        "_score": 14.319202,
        "_source": {
            "entityName": "Test Entity",
            "referenceIds": [{
                "referenceIdValue": "AAAABBBB",
                "referenceIdType": "SULA"
            }, {
                "referenceIdValue": "123456",
                "referenceIdType": "ENCO"
            }]
        },
        "inner_hits": {
            "referenceIds": {
                "hits": {
                    "total": 1,
                    "max_score": 14.319202,
                    "hits": [{
                        "_nested": {
                            "field": "referenceIds",
                            "offset": 3
                        },
                        "_score": 14.319202,
                        "_source": {
                            "referenceIdValue": "123456",
                            "referenceIdType": "ENCO"
                        }
                    }]
                }
            }
        }
    }]
}
}

共有1个答案

易超
2023-03-14

我认为这是因为在查询的突出显示部分,您需要设置相对于嵌套文档的路径。试试这个:

                "inner_hits": {
                    "highlight": {
                        "fields": {
                            "referenceIdValue": {},
                            "referenceIdType": {}
                        }
                    }
                },
 类似资料:
  • 我将spring boot与thymeleaf结合使用,在页面中尝试显示表单及其嵌套对象。 我的对象工厂有 id 当我显示时 我的工厂有很多机器,但没有一台展出 任何想法?

  • 我使用http://svn.openstreetmap.org/applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/demo.java中的代码为我的swing应用程序创建并运行一个映射。 我添加了几个MapMarkerDot来指示地图中的一些点,并使用如何从JMapViewer世界地图中获取鼠标单击位置来识别是否选

  • 问题内容: 我使用鼠标在html页面(在firefox中打开)上选择一些文本,并使用javascript函数创建/获取与所选文本相对应的rangeobject。 现在我要突出显示rangeobject下的所有文本。 好吧,这仅在rangeobject(起点和终点)位于同一textnode时有效,然后突出显示相应的文本。 但是,如果range对象覆盖多个文本节点,则它不能正常工作,它仅突出显示第一个

  • 我使用的是sequelize ORM,而对于DB我使用的是MySQL,在其中我关联了两个表并获得了数据,但我希望第二个数据(另一个表的数据)不应该像嵌套对象一样进来,而是我们可以在一个对象中显示所有数据(两个表的数据)。 让我展示一下屏幕快照。 我想要的东西。 忽略数据的键和值,但我的问题是,我们是否可以在同一对象中显示另一个表的数据(像inner join一样),而不是像嵌套对象中的数据。 任何