我是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"
                        }
                    }
                }
            ]
        }
    }
}

那么,我在这里做错了什么?任何人都可以阐明一下吗?

最佳答案

该查询:

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

是正确的。确保您以POST /zproducts/items/_search而不是GET /zproducts/items/_search发出请求-将索引中的所有文档都返回给查询,这是一个很好的提示,表明查询主体已被忽略,这是在使用GET的很好提示;许多客户端不会发送带有GET请求的请求正文,该请求正文被ES解释为空白查询。

关于javascript - Elasticsearch:匹配文档中的数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29372142/

10-11 08:47