Elasticsearch术语过滤内部对象字段不匹配

时间:2013-07-28 23:33:18

标签: search lucene elasticsearch

我刚刚组织了我的文档结构以具有更多OO设计(例如,将venueIdvenueName等顶级属性移动到venue对象id和{ {1}}字段)。

但是我现在无法使用简单的术语过滤器来处理子name内部对象上的字段。

这是我的映射:

venue

以下是一个示例文档:

{
    "deal": {
        "properties": {
            "textId": {"type":"string","name":"textId","index":"no"},
            "displayId": {"type":"string","name":"displayId","index":"no"},
            "active": {"name":"active","type":"boolean","index":"not_analyzed"},
            "venue": {
                "type":"object",
                "path":"full",
                "properties": {
                    "textId": {"type":"string","name":"textId","index":"not_analyzed"},
                    "regionId": {"type":"string","name":"regionId","index":"not_analyzed"},
                    "displayId": {"type":"string","name":"displayId","index":"not_analyzed"},
                    "name": {"type":"string","name":"name"},
                    "address": {"type":"string","name":"address"},
                    "area": {
                        "type":"multi_field",
                        "fields": {
                            "area": {"type":"string","index":"not_analyzed"},
                            "area_search": {"type":"string","index":"analyzed"}}},
                    "location": {"type":"geo_point","lat_lon":true}}},
            "tags": {
                "type":"multi_field",
                "fields": {
                    "tags":{"type":"string","index":"not_analyzed"},
                    "tags_search":{"type":"string","index":"analyzed"}}},
            "days": {
                "type":"multi_field",
                "fields": {
                    "days":{"type":"string","index":"not_analyzed"},
                    "days_search":{"type":"string","index":"analyzed"}}},
            "value": {"type":"string","name":"value"},
            "title": {"type":"string","name":"title"},
            "subtitle": {"type":"string","name":"subtitle"},
            "description": {"type":"string","name":"description"},
            "time": {"type":"string","name":"time"},
            "link": {"type":"string","name":"link","index":"no"},
            "previewImage": {"type":"string","name":"previewImage","index":"no"},
            "detailImage": {"type":"string","name":"detailImage","index":"no"}}}
}

这是对同一文件的'解释'测试:

GET /production/deals/wa-au-some-venue-weekends-some-deal

{
    "_index":"some-index-v1",
    "_type":"deals",
    "_id":"wa-au-some-venue-weekends-some-deal",
    "_version":1,
    "exists":true, 
    "_source" : {
        "id":"921d5fe0-8867-4d5c-81b4-7c1caf11325f",
        "textId":"wa-au-some-venue-weekends-some-deal",
        "displayId":"some-venue-weekends-some-deal",
        "active":true,
        "venue":{
            "id":"46a7cb64-395c-4bc4-814a-a7735591f9de",
            "textId":"wa-au-some-venue",
            "regionId":"wa-au",
            "displayId":"some-venue",
            "name":"Some Venue",
            "address":"sdgfdg",
            "area":"Swan Valley & Surrounds"},
        "tags":["Lunch"],
        "days":["Saturday","Sunday"],
        "value":"$1",
        "title":"Some Deal",
        "subtitle":"",
        "description":"",
        "time":"5pm - Late"
    }
}

有没有办法获得更多有用的调试信息? 解释结果描述有问题吗?简单地说“不匹配id 0”对我来说真的没有意义......该字段被称为'regionId'(不是'id'),值绝对不是0 ...... ???

1 个答案:

答案 0 :(得分:5)

这是因为您提交映射的类型称为deal,而您为该文档编制索引的类型称为deals

如果您查看类型deals的映射,您会看到自动生成并且分析了field venue.regionId字段,因此您的索引中很可能有两个令牌:{{1} }和wa。只搜索该类型的那些令牌,您将获得该文档。

其他任何东西看起来都很棒!只有一个小角色是错的;)