Elasticsearch-搜索所有字段中的搜索关键字,并使用过滤器配对结果



这个问题的目的是解决在我的前端实施刻面导航方面的问题。我在UI中有一个输入字段,允许用户查询所有字段/所有索引上的任何术语(全文)。我还希望用户能够使用刻面导航(例如过滤器)将结果与结果配对。

例如,如果用户搜索关键字" Thomson",则应在所有字段中搜索。然后,将向用户提供代表过滤器的两个(或更多)复选框(例如,"地理位置"one_answers"组") - 这应该是一个和过滤器。我已经尝试了以下Elasticsearch查询,但无济于事。

{
   "query":{
      "bool":{
        "must": {
            "multi_match": {
                "query": "thomson",
                "fields": ["*"]
            }
        },
         "should":[
            {
               "terms":{
                  "geographicLocation": ["USA", "ENGLAND"]
               }
            },
            {
               "terms":{
                  "Group": ["AA", "BB"]
               }
            }
         ]
      }
   }
}

所以假设我在ES中有以下文档:

{ name: 'Joe', street: '3 thomson st', geographicLocation: 'USA', Group: 'AA' }
{ name: 'Thomson': street: '1 york ave', geographicLocation: 'CHINA', Group: 'BB' }
{ name: 'Jane', street: '2 jones dr' geographicLocation: 'ENGLAND', Group: 'CC' }

首先,我只能获得在字段中某个地方具有"汤姆森"的结果(例如,上面的前两个文档)。然后,应通过"美国"或"英格兰"one_answers" AA"或" bb"的组来滤除这些。

因此,我希望文档中的某个地方具有"汤姆森"的文档,这些文档具有美国或英格兰的地理位置,并且在AA组或BB组中。这让我只有第一个文档。

我有一个不可能的时间来管理上述ES参数以使其正常工作。

编辑:这是我的映射:

{
  "person": {
    "mappings": {
      "TEST": {
        "properties": {
          "name": {
            "type": "text"
          },
          "street": {
            "type": "text"
          },
          "EndDate": {
            "type": "long"
          },
          "EndDt": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "Group": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "d3232b0e1b28bfb8b432a3459404676d:created_date": {
            "type": "date"
          },
          "d3232b0e1b28bfb8b432a3459404676d:edited": {
            "type": "date"
          },
          "geographicRegion": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}

简单地将两个移动在必需条款中

{
   "query":{
      "bool":{
        "must": ,
         "must":[
            {
                "multi_match": {
                    "query": "thomson",
                    "fields": ["name", "street"]
                }
            },
            {
               "terms":{
                  "geographicLocation.keyword": ["USA", "ENGLAND"]
               }
            },
            {
               "terms":{
                  "Group.keyword": ["AA", "BB"]
               }
            }
         ]
      }
   }
}

最新更新