2

我在对嵌套对象执行构面搜索时遇到问题。

以我有以下文件为例:

tags: [
   {
       tag: "tag0",
       tag_url: "http://xxxxxxx.com/tag/tag0/"
   },
   {
       tag: "tag1",
       tag_url: "http://xxxxxx.com/tag/tag1/"
   }
],

categories: [
    {
        category: "cat0",
        category_url: "http://xxxxxx.com/category/cat0/"
    },
    {
        category: "cat1",
        category_url: "http://xxxxxx.com/category/cat1/"
    }
],

我想在tags.tagtags.tag_url

所以我使用什么映射来index:not_analyzed为嵌套字段创建?

我试过这个映射:

    mapping_data[mapping_name]["properties"] = {
        "tags.tag" : {
            "type": "multi_field",
                "fields" : {
                    "tags.tag": {"type" : "string", "index" : "analyzed", "store": "yes"},
                    "untouched" : {"type" : "string", "index" : "not_analyzed"}
                }
        },
        "tags.tag_url" : {
            "type": "multi_field",
                "fields" : {
                    "tags.tag_url": {"type" : "string", "index" : "analyzed", "store": "yes"},
                    "untouched" : {"type" : "string", "index" : "not_analyzed"}
                }
        },
        "categories.category" : {
            "type": "multi_field",
                "fields" : {
                    "categories.category": {"type" : "string", "index" : "analyzed", "store": "yes"},
                    "untouched" : {"type" : "string", "index" : "not_analyzed"}
                }
        }, 
        "categories.category_url" : {
            "type": "multi_field",
                "fields" : {
                    "categories.category_url": {"type" : "string", "index" : "analyzed", "store": "yes"},
                    "untouched" : {"type" : "string", "index" : "not_analyzed"}
                }
        },

}

mapping_data[mapping_name]["properties"] = {
        "tags" : {
            "type": "nested"
        },

        "categories" : {
            "type": "nested"
        }, 
}

但它没有给我所需的结果。

使用type:nested, 仍然标记嵌套字段,而type: multi_field不能表示嵌套字段为not_analyzed。(请注意,我tags.tagmulti_field变体中使用了,但无济于事。)

那么,如何表达映射以实现嵌套文档的方面?

PS:http ://www.elasticsearch.org/guide/reference/mapping/nested-type/和http://www.elasticsearch.org/guide/reference/mapping/nested-type/没有产生我需要的结果因为我没有 value_field。

4

1 回答 1

5

以下是您应该用于tags嵌套字段的 json 映射:

{
    "type" : {
        "properties" : {
            "tags" : {
                "type": "nested",
                "properties" : {
                    "tag" : {
                        "type": "multi_field",
                        "fields" : {
                            "tag": {"type" : "string", "index" : "analyzed", "store": "yes"},
                            "untouched" : {"type" : "string", "index" : "not_analyzed"}
                        }
                    },
                    "tag_url" : {
                        "type": "multi_field",
                        "fields" : {
                            "tag_url": {"type" : "string", "index" : "analyzed", "store": "yes"},
                            "untouched" : {"type" : "string", "index" : "not_analyzed"}
                        }
                    }
                }
            }
        }
    }
}

定义一个包含属性的嵌套对象非常好,在您的情况下,属性可以是任何类型multi_field

tags.untouched然后,您可以像这样在字段上创建所需的方面:

{
    "query" : {
      "match_all" : {} 
    },
    "facets": {
      "tags": {
        "terms": {
          "field": "tags.tag.untouched",
          "size": 10
        },
        "nested" : "tags"
      }
    }
}

我使用最新版本的 elasticsearch 对此进行了测试。请记住,嵌套构面的制作方式自 0.90 以来已发生变化。查看此问题以了解更多信息。

于 2013-07-02T11:28:21.333 回答