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

时间:2017-01-18 11:14:55

标签: elasticsearch

我试图从嵌套查询的点击返回突出显示。根据文档,这是可能的。文档说:

  

父/子和嵌套功能允许返回在不同范围内具有匹配项的文档。在嵌套的情况下,基于嵌套内部对象中的匹配返回文档。   内部命中功能返回搜索响应中每次搜索命中的其他嵌套命中,导致搜索命中在不同范围内匹配。   可以通过在嵌套,has_child或has_parent查询和过滤器上定义inner_hits定义来使用内部命中。   内部命中还支持以下每个文档功能:

     
    

'突出显示','解释来源','过滤','脚本字段','文档值','字段','包含版本'。

  

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

但是我无法根据以下映射和查询来实现此功能。任何人都可以解释我出错的原因和地点吗?

注意:我具体指的是嵌套类型而不是parent_child。

我发现只有在将referenceIdValue和ReferenceIdType从关键字更改为文本时才有效,但显然这不是我想要的。 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 个答案:

答案 0 :(得分:0)

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

                "inner_hits": {
                    "highlight": {
                        "fields": {
                            "referenceIdValue": {},
                            "referenceIdType": {}
                        }
                    }
                },