弹性搜索中的特定索引词过滤器

时间:2018-09-10 11:26:28

标签: elasticsearch lucene

我有一个多匹配搜索查询,以前我根据client_code字词过滤器限制了搜索结果。效果很好。

我现在需要进一步限制结果,因为某些用户只能返回有限零件或产品ID的结果。部件/产品ID会有所不同,并将通过应用程序逻辑确定。

我在下面无法正常工作的示例中所苦苦挣扎的是如何为每个索引中的ID应用术语过滤器。

GET parts,products/_search
{
  "size": 20,
  "query": {
    "bool": {
      "must": [],
      "filter": [
        {
          "terms": {
            "client_code": [
              "abc"
            ]
          }
        },
        {
          "terms": {
             "products.id": [
              123,456,789
            ]
          }  
        },
        {
          "terms": {
             "parts.id": [
              abc123,abc456,abc789
            ]
          }  
        },
        {
          "multi_match": {
            "query": "foo",
            "fields": [
              "_id",
              "name",
              "sku",
              "title",
              "barcode"
            ]
          }
        }
      ]
    }
  }
}

当然,我可以像这样应用术语过滤器:

    {
      "terms": {
         "id": [
          123,456,abc789
        ]
      }  
    }

但是,如果跨索引的ID相同(当数据来自自动递增的DB时就是这种情况),我需要一种方式说“给我产品ID 1,2&3和部件ID 1,3&例如4'。我希望这有意义吗?

任何指针将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果您指定了数据类型,我可以给出更具体的答案,但是从您提供的内容来看,应该看看嵌套查询。

https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html