Я не могу получить граненый поиск, работающий в упругом поиске - PullRequest
2 голосов
/ 14 декабря 2011

Я не могу понять QueryDSL для аспектов в упругом поиске.Ниже мой объект запроса и отображение для моего tags массива.Я пытаюсь получить их, чтобы вставить граненую навигацию на основе тегов.Каждый «элемент» будет иметь несколько тегов, связанных в массиве тегов [Не все элементы будут иметь теги.У некоторых будет пустой массив.Каждый тег является объектом со свойствами id и tag.

Я попробовал подход с вложенными фасетами и получил ошибку «теги не вложены», поэтому я попробую это ниже.Я не получаю сообщение об ошибке, но в возвращаемом JSON отсутствует объект фасетов.Я пользуюсь этой страницей для справки: http://www.elasticsearch.org/guide/reference/api/search/facets/index.html.

Может ли кто-нибудь помочь мне правильно отформатировать и понять организацию этих?Я ценю любую помощь!

// this is my query object
{
  "sort":{ "created_at":{ "order":"desc" } },
  "query":{
    "constant_score":{
      "filter":{
        "and":[
          { "missing":{ "field":"parent_id" } },
          { "missing":{ "field":"wall_id" } },
          { "term":{ "active":true } }
        ]  
      }
    }
  },
  "facets":{
    "tags":{ "terms":{ "field":"tags.tag" } }
  }
}


// this is the mapping for the tags array
"tags":{
  "type":"nested",
  "include_in_parent":true,
  "properties":{
    "id":{ "type":"integer" },
    "tag":{ "type":"string" }
  }
},

1 Ответ

7 голосов
/ 19 декабря 2011

Я очень старался повторить это (используя 0.18.5), но безуспешно.Некоторые подробности ниже.Первый пример пытается воспроизвести то, что вы описываете.Второй не отображает теги как include_in_parent и использует «вложенное» поле в запросе фасета.Как видите, в обоих случаях фасет возвращается.

Это наводит меня на мысль, что что-то не так с остальными сопоставлениями или каким-то документом (не предоставленным вами образцом), вызывающим проблемы.

Когда вы пытались использовать вложенныеподход, возможно, вы использовали «nested»: «tags.tag» вместо «nested»: «tags»?

(Un) Успешная попытка №1:

Создать индекс с сопоставлениями:

$ curl -XPOST 'http://localhost:9200/testindex/' -d '{
"mappings": {
    "element": {
        "properties": {
            "tags": {
                "type": "nested",
                "include_in_parent": true,
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "tag": {
                        "type": "string"
                    }
                }
            }
        }
    }
}

} '

Индексный документ:

    $ curl -XPOST 'http://localhost:9200/testindex/element' -d '{
    "element_id": 4682,
    "parent_id": null,
    "wall_id": null,
    "username": "John Doe",
    "avatar": "56f1bb0a96d02b90e5915ff38ea189ec.jpg",
    "title": "Easy Chart  is a great easy comparison chart maker for math and...",
    "description": "<p>Easy Chart  is a great easy comparison chart maker for math and science skills. It even allows you to pick the appropriate chart type.</p>",
    "groups": [
        {
            "id": 6,
            "name": "Fourth Grade (All Subjects)",
            "name_short": "4th Grade"
        },
        {
            "id": 17,
            "name": "Eighth Grade Science",
            "name_short": "8th Science"
        },
        {
            "id": 13,
            "name": "Seventh Grade Science",
            "name_short": "7th Science"
        },
        {
            "id": 9,
            "name": "Sixth Grade Science",
            "name_short": "6th Science"
        }
    ],
    "tags": [
        {
            "id": 33,
            "tag": "iPad"
        },
        {
            "id": 32,
            "tag": "iPod"
        }
    ],
    "webpages": [],
    "videos": [],
    "documents": [],
    "photos": [],
    "reports": [],
    "bookmarks": [],
    "likes": [],
    "dislikes": [],
    "element_type": "Post",
    "active": true,
    "deleted": false,
    "updated_at": "2011-11-27T21:37:38-0600",
    "created_at": 1322451458000,
    "created_at_formatted": "2 weeks ago"
}'

Поиск:

$ curl -XPOST 'http://localhost:9200/testindex/element/_search' -d '{
  "sort":{ "created_at":{ "order":"desc" } },
  "query":{
    "constant_score":{
      "filter":{
        "and":[
          { "missing":{ "field":"parent_id" } },
          { "missing":{ "field":"wall_id" } },
          { "term":{ "active":true } }
        ]  
      }
    }
  },
  "facets":{
    "tags":{ "terms":{ "field":"tags.tag" } }
  }
}'

Результат:

