Elasticsearch:将文档与数组匹配

时间:2015-03-31 15:15:40

标签: javascript elasticsearch

我对弹性搜索非常陌生,文档真的让我感到困惑所以请在这里稍等一下。

我有一个名为zproducts的索引,在其下面有一个名为item的类型,它的映射看起来有点像这样:

{
   "item_name" : "Product A",
   "category_ids" : [ "id1", "id2" ]
},
{
   "item_name" : "Product B",
   "category_ids" : [ "id1" ]
},
{
   "item_name" : "Product C",
   "category_ids" : [ "id2" ]
}

我希望能够查询至少与其中一个类别匹配的项目。即。查询id2将返回产品A和C.

似乎我遇到了与this家伙完全相同的问题。

但解决方案表明,那对我来说并不起作用。

这是我目前的查询:

/zproducts/items/_search

{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "category_ids": "id2"
                    }
                }
            ]
        }
    }
}

后续测试查询:

{
    "query": {
        "filtered": {
            "filter": {
                "term": {
                    "category_ids": "id2"
                }
            }
        }
    }
}

两个查询都会返回商店中的所有商品,而不仅仅是我尝试查询的商品。

还有一个原始查询,出于某种原因,曾经工作但完全停止了工作。

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "category_ids": {
                            "query": "id2",
                            "operator": "or"
                        }
                    }
                }
            ]
        }
    }
}

那我在这里做错了什么?谁能请一些亮点?

1 个答案:

答案 0 :(得分:1)

此查询:

{
    "query": {
        "filtered": {
            "filter": {
                "term": {
                    "category_ids": "id2"
                }
            }
        }
    }
}

是对的。确保您的请求为POST /zproducts/items/_search,而不是GET /zproducts/items/_search - 查询索引中的所有文档是一个很好的提示,即查询正文被忽略,这是一个很好的提示,你正在使用GET;许多客户端不会发送带有GET请求的请求正文,ES将其解释为空白查询。