Elasticsearch:匹配其中包含数组的文档
Elasticsearch: Matching documents with an array in it
我是 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" ]
}
我希望能够查询至少与其中一个类别匹配的项目。 IE。查询 id2
将 return 产品 A 和 C。
看来我遇到的问题与 人遇到的问题完全相同。
但是那里建议的解决方案对我不起作用。
这是我当前的查询:
/zproducts/items/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"category_ids": "id2"
}
}
]
}
}
}
后续测试查询:
{
"query": {
"filtered": {
"filter": {
"term": {
"category_ids": "id2"
}
}
}
}
}
两个查询 return 商店中的所有商品,而不仅仅是我要查询的商品。
还有一个原始查询,由于某种原因,它曾经工作但完全停止工作。
{
"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 将其解释为空白查询。
我是 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" ]
}
我希望能够查询至少与其中一个类别匹配的项目。 IE。查询 id2
将 return 产品 A 和 C。
看来我遇到的问题与
但是那里建议的解决方案对我不起作用。
这是我当前的查询:
/zproducts/items/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"category_ids": "id2"
}
}
]
}
}
}
后续测试查询:
{
"query": {
"filtered": {
"filter": {
"term": {
"category_ids": "id2"
}
}
}
}
}
两个查询 return 商店中的所有商品,而不仅仅是我要查询的商品。
还有一个原始查询,由于某种原因,它曾经工作但完全停止工作。
{
"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 将其解释为空白查询。