{
    "took": 4,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": null,
        "hits": [
            {
                "_index": "testindex",
                "_type": "element",
                "_id": "RZK41LngTKOhMUS6DXRi7w",
                "_score": null,
                "_source": {
                    "element_id": 4682,
                    "parent_id": null,
                    "wall_id": null,
                    "username": "John Doe",
                    "avatar": "56f1bb0a96d02b90e5915ff38ea189ec.jpg",
                    "title": "Easy Chart  is a great easy comparison chart maker for math and...",
                    "description": "<p>Easy Chart  is a great easy comparison chart maker for math and science skills. It even allows you to pick the appropriate chart type.</p>",
                    "groups": [
                        {
                            "id": 6,
                            "name": "Fourth Grade (All Subjects)",
                            "name_short": "4th Grade"
                        },
                        {
                            "id": 17,
                            "name": "Eighth Grade Science",
                            "name_short": "8th Science"
                        },
                        {
                            "id": 13,
                            "name": "Seventh Grade Science",
                            "name_short": "7th Science"
                        },
                        {
                            "id": 9,
                            "name": "Sixth Grade Science",
                            "name_short": "6th Science"
                        }
                    ],
                    "tags": [
                        {
                            "id": 33,
                            "tag": "iPad"
                        },
                        {
                            "id": 32,
                            "tag": "iPod"
                        }
                    ],
                    "webpages": [],
                    "videos": [],
                    "documents": [],
                    "photos": [],
                    "reports": [],
                    "bookmarks": [],
                    "likes": [],
                    "dislikes": [],
                    "element_type": "Post",
                    "active": true,
                    "deleted": false,
                    "updated_at": "2011-11-27T21:37:38-0600",
                    "created_at": 1322451458000,
                    "created_at_formatted": "2 weeks ago"
                },
                "sort": [
                    1322451458000
                ]
            }
        ]
    },
    "facets": {
        "tags": {
            "_type": "terms",
            "missing": 0,
            "total": 2,
            "other": 0,
            "terms": [
                {
                    "term": "ipod",
                    "count": 1
                },
                {
                    "term": "ipad",
                    "count": 1
                }
            ]
        }
    }
}

(Un) Успешная попытка № 2:

Создание индекса с сопоставлениями:

$ curl -XPOST 'http://localhost:9200/testindex2/' -d '{
"mappings": {
    "element": {
        "properties": {
            "tags": {
                "type": "nested",
                "include_in_parent": false,
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "tag": {
                        "type": "string"
                    }
                }
            }
        }
    }
}

} '

Индексный документ:

    $ curl -XPOST 'http://localhost:9200/testindex2/element' -d '{
    "element_id": 4682,
    "parent_id": null,
    "wall_id": null,
    "username": "John Doe",
    "avatar": "56f1bb0a96d02b90e5915ff38ea189ec.jpg",
    "title": "Easy Chart  is a great easy comparison chart maker for math and...",
    "description": "<p>Easy Chart  is a great easy comparison chart maker for math and science skills. It even allows you to pick the appropriate chart type.</p>",
    "groups": [
        {
            "id": 6,
            "name": "Fourth Grade (All Subjects)",
            "name_short": "4th Grade"
        },
        {
            "id": 17,
            "name": "Eighth Grade Science",
            "name_short": "8th Science"
        },
        {
            "id": 13,
            "name": "Seventh Grade Science",
            "name_short": "7th Science"
        },
        {
            "id": 9,
            "name": "Sixth Grade Science",
            "name_short": "6th Science"
        }
    ],
    "tags": [
        {
            "id": 33,
            "tag": "iPad"
        },
        {
            "id": 32,
            "tag": "iPod"
        }
    ],
    "webpages": [],
    "videos": [],
    "documents": [],
    "photos": [],
    "reports": [],
    "bookmarks": [],
    "likes": [],
    "dislikes": [],
    "element_type": "Post",
    "active": true,
    "deleted": false,
    "updated_at": "2011-11-27T21:37:38-0600",
    "created_at": 1322451458000,
    "created_at_formatted": "2 weeks ago"
}'

Поиск:

$ curl -XPOST 'http://localhost:9200/testindex2/element/_search' -d '{
  "sort":{ "created_at":{ "order":"desc" } },
  "query":{
    "constant_score":{
      "filter":{
        "and":[
          { "missing":{ "field":"parent_id" } },
          { "missing":{ "field":"wall_id" } },
          { "term":{ "active":true } }
        ]  
      }
    }
  },
  "facets":{
    "tags":{ "terms":{ "field":"tags.tag" }, "nested":"tags" }
  }
}'

Результат:

{
    "took": 17,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": null,
        "hits": [
            {
                "_index": "testindex2",
                "_type": "element",
                "_id": "_F1TTGJETOipo8kVR7ZXkQ",
                "_score": null,
                "_source": {
                    "element_id": 4682,
                    "parent_id": null,
                    "wall_id": null,
                    "username": "John Doe",
                    "avatar": "56f1bb0a96d02b90e5915ff38ea189ec.jpg",
                    "title": "Easy Chart  is a great easy comparison chart maker for math and...",
                    "description": "<p>Easy Chart  is a great easy comparison chart maker for math and science skills. It even allows you to pick the appropriate chart type.</p>",
                    "groups": [
                        {
                            "id": 6,
                            "name": "Fourth Grade (All Subjects)",
                            "name_short": "4th Grade"
                        },
                        {
                            "id": 17,
                            "name": "Eighth Grade Science",
                            "name_short": "8th Science"
                        },
                        {
                            "id": 13,
                            "name": "Seventh Grade Science",
                            "name_short": "7th Science"
                        },
                        {
                            "id": 9,
                            "name": "Sixth Grade Science",
                            "name_short": "6th Science"
                        }
                    ],
                    "tags": [
                        {
                            "id": 33,
                            "tag": "iPad"
                        },
                        {
                            "id": 32,
                            "tag": "iPod"
                        }
                    ],
                    "webpages": [],
                    "videos": [],
                    "documents": [],
                    "photos": [],
                    "reports": [],
                    "bookmarks": [],
                    "likes": [],
                    "dislikes": [],
                    "element_type": "Post",
                    "active": true,
                    "deleted": false,
                    "updated_at": "2011-11-27T21:37:38-0600",
                    "created_at": 1322451458000,
                    "created_at_formatted": "2 weeks ago"
                },
                "sort": [
                    1322451458000
                ]
            }
        ]
    },
    "facets": {
        "tags": {
            "_type": "terms",
            "missing": 0,
            "total": 2,
            "other": 0,
            "terms": [
                {
                    "term": "ipod",
                    "count": 1
                },
                {
                    "term": "ipad",
                    "count": 1
                }
            ]
        }
    }
}
...