有没有办法将最小分数应用于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。
答案 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
但是,您似乎不太可能单独访问每个字段结果的分数。