Elasticsearch:数组的交集

时间:2017-05-10 12:09:30

标签: elasticsearch elasticsearch-5 elasticsearch-query

假设我的文件是这样的

{
    "salary": {
        "max": 1572,
        "min": 682
    },
    "skills": [
        "Modula-3",
        "Max/MSP",
        "Arduino",
        "SPARK",
        "PL/SQL",
        "Processing",
        "Go",
        "Mathematica",
        "Modula-2",
        "IDL",
        "Heron",
        "Scheme"
    ],
    "company": "Merck",
    "experience": 0,
    "role": "Airport Security Screener",
    "cities": [
        "Ahmedabad",
        "Mangaluru",
        "Malegaon",
        "Bokaro Steel City",
        "Vadodara",
        "Kollam"
    ]
}

我想做一个查询,其中我将提供一组城市,并将根据交叉点的基数获得订购的文件。即假设我的城市集合为["Ahmedabad", "Mangaluru"],那么此查询与上述文档的交集的基数为2.我的查询应该是什么?

样本回复

{"_score": 4.0202227, "cities": ["Ahmedabad","Mangaluru","Visakhapatnam", "Vijayawada"]}
{"_score": 2.27, "cities": ["Ahmedabad","Visakhapatnam", "Vijayawada"]}
{"_score": 1.79, "cities": ["Mangalauru","Vijayawada", "delhi", "bombay"]}

我正在使用elasticsearch 5.2.2

1 个答案:

答案 0 :(得分:0)

这样的事情对你有帮助吗?

{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "cities": "Ahmedabad Mangaluru"
        }
      },
      "functions": [
        {
          "filter": {
            "match": {
              "cities": "Ahmedabad"
            }
          },
          "weight": 1
        },
        {
          "filter": {
            "match": {
              "cities": "Mangaluru"
            }
          },
          "weight": 1
        }
      ],
      "score_mode": "sum"
    }
  }
}