Min_score为"必须"在Elasticsearch中的bool查询中

时间:2016-07-21 08:53:58

标签: elasticsearch relevance booleanquery

有没有办法将最小分数应用于elasticsearch中的bool查询中的must子句。

我希望能够做到这样的事情:

String inputFile = "hdfs://hdfs:8020/data/testdata.bin";
SparkConf sparkConf = SparkConfFactory.createSparkConf("WeatherData");
JavaSparkContext sc = new JavaSparkContext(sparkConf);
JavaPairRDD<String, PortableDataStream> inputRdd = sc.binaryFiles(inputFile);

List<Tuple2<String, PortableDataStream>> asList = inputRdd.collect();       
for(Tuple2<String, PortableDataStream> a : asList) {
    System.out.println(a._1());                                             // Key = File path
    DataInputStream in = new DataInputStream(a._2().open()); 
    BufferedReader d = new BufferedReader(new InputStreamReader(in));

    while(d.ready()) {
        System.out.println(d.readLine());                                   // Cryptic output
    }
}

这需要名称查询与分数&gt;匹配; 0.3和地址查询匹配分数&gt; 0.3表示要退回的文件。这是为了阻止真正好的名称匹配被返回,尽管有一个可怕的地址匹配(例如只匹配1),反之亦然。

我目前正在使用Elasticsearch 1.5,但我过去也曾想过2.3。

2 个答案:

答案 0 :(得分:2)

试试这个并告诉我它是否有效:

{
  "query": {
    "bool": {
      "must": [
        {
          "function_score": {
            "query": {
              "match": {
                "name": {
                  "query": "A Name"
                }
              }
            },
            "min_score": 0.3
          }
        },
        {
          "function_score": {
            "query": {
              "match": {
                "address": {
                  "query": "1 Somewhere Street, Somewhereset, UK"
                }
              }
            },
            "min_score": 0.3
          }
        }
      ]
    }
  }
}

答案 1 :(得分:0)

查询的分数似乎是从所有组合的字段计算出来的。您可以使用函数查询中的script_score更改分数的计算方式:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function-script-score

但是,您似乎不太可能单独访问每个字段结果的分数。